diff --git a/source/libs/parser/inc/sql.y b/source/libs/parser/inc/sql.y index bcedd97ec92cbe556a7bb3610847674bf0ec53bd..6f00c66ece3cf1162171fcf261b1a1151e740e5b 100644 --- a/source/libs/parser/inc/sql.y +++ b/source/libs/parser/inc/sql.y @@ -728,10 +728,7 @@ select_list(A) ::= select_sublist(B). select_sublist(A) ::= select_item(B). { A = createNodeList(pCxt, B); } select_sublist(A) ::= select_sublist(B) NK_COMMA select_item(C). { A = addNodeToList(pCxt, B, C); } -select_item(A) ::= common_expression(B). { - SToken t = getTokenFromRawExprNode(pCxt, B); - A = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, B), &t); - } +select_item(A) ::= common_expression(B). { A = releaseRawExprNode(pCxt, B); } select_item(A) ::= common_expression(B) column_alias(C). { A = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, B), &C); } select_item(A) ::= common_expression(B) AS column_alias(C). { A = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, B), &C); } select_item(A) ::= table_name(B) NK_DOT NK_STAR(C). { A = createColumnNode(pCxt, &B, &C); } diff --git a/source/libs/parser/src/parAstCreater.c b/source/libs/parser/src/parAstCreater.c index 731e23e20d360977fc7d04877630418ae83929e7..e13d9930f277180a91c1aebb3115287ef391ab05 100644 --- a/source/libs/parser/src/parAstCreater.c +++ b/source/libs/parser/src/parAstCreater.c @@ -205,9 +205,11 @@ SNode* createRawExprNodeExt(SAstCreateContext* pCxt, const SToken* pStart, const SNode* releaseRawExprNode(SAstCreateContext* pCxt, SNode* pNode) { CHECK_RAW_EXPR_NODE(pNode); - SNode* tmp = ((SRawExprNode*)pNode)->pNode; + SRawExprNode* pRawExpr = (SRawExprNode*)pNode; + SNode* pExpr = pRawExpr->pNode; + strncpy(((SExprNode*)pExpr)->aliasName, pRawExpr->p, pRawExpr->n); taosMemoryFreeClear(pNode); - return tmp; + return pExpr; } SToken getTokenFromRawExprNode(SAstCreateContext* pCxt, SNode* pNode) { diff --git a/source/libs/parser/src/sql.c b/source/libs/parser/src/sql.c index 918b7aa41b39e07acebd08109ea844ac3887aa6e..05362dbf97959cba1cdf13d33452ee4e000377d1 100644 --- a/source/libs/parser/src/sql.c +++ b/source/libs/parser/src/sql.c @@ -3415,6 +3415,7 @@ static YYACTIONTYPE yy_reduce( { yymsp[-1].minor.yy564 = createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &yymsp[0].minor.yy0); } break; case 260: /* signed_literal ::= duration_literal */ + case 354: /* select_item ::= common_expression */ yytestcase(yyruleno==354); case 398: /* search_condition ::= common_expression */ yytestcase(yyruleno==398); { yylhsminor.yy564 = releaseRawExprNode(pCxt, yymsp[0].minor.yy564); } yymsp[0].minor.yy564 = yylhsminor.yy564; @@ -3679,13 +3680,6 @@ static YYACTIONTYPE yy_reduce( case 350: /* select_list ::= NK_STAR */ { yymsp[0].minor.yy476 = NULL; } break; - case 354: /* select_item ::= common_expression */ -{ - SToken t = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy564); - yylhsminor.yy564 = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy564), &t); - } - yymsp[0].minor.yy564 = yylhsminor.yy564; - break; case 355: /* select_item ::= common_expression column_alias */ { yylhsminor.yy564 = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy564), &yymsp[0].minor.yy21); } yymsp[-1].minor.yy564 = yylhsminor.yy564; diff --git a/source/libs/planner/src/planLogicCreater.c b/source/libs/planner/src/planLogicCreater.c index 6832cdce7a2b38fb44bbe0e32ff7d25bc88ea676..596bb64bac7e788acb5a6baf8b19522e78213abd 100644 --- a/source/libs/planner/src/planLogicCreater.c +++ b/source/libs/planner/src/planLogicCreater.c @@ -72,7 +72,9 @@ static EDealRes doNameExpr(SNode* pNode, void* pContext) { case QUERY_NODE_OPERATOR: case QUERY_NODE_LOGIC_CONDITION: case QUERY_NODE_FUNCTION: { - sprintf(((SExprNode*)pNode)->aliasName, "#expr_%p", pNode); + if ('\0' == ((SExprNode*)pNode)->aliasName[0]) { + sprintf(((SExprNode*)pNode)->aliasName, "#expr_%p", pNode); + } return DEAL_RES_IGNORE_CHILD; } default: