From 2fcb09e3f82298fe3af4ea7764d8473ba5cac498 Mon Sep 17 00:00:00 2001 From: hfj Date: Mon, 10 Aug 2026 16:15:13 +0800 Subject: [PATCH 1/2] fix: strip trailing semicolons from SQL before subquery wrapping --- .../java/io/github/malonetalk/agent/datasource/SqlExecutor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data-agent-backend/src/main/java/io/github/malonetalk/agent/datasource/SqlExecutor.java b/data-agent-backend/src/main/java/io/github/malonetalk/agent/datasource/SqlExecutor.java index 15ea586..9a2eee6 100644 --- a/data-agent-backend/src/main/java/io/github/malonetalk/agent/datasource/SqlExecutor.java +++ b/data-agent-backend/src/main/java/io/github/malonetalk/agent/datasource/SqlExecutor.java @@ -93,7 +93,7 @@ String validateAndTransform(String sql) { // inject LIMIT if absent, to prevent full table scans if (!hasLimit(select)) { - return "SELECT * FROM (" + sql + ") AS _sandbox LIMIT " + MAX_ROWS; + return "SELECT * FROM (" + select + ") AS _sandbox LIMIT " + MAX_ROWS; } return sql; } From 005000c416e06053bf2f9fdf38c842ea564c3696 Mon Sep 17 00:00:00 2001 From: hfj Date: Mon, 10 Aug 2026 17:43:58 +0800 Subject: [PATCH 2/2] fix: strip trailing semicolon before wrapping SQL in subquery --- .../io/github/malonetalk/agent/datasource/SqlExecutor.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/data-agent-backend/src/main/java/io/github/malonetalk/agent/datasource/SqlExecutor.java b/data-agent-backend/src/main/java/io/github/malonetalk/agent/datasource/SqlExecutor.java index 9a2eee6..599b5dc 100644 --- a/data-agent-backend/src/main/java/io/github/malonetalk/agent/datasource/SqlExecutor.java +++ b/data-agent-backend/src/main/java/io/github/malonetalk/agent/datasource/SqlExecutor.java @@ -93,7 +93,12 @@ String validateAndTransform(String sql) { // inject LIMIT if absent, to prevent full table scans if (!hasLimit(select)) { - return "SELECT * FROM (" + select + ") AS _sandbox LIMIT " + MAX_ROWS; + // strip trailing semicolon to avoid syntax error in subquery + String safeSql = sql.trim(); + if (safeSql.endsWith(";")) { + safeSql = safeSql.substring(0, safeSql.length() - 1).trim(); + } + return "SELECT * FROM (" + safeSql + ") AS _sandbox LIMIT " + MAX_ROWS; } return sql; }