From e330eccbf53719cbde19ff39d983328562fae26f Mon Sep 17 00:00:00 2001 From: Xiaoyu Wang Date: Tue, 28 Jun 2022 13:45:20 +0800 Subject: [PATCH] feat: refactor the plan implementation of unique function --- source/libs/planner/src/planOptimizer.c | 9 +++++---- source/libs/planner/test/planOptimizeTest.cpp | 2 ++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/source/libs/planner/src/planOptimizer.c b/source/libs/planner/src/planOptimizer.c index a8747e0583..eb87397f3b 100644 --- a/source/libs/planner/src/planOptimizer.c +++ b/source/libs/planner/src/planOptimizer.c @@ -1092,7 +1092,7 @@ static SNode* partTagsCreateWrapperFunc(const char* pFuncName, SNode* pNode) { strcpy(pFunc->functionName, pFuncName); if (QUERY_NODE_COLUMN == nodeType(pNode)) { SColumnNode* pCol = (SColumnNode*)pNode; - snprintf(pFunc->node.aliasName, sizeof(pFunc->node.aliasName), "%s.%s", pCol->tableAlias, pCol->colName); + sprintf(pFunc->node.aliasName, "%s.%s", pCol->tableAlias, pCol->colName); } else { strcpy(pFunc->node.aliasName, ((SExprNode*)pNode)->aliasName); } @@ -1199,7 +1199,8 @@ static bool eliminateProjOptMayBeOptimized(SLogicNode* pNode) { } SProjectLogicNode* pProjectNode = (SProjectLogicNode*)pNode; - if (NULL != pProjectNode->node.pLimit || NULL != pProjectNode->node.pSlimit) { + if (NULL != pProjectNode->node.pLimit || NULL != pProjectNode->node.pSlimit || + NULL != pProjectNode->node.pConditions) { return false; } @@ -1463,9 +1464,9 @@ static SNode* rewriteUniqueOptCreateFirstFunc(SFunctionNode* pSelectValue, SNode strcpy(pFunc->functionName, "first"); if (NULL != pSelectValue) { - snprintf(pFunc->node.aliasName, sizeof(pFunc->node.aliasName), "%s", pSelectValue->node.aliasName); + sprintf(pFunc->node.aliasName, "%s", pSelectValue->node.aliasName); } else { - snprintf(pFunc->node.aliasName, sizeof(pFunc->node.aliasName), "%s.%p", pFunc->functionName, pFunc); + sprintf(pFunc->node.aliasName, "%s.%p", pFunc->functionName, pFunc); } int32_t code = nodesListMakeStrictAppend(&pFunc->pParameterList, nodesCloneNode(pCol)); if (TSDB_CODE_SUCCESS == code) { diff --git a/source/libs/planner/test/planOptimizeTest.cpp b/source/libs/planner/test/planOptimizeTest.cpp index 5d964dd94a..6a9a711dac 100644 --- a/source/libs/planner/test/planOptimizeTest.cpp +++ b/source/libs/planner/test/planOptimizeTest.cpp @@ -42,6 +42,8 @@ TEST_F(PlanOptimizeTest, pushDownCondition) { run("SELECT ts, c1 FROM st1 WHERE tag1 > 4 AND tag2 = 'hello'"); run("SELECT ts, c1 FROM st1 WHERE tag1 > 4 AND tag2 = 'hello' AND c1 > 10"); + + run("SELECT ts, c1 FROM (SELECT * FROM st1) WHERE tag1 > 4"); } TEST_F(PlanOptimizeTest, sortPrimaryKey) { -- GitLab