From 3cc22ef10b53944830596057da0307c833974159 Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Sat, 23 Jul 2022 19:52:15 +0800 Subject: [PATCH] fix: fix plan optimize issue --- source/client/src/clientImpl.c | 1 - source/libs/planner/src/planOptimizer.c | 23 +++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/source/client/src/clientImpl.c b/source/client/src/clientImpl.c index 83d9b35a91..688dc67da9 100644 --- a/source/client/src/clientImpl.c +++ b/source/client/src/clientImpl.c @@ -1752,7 +1752,6 @@ int32_t setResultDataPtr(SReqResultInfo* pResultInfo, TAOS_FIELD* pFields, int32 colLength[i] = htonl(colLength[i]); if (colLength[i] >= dataLen) { tscError("invalid colLength %d, dataLen %d", colLength[i], dataLen); - *(char*)0 = 1; ASSERT(0); } diff --git a/source/libs/planner/src/planOptimizer.c b/source/libs/planner/src/planOptimizer.c index b006ac2b0a..7b60710c7d 100644 --- a/source/libs/planner/src/planOptimizer.c +++ b/source/libs/planner/src/planOptimizer.c @@ -1607,6 +1607,28 @@ static bool eliminateProjOptCanUseNewChildTargets(SLogicNode* pChild, SNodeList* return cxt.canUse; } +static void alignProjectionWithTarget(SLogicNode* pNode) { + if (QUERY_NODE_LOGIC_PLAN_PROJECT != pNode->type) { + return; + } + + SProjectLogicNode* pProjectNode = (SProjectLogicNode*)pNode; + SNode* pProjection = NULL; + FOREACH(pProjection, pProjectNode->pProjections) { + SNode* pTarget = NULL; + bool keep = false; + FOREACH(pTarget, pNode->pTargets) { + if (0 == strcmp(((SColumnNode*)pProjection)->node.aliasName, ((SColumnNode*)pTarget)->colName)) { + keep = true; + break; + } + } + if (!keep) { + nodesListErase(pProjectNode->pProjections, cell); + } + } +} + static int32_t eliminateProjOptimizeImpl(SOptimizeContext* pCxt, SLogicSubplan* pLogicSubplan, SProjectLogicNode* pProjectNode) { SLogicNode* pChild = (SLogicNode*)nodesListGetNode(pProjectNode->node.pChildren, 0); @@ -1634,6 +1656,7 @@ static int32_t eliminateProjOptimizeImpl(SOptimizeContext* pCxt, SLogicSubplan* if (TSDB_CODE_SUCCESS == code) { NODES_CLEAR_LIST(pProjectNode->node.pChildren); nodesDestroyNode((SNode*)pProjectNode); + alignProjectionWithTarget(pChild); } pCxt->optimized = true; return code;