From f6c1218b38fe0a50942d609aec3e52bf57aa4b35 Mon Sep 17 00:00:00 2001 From: Xiaoyu Wang Date: Mon, 7 Feb 2022 23:09:53 -0500 Subject: [PATCH] TD-13338 SELECT statement translate code --- source/libs/parser/inc/new_sql.y | 4 ++-- source/libs/parser/src/new_sql.c | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/source/libs/parser/inc/new_sql.y b/source/libs/parser/inc/new_sql.y index 72207e2bf4..d12e76000a 100644 --- a/source/libs/parser/inc/new_sql.y +++ b/source/libs/parser/inc/new_sql.y @@ -219,7 +219,7 @@ table_reference(A) ::= joined_table(B). table_primary(A) ::= table_name(B) alias_opt(C). { PARSER_TRACE; A = createRealTableNode(pCxt, NULL, &B, &C); } table_primary(A) ::= db_name(B) NK_DOT table_name(C) alias_opt(D). { PARSER_TRACE; A = createRealTableNode(pCxt, &B, &C, &D); } -table_primary(A) ::= subquery(B) alias_opt(C). { PARSER_TRACE; A = createTempTableNode(pCxt, B, &C); } +table_primary(A) ::= subquery(B) alias_opt(C). { PARSER_TRACE; A = createTempTableNode(pCxt, releaseRawExprNode(pCxt, B), &C); } table_primary(A) ::= parenthesized_joined_table(B). { PARSER_TRACE; A = B; } %type alias_opt { SToken } @@ -354,7 +354,7 @@ limit_clause_opt(A) ::= LIMIT NK_INTEGER(B) OFFSET NK_INTEGER(C). limit_clause_opt(A) ::= LIMIT NK_INTEGER(C) NK_COMMA NK_INTEGER(B). { PARSER_TRACE; A = createLimitNode(pCxt, &B, &C); } /************************************************ subquery ************************************************************/ -subquery(A) ::= NK_LP query_expression(B) NK_RP. { PARSER_TRACE; A = B; } +subquery(A) ::= NK_LP(B) query_expression(C) NK_RP(D). { PARSER_TRACE; A = createRawExprNodeExt(pCxt, &B, &D, C); } /************************************************ search_condition ****************************************************/ search_condition(A) ::= boolean_value_expression(B). { PARSER_TRACE; A = B; } diff --git a/source/libs/parser/src/new_sql.c b/source/libs/parser/src/new_sql.c index 85f73e5eb8..cb2b277df8 100644 --- a/source/libs/parser/src/new_sql.c +++ b/source/libs/parser/src/new_sql.c @@ -1729,7 +1729,6 @@ static YYACTIONTYPE yy_reduce( case 57: /* boolean_primary ::= NK_LP boolean_value_expression NK_RP */ case 70: /* parenthesized_joined_table ::= NK_LP joined_table NK_RP */ yytestcase(yyruleno==70); case 71: /* parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP */ yytestcase(yyruleno==71); - case 123: /* subquery ::= NK_LP query_expression NK_RP */ yytestcase(yyruleno==123); { PARSER_TRACE; yymsp[-2].minor.yy168 = yymsp[-1].minor.yy168; } break; case 58: /* from_clause ::= FROM table_reference_list */ @@ -1750,7 +1749,7 @@ static YYACTIONTYPE yy_reduce( yymsp[-3].minor.yy168 = yylhsminor.yy168; break; case 65: /* table_primary ::= subquery alias_opt */ -{ PARSER_TRACE; yylhsminor.yy168 = createTempTableNode(pCxt, yymsp[-1].minor.yy168, &yymsp[0].minor.yy241); } +{ PARSER_TRACE; yylhsminor.yy168 = createTempTableNode(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy168), &yymsp[0].minor.yy241); } yymsp[-1].minor.yy168 = yylhsminor.yy168; break; case 67: /* alias_opt ::= */ @@ -1907,6 +1906,10 @@ static YYACTIONTYPE yy_reduce( case 122: /* limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */ yytestcase(yyruleno==122); { PARSER_TRACE; yymsp[-3].minor.yy168 = createLimitNode(pCxt, &yymsp[0].minor.yy0, &yymsp[-2].minor.yy0); } break; + case 123: /* subquery ::= NK_LP query_expression NK_RP */ +{ PARSER_TRACE; yylhsminor.yy168 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-1].minor.yy168); } + yymsp[-2].minor.yy168 = yylhsminor.yy168; + break; case 127: /* sort_specification ::= expression ordering_specification_opt null_ordering_opt */ { PARSER_TRACE; yylhsminor.yy168 = createOrderByExprNode(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy168), yymsp[-1].minor.yy10, yymsp[0].minor.yy177); } yymsp[-2].minor.yy168 = yylhsminor.yy168;