From f970286f6729915d98635691693650ded4aed2fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E9=93=81?= Date: Sat, 5 Oct 2019 13:34:32 +0800 Subject: [PATCH] revert #3484 --- .../java/com/alibaba/druid/sql/parser/SQLExprParser.java | 4 +++- .../alibaba/druid/bvt/sql/oracle/AntlrExamplesTest.java | 8 +++++++- 2 files changed, 10 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 64ae166ec0..eeaf604fa2 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java @@ -366,6 +366,8 @@ public class SQLExprParser extends SQLParser { ((SQLBinaryOpExpr) sqlExpr).setBracket(true); } + accept(Token.RPAREN); + if (lexer.token == Token.UNION && sqlExpr instanceof SQLQueryExpr) { SQLQueryExpr queryExpr = (SQLQueryExpr) sqlExpr; @@ -377,7 +379,7 @@ public class SQLExprParser extends SQLParser { //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: diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/AntlrExamplesTest.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/AntlrExamplesTest.java index b811c637f4..ce683f6009 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/AntlrExamplesTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/AntlrExamplesTest.java @@ -1,6 +1,7 @@ package com.alibaba.druid.bvt.sql.oracle; import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.parser.ParserException; import com.alibaba.druid.util.JdbcConstants; import junit.framework.TestCase; import org.apache.commons.io.FileUtils; @@ -16,7 +17,12 @@ public class AntlrExamplesTest extends TestCase { for (File file : dir.listFiles()) { System.out.println(file); String sql = FileUtils.readFileToString(file); - SQLUtils.parseStatements(sql, JdbcConstants.ORACLE); + try { + SQLUtils.parseStatements(sql, JdbcConstants.ORACLE); + } catch (ParserException ex) { + System.out.println(sql); + throw ex; + } } } }