From 9d86f486228b1ed1942650ca8c27357b0c26187b Mon Sep 17 00:00:00 2001 From: facetosea <285808407@qq.com> Date: Mon, 17 Feb 2025 11:00:05 +0800 Subject: [PATCH] fix: select_value node name --- source/libs/parser/src/parTranslater.c | 17 +++++++++-------- source/libs/planner/src/planLogicCreater.c | 1 - 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index b0be691240..a318eaa2db 100755 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -1105,7 +1105,7 @@ static bool isForecastPseudoColumnFunc(const SNode* pNode) { } static bool isColsFunctionResult(const SNode* pNode) { - return ((nodesIsExprNode(pNode)) && ((SExprNode*)pNode)->relatedTo > 0); + return ((nodesIsExprNode(pNode)) && (isRelatedToOtherExpr((SExprNode*)pNode))); } static bool isInvalidColsBindFunction(const SFunctionNode* pFunc) { @@ -3582,6 +3582,14 @@ static EDealRes rewriteColToSelectValFunc(STranslateContext* pCxt, SNode** pNode tstrncpy(pFunc->functionName, "_select_value", TSDB_FUNC_NAME_LEN); tstrncpy(pFunc->node.aliasName, ((SExprNode*)*pNode)->aliasName, TSDB_COL_NAME_LEN); tstrncpy(pFunc->node.userAlias, ((SExprNode*)*pNode)->userAlias, TSDB_COL_NAME_LEN); + if (isRelatedToOtherExpr((SExprNode*)*pNode)) { + int len = strlen(((SExprNode*)*pNode)->aliasName); + if (len + TSDB_COL_NAME_EXLEN >= TSDB_COL_NAME_LEN) { + parserError("%s The alias name is too long, the extra part will be truncated", __func__); + return DEAL_RES_ERROR; + } + tsnprintf(pFunc->node.aliasName + len, TSDB_COL_NAME_EXLEN, ".%d", ((SExprNode*)*pNode)->relatedTo); + } pFunc->node.relatedTo = ((SExprNode*)*pNode)->relatedTo; pFunc->node.bindExprID = ((SExprNode*)*pNode)->bindExprID; pCxt->errCode = nodesListMakeAppend(&pFunc->pParameterList, *pNode); @@ -7400,13 +7408,6 @@ static EDealRes pushDownBindSelectFunc(SNode** pNode, void* pContext) { SBindTupleFuncCxt* pCxt = pContext; if (nodesIsExprNode(*pNode)) { ((SExprNode*)*pNode)->relatedTo = pCxt->bindExprID; - int32_t len = strlen(((SExprNode*)*pNode)->aliasName); - if (len + TSDB_COL_NAME_EXLEN >= TSDB_COL_NAME_LEN) { - parserError("%s The alias name is too long, the extra part will be truncated", __func__); - return DEAL_RES_ERROR; - } else { - tsnprintf(((SExprNode*)*pNode)->aliasName + len, TSDB_COL_NAME_EXLEN, ".%d", pCxt->bindExprID); - } SFunctionNode* pFunc = (SFunctionNode*)*pNode; } return DEAL_RES_CONTINUE; diff --git a/source/libs/planner/src/planLogicCreater.c b/source/libs/planner/src/planLogicCreater.c index 2fd8d863fb..834c894585 100644 --- a/source/libs/planner/src/planLogicCreater.c +++ b/source/libs/planner/src/planLogicCreater.c @@ -124,7 +124,6 @@ static EDealRes doRewriteExpr(SNode** pNode, void* pContext) { tstrncpy(pCol->colName, ((SExprNode*)pExpr)->aliasName, TSDB_COL_NAME_LEN); pCol->node.projIdx = ((SExprNode*)(*pNode))->projIdx; pCol->node.relatedTo = ((SExprNode*)(*pNode))->relatedTo; - //pCol->node.bindExprID = ((SExprNode*)(*pNode))->bindExprID; if (QUERY_NODE_FUNCTION == nodeType(pExpr)) { setColumnInfo((SFunctionNode*)pExpr, pCol, pCxt->isPartitionBy); }