fix: remove scan targets that does not relate to root agg targets
This commit is contained in:
parent
2cd6786a26
commit
c8969d0ec4
|
@ -1588,7 +1588,7 @@ static int32_t eliminateProjOptimizeImpl(SOptimizeContext* pCxt, SLogicSubplan*
|
||||||
FOREACH(pProjection, pProjectNode->pProjections) {
|
FOREACH(pProjection, pProjectNode->pProjections) {
|
||||||
SNode* pChildTarget = NULL;
|
SNode* pChildTarget = NULL;
|
||||||
FOREACH(pChildTarget, pChild->pTargets) {
|
FOREACH(pChildTarget, pChild->pTargets) {
|
||||||
if (strcmp(((SColumnNode*)pProjection)->colName, ((SColumnNode*)pChildTarget)->colName) == 0) {
|
if (0 == strcmp(((SColumnNode*)pProjection)->colName, ((SColumnNode*)pChildTarget)->colName)) {
|
||||||
nodesListAppend(pNewChildTargets, nodesCloneNode(pChildTarget));
|
nodesListAppend(pNewChildTargets, nodesCloneNode(pChildTarget));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2167,10 +2167,26 @@ static int32_t tagScanOptimize(SOptimizeContext* pCxt, SLogicSubplan* pLogicSubp
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
NODES_DESTORY_LIST(pScanNode->pScanCols);
|
NODES_DESTORY_LIST(pScanNode->pScanCols);
|
||||||
|
|
||||||
SLogicNode* pAgg = pScanNode->node.pParent;
|
SLogicNode* pAgg = pScanNode->node.pParent;
|
||||||
|
if (NULL == pAgg->pParent) {
|
||||||
|
SNodeList* pScanTargets = nodesMakeList();
|
||||||
|
|
||||||
|
SNode* pAggTarget = NULL;
|
||||||
|
FOREACH(pAggTarget, pAgg->pTargets) {
|
||||||
|
SNode* pScanTarget = NULL;
|
||||||
|
FOREACH(pScanTarget, pScanNode->node.pTargets) {
|
||||||
|
if (0 == strcmp( ((SColumnNode*)pAggTarget)->colName, ((SColumnNode*)pAggTarget)->colName )) {
|
||||||
|
nodesListAppend(pScanTargets, nodesCloneNode(pScanTarget));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
nodesDestroyList(pScanNode->node.pTargets);
|
||||||
|
pScanNode->node.pTargets = pScanTargets;
|
||||||
|
}
|
||||||
|
|
||||||
int32_t code = replaceLogicNode(pLogicSubplan, pAgg, (SLogicNode*)pScanNode);
|
int32_t code = replaceLogicNode(pLogicSubplan, pAgg, (SLogicNode*)pScanNode);
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
NODES_CLEAR_LIST(pAgg->pChildren);
|
NODES_CLEAR_LIST(pAgg->pChildren);
|
||||||
|
|
Loading…
Reference in New Issue