From 6a2123cbe3312b83bca509b07fbdae35b941e8a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E9=93=81?= Date: Sun, 3 Oct 2021 02:13:10 +0800 Subject: [PATCH] fix #4486 --- .../druid/sql/parser/SQLSelectParser.java | 8 +++--- src/test/resources/bvt/parser/odps-8.txt | 28 ++++++++++++++++++- 2 files changed, 31 insertions(+), 5 deletions(-) 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 f5c9b18fc5..95ede9506c 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLSelectParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLSelectParser.java @@ -1077,11 +1077,11 @@ public class SQLSelectParser extends SQLParser { || lexer.token == Token.SEL) { SQLSelect select = select(); accept(Token.RPAREN); - if (select.getQuery() instanceof SQLSelectQueryBlock) { - ((SQLSelectQueryBlock) select.getQuery()).setParenthesized(true); - } + SQLSelectQuery selectQuery = select.getQuery(); + selectQuery.setParenthesized(true); - SQLSelectQuery query = queryRest(select.getQuery(), true); + boolean acceptUnion = !(selectQuery instanceof SQLUnionQuery); + SQLSelectQuery query = queryRest(selectQuery, acceptUnion); if (query instanceof SQLUnionQuery) { tableSource = new SQLUnionQueryTableSource((SQLUnionQuery) query); } else { diff --git a/src/test/resources/bvt/parser/odps-8.txt b/src/test/resources/bvt/parser/odps-8.txt index d288734841..6f12f961d6 100644 --- a/src/test/resources/bvt/parser/odps-8.txt +++ b/src/test/resources/bvt/parser/odps-8.txt @@ -13,4 +13,30 @@ from ( union select id, collectId, c2 from (select id, collectId, c2 from table_2) -) \ No newline at end of file +) +--------------------------- +SELECT * +FROM ( + SELECT id, collectId, 3 AS c_0 + FROM ( + SELECT * + FROM tc_merchant + WHERE collectId IN ( + SELECT collect_id + FROM cte_merchant + ) + UNION + SELECT * + FROM st_merchant + WHERE collectId IN ( + SELECT collect_id + FROM st_merchant_tmp + ) + ) + UNION + SELECT id, collectId, c2 + FROM ( + SELECT id, collectId, c2 + FROM table_2 + ) +)