From 8a93ff984385d0c89dcd6250feb3957cbfd36229 Mon Sep 17 00:00:00 2001 From: TonyYan666 Date: Wed, 25 Sep 2019 17:50:17 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=20SQLExprParser.SQLParser=20?= =?UTF-8?q?union=20all=20=E5=89=8D=E9=9D=A2=E7=9B=B4=E6=8E=A5=E5=8C=85?= =?UTF-8?q?=E5=90=AB=E5=AD=90=E6=9F=A5=E8=AF=A2=20=E8=A7=A3=E6=9E=90?= =?UTF-8?q?=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/alibaba/druid/sql/parser/SQLExprParser.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) 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 e7a4809d48..c50751e54a 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java @@ -362,8 +362,6 @@ public class SQLExprParser extends SQLParser { if (sqlExpr instanceof SQLBinaryOpExpr) { ((SQLBinaryOpExpr) sqlExpr).setBracket(true); } - - accept(Token.RPAREN); if (lexer.token == Token.UNION && sqlExpr instanceof SQLQueryExpr) { SQLQueryExpr queryExpr = (SQLQueryExpr) sqlExpr; @@ -371,6 +369,13 @@ public class SQLExprParser extends SQLParser { SQLSelectQuery query = this.createSelectParser().queryRest(queryExpr.getSubQuery().getQuery()); queryExpr.getSubQuery().setQuery(query); } + + //accept(Token.RPAREN) 在处理UNION 之前,导致 以下类型的语句解析异常 + //select * from test_a where id=(select id from test_b where id = 1) union all select * from test_c ..... + //会解析为 select * from select * from test_a where id=(select id from test_b where id = 1 union all select * from test_c ..... + //所以需要将accept(Token.RPAREN) 移动到 处理 Union all 以及 子查询之后 + accept(Token.RPAREN); + break; case INSERT: lexer.nextToken();