From cf759fba4257f9753eb751253bdc08ab21ac93dc Mon Sep 17 00:00:00 2001 From: Xiaoyu Wang Date: Fri, 16 Sep 2022 19:54:46 +0800 Subject: [PATCH] fix: parsing conflicts --- source/libs/parser/inc/sql.y | 4 ++-- source/libs/parser/src/sql.c | 4 ++-- source/libs/planner/test/planSetOpTest.cpp | 2 ++ tests/script/tsim/parser/union.sim | 2 +- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/source/libs/parser/inc/sql.y b/source/libs/parser/inc/sql.y index 12224e2146..6e43843cda 100644 --- a/source/libs/parser/inc/sql.y +++ b/source/libs/parser/inc/sql.y @@ -952,10 +952,10 @@ union_query_expression(A) ::= query_simple_or_subquery(B) UNION query_simple_or_subquery(C). { A = createSetOperator(pCxt, SET_OP_TYPE_UNION, B, C); } query_simple_or_subquery(A) ::= query_simple(B). { A = B; } -query_simple_or_subquery(A) ::= subquery(B). { A = B; } +query_simple_or_subquery(A) ::= subquery(B). { A = releaseRawExprNode(pCxt, B); } query_or_subquery(A) ::= query_expression(B). { A = B; } -query_or_subquery(A) ::= subquery(B). { A = B; } +query_or_subquery(A) ::= subquery(B). { A = releaseRawExprNode(pCxt, B); } %type order_by_clause_opt { SNodeList* } %destructor order_by_clause_opt { nodesDestroyList($$); } diff --git a/source/libs/parser/src/sql.c b/source/libs/parser/src/sql.c index 689cb27aa5..c24eef0016 100644 --- a/source/libs/parser/src/sql.c +++ b/source/libs/parser/src/sql.c @@ -4369,9 +4369,7 @@ static YYACTIONTYPE yy_reduce( case 470: /* query_simple ::= query_specification */ yytestcase(yyruleno==470); case 471: /* query_simple ::= union_query_expression */ yytestcase(yyruleno==471); case 474: /* query_simple_or_subquery ::= query_simple */ yytestcase(yyruleno==474); - case 475: /* query_simple_or_subquery ::= subquery */ yytestcase(yyruleno==475); case 476: /* query_or_subquery ::= query_expression */ yytestcase(yyruleno==476); - case 477: /* query_or_subquery ::= subquery */ yytestcase(yyruleno==477); { yylhsminor.yy776 = yymsp[0].minor.yy776; } yymsp[0].minor.yy776 = yylhsminor.yy776; break; @@ -4432,6 +4430,8 @@ static YYACTIONTYPE yy_reduce( case 315: /* signed_literal ::= literal_func */ yytestcase(yyruleno==315); case 381: /* star_func_para ::= expression */ yytestcase(yyruleno==381); case 436: /* select_item ::= common_expression */ yytestcase(yyruleno==436); + case 475: /* query_simple_or_subquery ::= subquery */ yytestcase(yyruleno==475); + case 477: /* query_or_subquery ::= subquery */ yytestcase(yyruleno==477); case 489: /* search_condition ::= common_expression */ yytestcase(yyruleno==489); { yylhsminor.yy776 = releaseRawExprNode(pCxt, yymsp[0].minor.yy776); } yymsp[0].minor.yy776 = yylhsminor.yy776; diff --git a/source/libs/planner/test/planSetOpTest.cpp b/source/libs/planner/test/planSetOpTest.cpp index de6d7466b8..5348952db8 100644 --- a/source/libs/planner/test/planSetOpTest.cpp +++ b/source/libs/planner/test/planSetOpTest.cpp @@ -44,6 +44,8 @@ TEST_F(PlanSetOpTest, unionAllWithSubquery) { run("SELECT ts FROM (SELECT ts FROM st1s1) UNION ALL SELECT ts FROM (SELECT ts FROM st1s2)"); // super table run("SELECT ts FROM (SELECT ts FROM st1) UNION ALL SELECT ts FROM (SELECT ts FROM st1)"); + + run("(SELECT SERVER_STATUS()) UNION ALL (SELECT SERVER_STATUS())"); } TEST_F(PlanSetOpTest, unionAllWithOrderBy) { diff --git a/tests/script/tsim/parser/union.sim b/tests/script/tsim/parser/union.sim index 8bafeff444..8dc19912c8 100644 --- a/tests/script/tsim/parser/union.sim +++ b/tests/script/tsim/parser/union.sim @@ -116,7 +116,7 @@ sql_error (select c1 from union_tb0 limit 1 union all select c1 from union_tb1 l sql_error (select c1 from union_tb0 limit 1 union all select c1 from union_tb1 limit 1) limit 1 # sql with parenthese -sql (((select c1 from union_tb0))) +sql (select c1 from union_tb0) if $rows != 10000 then return -1 endi