From 6115d7a67f468f056fbbbe79d3aad45deb44a933 Mon Sep 17 00:00:00 2001 From: factosea <285808407@qq.com> Date: Fri, 12 Jan 2024 10:47:48 +0800 Subject: [PATCH] fix functionNode ref --- source/libs/parser/src/parTranslater.c | 5 +++-- source/libs/parser/test/parSelectTest.cpp | 8 ++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index 798295b488..3eb8a63ae6 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -4523,10 +4523,11 @@ static EDealRes replaceOrderByAliasImpl(SNode** pNode, void* pContext) { SReplaceOrderByAliasCxt* pCxt = pContext; SNodeList* pProjectionList = pCxt->pProjectionList; SNode* pProject = NULL; - if (QUERY_NODE_COLUMN == nodeType(*pNode)) { + if (QUERY_NODE_COLUMN == nodeType(*pNode) || QUERY_NODE_FUNCTION == nodeType(*pNode)) { FOREACH(pProject, pProjectionList) { SExprNode* pExpr = (SExprNode*)pProject; - if (0 == strcmp(((SColumnRefNode*)*pNode)->colName, pExpr->userAlias)) { + if (0 == strcmp(((SColumnRefNode*)*pNode)->colName, pExpr->userAlias) + && nodeType(*pNode) == nodeType(pProject)) { SNode* pNew = nodesCloneNode(pProject); if (NULL == pNew) { pCxt->pTranslateCxt->errCode = TSDB_CODE_OUT_OF_MEMORY; diff --git a/source/libs/parser/test/parSelectTest.cpp b/source/libs/parser/test/parSelectTest.cpp index 687344d56b..390faab537 100644 --- a/source/libs/parser/test/parSelectTest.cpp +++ b/source/libs/parser/test/parSelectTest.cpp @@ -417,13 +417,13 @@ TEST_F(ParserSelectTest, semanticCheck) { run("SELECT COUNT(*) FROM t1 order by last(c2)"); - run("SELECT c1 FROM t1 order by last(ts)", TSDB_CODE_PAR_NOT_SINGLE_GROUP); + run("SELECT c1 FROM t1 order by last(ts)"); - run("SELECT ts FROM t1 order by last(ts)", TSDB_CODE_PAR_NOT_SINGLE_GROUP); + run("SELECT ts FROM t1 order by last(ts)"); - run("SELECT c2 FROM t1 order by last(ts)", TSDB_CODE_PAR_NOT_SINGLE_GROUP); + run("SELECT c2 FROM t1 order by last(ts)"); - run("SELECT * FROM t1 order by last(ts)", TSDB_CODE_PAR_NOT_SINGLE_GROUP); + run("SELECT * FROM t1 order by last(ts)"); run("SELECT last(ts) FROM t1 order by last(ts)");