From 151963ea7905d58b938f6f9636a3d4d9c184ca7a Mon Sep 17 00:00:00 2001 From: lexluo09 <39718951+lexluo09@users.noreply.github.com> Date: Fri, 13 Oct 2023 17:24:10 +0800 Subject: [PATCH] (improvement)(chat) support nested query sql (#210) --- .../common/util/jsqlparser/SqlParserSelectHelper.java | 10 +++++++++- .../util/jsqlparser/SqlParserSelectHelperTest.java | 7 +++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/com/tencent/supersonic/common/util/jsqlparser/SqlParserSelectHelper.java b/common/src/main/java/com/tencent/supersonic/common/util/jsqlparser/SqlParserSelectHelper.java index 3e9f92a7b..7f85d522e 100644 --- a/common/src/main/java/com/tencent/supersonic/common/util/jsqlparser/SqlParserSelectHelper.java +++ b/common/src/main/java/com/tencent/supersonic/common/util/jsqlparser/SqlParserSelectHelper.java @@ -139,8 +139,16 @@ public class SqlParserSelectHelper { } public static List getAllFields(String sql) { + List plainSelects = getPlainSelects(getPlainSelect(sql)); + Set results = new HashSet<>(); + for (PlainSelect plainSelect : plainSelects) { + List fields = getFieldsByPlainSelect(plainSelect); + results.addAll(fields); + } + return new ArrayList<>(results); + } - PlainSelect plainSelect = getPlainSelect(sql); + private static ArrayList getFieldsByPlainSelect(PlainSelect plainSelect) { if (Objects.isNull(plainSelect)) { return new ArrayList<>(); } diff --git a/common/src/test/java/com/tencent/supersonic/common/util/jsqlparser/SqlParserSelectHelperTest.java b/common/src/test/java/com/tencent/supersonic/common/util/jsqlparser/SqlParserSelectHelperTest.java index 80def539e..cef8b95d0 100644 --- a/common/src/test/java/com/tencent/supersonic/common/util/jsqlparser/SqlParserSelectHelperTest.java +++ b/common/src/test/java/com/tencent/supersonic/common/util/jsqlparser/SqlParserSelectHelperTest.java @@ -126,6 +126,13 @@ class SqlParserSelectHelperTest { + "= '2023-08-08' ORDER BY pv DESC LIMIT 1"); Assert.assertEquals(allFields.size(), 6); + + allFields = SqlParserSelectHelper.getAllFields( + "SELECT * FROM CSpider WHERE (评分 < (SELECT min(评分) FROM CSpider WHERE 语种 = '英文' ))" + + " AND 数据日期 = '2023-10-12'"); + + Assert.assertEquals(allFields.size(), 3); + }