From 6f002b81a96009aeda960773321142fdf1d708b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E9=93=81?= Date: Sun, 20 Jun 2021 22:58:57 +0800 Subject: [PATCH] improved odps parser support --- .../druid/sql/dialect/odps/visitor/OdpsOutputVisitor.java | 8 +++++++- .../java/com/alibaba/druid/sql/parser/SQLExprParser.java | 4 ++++ .../com/alibaba/druid/sql/parser/SQLSelectParser.java | 6 ++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsOutputVisitor.java index 1b90785c75..2c2b998ec4 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsOutputVisitor.java @@ -290,7 +290,13 @@ public class OdpsOutputVisitor extends HiveOutputVisitor implements OdpsASTVisit @Override public boolean visit(SQLJoinTableSource x) { - x.getLeft().accept(this); + SQLTableSource left = x.getLeft(); + left.accept(this); + + if (left.hasAfterComment() && isPrettyFormat()) { + println(); + printlnComment(left.getAfterCommentsDirect()); + } if (x.getJoinType() == JoinType.COMMA) { print(','); diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java index ebe5d34a66..7ad6882aa3 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java @@ -3032,6 +3032,10 @@ public class SQLExprParser extends SQLParser { public SQLExpr orRest(SQLExpr expr) { for (;;) { if (lexer.token == Token.OR) { + if (lexer.isKeepComments() && lexer.hasComment()) { + expr.addAfterComment(lexer.readAndResetComments()); + } + lexer.nextToken(); SQLExpr rightExp = xor(); diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLSelectParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLSelectParser.java index 45dee929ab..14e4669a18 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLSelectParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLSelectParser.java @@ -1132,6 +1132,12 @@ public class SQLSelectParser extends SQLParser { } public SQLTableSource parseTableSourceRest(SQLTableSource tableSource) { + if (lexer.hasComment() + && lexer.isKeepComments() + && !(tableSource instanceof SQLSubqueryTableSource)) { + tableSource.addAfterComment(lexer.readAndResetComments()); + } + if (tableSource.getAlias() == null || tableSource.getAlias().length() == 0) { Token token = lexer.token; long hash;