From d97cb18a200fce0e6885c6ffad48cacb5c88ab4d Mon Sep 17 00:00:00 2001 From: lingo-xp <36907211+lingo-xp@users.noreply.github.com> Date: Tue, 17 Jun 2025 14:21:39 +0800 Subject: [PATCH] Fix holo order by quota. (#6456) * Fix holo order by quota. * Add test case. --- .../alibaba/druid/sql/visitor/SQLASTOutputVisitor.java | 10 ++++++++++ .../META-INF/druid/parser/hologres/dialect.properties | 1 + core/src/test/resources/bvt/parser/hive/0.txt | 9 +++++++++ core/src/test/resources/bvt/parser/hologres/0.txt | 9 +++++++++ 4 files changed, 29 insertions(+) create mode 100644 core/src/main/resources/META-INF/druid/parser/hologres/dialect.properties diff --git a/core/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java b/core/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java index 2f08b737f..060f1e522 100644 --- a/core/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/core/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -3041,6 +3041,16 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet if (expr instanceof SQLIntegerExpr) { print(((SQLIntegerExpr) expr).getNumber().longValue()); + } else if (expr instanceof SQLCharExpr) { + if (dialect != null) { + String name = "'" + ((SQLCharExpr) expr).getText() + "'"; + printName0(replaceQuota(name)); + } else { + printExpr(expr, parameterized); + } + } else if (expr instanceof SQLIdentifierExpr) { + ((SQLIdentifierExpr) expr).setName(replaceQuota(((SQLIdentifierExpr) expr).getName())); + printExpr(expr, parameterized); } else { printExpr(expr, parameterized); } diff --git a/core/src/main/resources/META-INF/druid/parser/hologres/dialect.properties b/core/src/main/resources/META-INF/druid/parser/hologres/dialect.properties new file mode 100644 index 000000000..2ccba8ecb --- /dev/null +++ b/core/src/main/resources/META-INF/druid/parser/hologres/dialect.properties @@ -0,0 +1 @@ +quote=" diff --git a/core/src/test/resources/bvt/parser/hive/0.txt b/core/src/test/resources/bvt/parser/hive/0.txt index 65c09494d..e32961a9b 100644 --- a/core/src/test/resources/bvt/parser/hive/0.txt +++ b/core/src/test/resources/bvt/parser/hive/0.txt @@ -1,3 +1,12 @@ +SELECT sum(ret_amount) AS '应收金额' +FROM test.test +GROUP BY a ORDER BY '应收金额' DESC; +-------------------- +SELECT sum(ret_amount) AS `应收金额` +FROM test.test +GROUP BY a +ORDER BY `应收金额` DESC; +------------------------------------------------------------------------------------------------------------------------ select substr(${yesterday},1,4) -------------------- SELECT substr(${yesterday}, 1, 4) diff --git a/core/src/test/resources/bvt/parser/hologres/0.txt b/core/src/test/resources/bvt/parser/hologres/0.txt index 349645604..975f8593d 100644 --- a/core/src/test/resources/bvt/parser/hologres/0.txt +++ b/core/src/test/resources/bvt/parser/hologres/0.txt @@ -1,3 +1,12 @@ +SELECT sum(ret_amount) AS '应收金额' +FROM test.test +GROUP BY a ORDER BY '应收金额' DESC; +-------------------- +SELECT sum(ret_amount) AS "应收金额" +FROM test.test +GROUP BY a +ORDER BY "应收金额" DESC; +------------------------------------------------------------------------------------------------------------------------ CREATE TABLE IF NOT EXISTS my_partitioned_table ( id INT, name text,