From 8c955ef017276cb46cd419b602df02f83d5eef14 Mon Sep 17 00:00:00 2001 From: shenglian zhou Date: Mon, 20 Jun 2022 07:52:29 +0800 Subject: [PATCH] fix: limit/slimit would prevent optimization projection elimination --- source/libs/executor/src/executil.c | 3 ++- source/libs/planner/src/planOptimizer.c | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index 18fc1ff477..77a18028b4 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -328,10 +328,11 @@ SArray* extractColMatchInfo(SNodeList* pNodeList, SDataBlockDescNode* pOutputNod break; } } - ASSERT(foundSource); + if (pNode->output) { (*numOfOutputCols) += 1; } else { + ASSERT(foundSource); info->output = false; } } diff --git a/source/libs/planner/src/planOptimizer.c b/source/libs/planner/src/planOptimizer.c index 0f2abc4568..b8c6df4b54 100644 --- a/source/libs/planner/src/planOptimizer.c +++ b/source/libs/planner/src/planOptimizer.c @@ -1088,6 +1088,10 @@ static bool eliminateProjOptMayBeOptimized(SLogicNode* pNode) { } SProjectLogicNode* pProjectNode = (SProjectLogicNode*)pNode; + if (-1 != pProjectNode->limit || -1 != pProjectNode->slimit || -1 != pProjectNode->offset || -1 != pProjectNode->soffset) { + return false; + } + SNode* pProjection; FOREACH(pProjection, pProjectNode->pProjections) { SExprNode* pExprNode = (SExprNode*)pProjection;