fix: double free error during plan optimize

This commit is contained in:
shenglian zhou 2022-06-20 08:45:57 +08:00
parent 8c955ef017
commit 9bb21ebbc2
1 changed files with 4 additions and 4 deletions

View File

@ -1116,18 +1116,18 @@ static int32_t eliminateProjOptimizeImpl(SOptimizeContext* pCxt, SLogicSubplan*
char* projColumnName = projColumn->colName; char* projColumnName = projColumn->colName;
if (QUERY_NODE_COLUMN == nodeType(childExpr) && strcmp(projColumnName, ((SColumnNode*)childExpr)->colName) == 0 || if (QUERY_NODE_COLUMN == nodeType(childExpr) && strcmp(projColumnName, ((SColumnNode*)childExpr)->colName) == 0 ||
strcmp(projColumnName, childExpr->aliasName) == 0) { strcmp(projColumnName, childExpr->aliasName) == 0) {
nodesListAppend(pNewChildTargets, pChildTarget); nodesListAppend(pNewChildTargets, nodesCloneNode(pChildTarget));
} }
} }
} }
nodesDestroyList(pChild->pTargets);
pChild->pTargets = pNewChildTargets;
TSWAP(pChild->pTargets, pNewChildTargets);
int32_t code = replaceLogicNode(pLogicSubplan, (SLogicNode*)pProjectNode, pChild); int32_t code = replaceLogicNode(pLogicSubplan, (SLogicNode*)pProjectNode, pChild);
if (TSDB_CODE_SUCCESS == code) { if (TSDB_CODE_SUCCESS == code) {
NODES_CLEAR_LIST(pProjectNode->node.pChildren); NODES_CLEAR_LIST(pProjectNode->node.pChildren);
nodesDestroyNode((SNode*)pProjectNode); nodesDestroyNode((SNode*)pProjectNode);
} }
NODES_CLEAR_LIST(pNewChildTargets);
return code; return code;
} }