chore: only filter window pseudo column

This commit is contained in:
kailixu 2023-06-08 14:16:05 +08:00
parent 576e3d1156
commit 90b4580ba9
1 changed files with 22 additions and 15 deletions

View File

@ -749,14 +749,20 @@ static int32_t createWindowLogicNodeFinalize(SLogicPlanContext* pCxt, SSelectStm
code = rewriteExprsForSelect(pWindow->pFuncs, pSelect, SQL_CLAUSE_WINDOW, NULL); code = rewriteExprsForSelect(pWindow->pFuncs, pSelect, SQL_CLAUSE_WINDOW, NULL);
} }
// erase duplicated funcNode by filtering colNode in pSelect->pProjectionList // erase duplicated Window Pseudo funcNode by filtering colNode in pSelect->pProjectionList
if (pSelect->pProjectionList) {
int32_t funcIndex = 0; int32_t funcIndex = 0;
SNode * pFunc = NULL, *pProject = NULL; SNode * pFunc = NULL, *pProject = NULL;
FOREACH(pFunc, pWindow->pFuncs) { FOREACH(pFunc, pWindow->pFuncs) {
if (!fmIsWindowPseudoColumnFunc(((SFunctionNode*)pFunc)->funcId)) {
++funcIndex;
continue;
}
bool exist = false; bool exist = false;
FOREACH(pProject, pSelect->pProjectionList) { FOREACH(pProject, pSelect->pProjectionList) {
if (0 != ((SFunctionNode*)pFunc)->node.aliasName[0] && if (0 != ((SFunctionNode*)pFunc)->node.aliasName[0] &&
0 == strncmp(((SFunctionNode*)pFunc)->node.aliasName, ((SColumnNode*)pProject)->colName, TSDB_COL_NAME_LEN)) { 0 == strncmp(((SFunctionNode*)pFunc)->node.aliasName, ((SColumnNode*)pProject)->colName,
TSDB_COL_NAME_LEN)) {
exist = true; exist = true;
break; break;
} }
@ -767,6 +773,7 @@ static int32_t createWindowLogicNodeFinalize(SLogicPlanContext* pCxt, SSelectStm
++funcIndex; ++funcIndex;
} }
} }
}
if (TSDB_CODE_SUCCESS == code) { if (TSDB_CODE_SUCCESS == code) {
code = createColumnByRewriteExprs(pWindow->pFuncs, &pWindow->node.pTargets); code = createColumnByRewriteExprs(pWindow->pFuncs, &pWindow->node.pTargets);