From 9eb4f16792089bed159f07f26a4eb3394d6a4f84 Mon Sep 17 00:00:00 2001 From: slzhou Date: Thu, 7 Jul 2022 14:59:52 +0800 Subject: [PATCH 1/2] feat: add filter to fill operator --- source/libs/executor/src/executorimpl.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/source/libs/executor/src/executorimpl.c b/source/libs/executor/src/executorimpl.c index 8742b5830b..181ec499ec 100644 --- a/source/libs/executor/src/executorimpl.c +++ b/source/libs/executor/src/executorimpl.c @@ -3371,6 +3371,8 @@ static SSDataBlock* doFillImpl(SOperatorInfo* pOperator) { SResultInfo* pResultInfo = &pOperator->resultInfo; SSDataBlock* pResBlock = pInfo->pRes; + blockDataCleanup(pResBlock); + // todo handle different group data interpolation bool n = false; bool* newgroup = &n; @@ -3439,16 +3441,13 @@ static SSDataBlock* doFill(SOperatorInfo* pOperator) { SFillOperatorInfo* pInfo = pOperator->info; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; - SResultInfo* pResultInfo = &pOperator->resultInfo; - SSDataBlock* pResBlock = pInfo->pRes; - - blockDataCleanup(pResBlock); if (pOperator->status == OP_EXEC_DONE) { return NULL; } + SSDataBlock* fillResult = NULL; while (true) { - SSDataBlock* fillResult = doFillImpl(pOperator); + fillResult = doFillImpl(pOperator); if (fillResult != NULL) { doFilter(pInfo->pCondition, fillResult); } @@ -3463,10 +3462,12 @@ static SSDataBlock* doFill(SOperatorInfo* pOperator) { } } - size_t rows = pResBlock->info.rows; - pOperator->resultInfo.totalRows += rows; + if (fillResult != NULL) { + size_t rows = fillResult->info.rows; + pOperator->resultInfo.totalRows += rows; + } - return (rows == 0)? NULL:pResBlock; + return fillResult; } static void destroyExprInfo(SExprInfo* pExpr, int32_t numOfExprs) { From 4482b2dda758d5b4cc0b4236299f607983231100 Mon Sep 17 00:00:00 2001 From: slzhou Date: Thu, 7 Jul 2022 15:26:29 +0800 Subject: [PATCH 2/2] feat: add doFilter to indef operator --- source/libs/executor/inc/executorimpl.h | 1 + source/libs/executor/src/executorimpl.c | 3 +++ 2 files changed, 4 insertions(+) diff --git a/source/libs/executor/inc/executorimpl.h b/source/libs/executor/inc/executorimpl.h index 514620fdf7..7515f3e4de 100644 --- a/source/libs/executor/inc/executorimpl.h +++ b/source/libs/executor/inc/executorimpl.h @@ -518,6 +518,7 @@ typedef struct SIndefOperatorInfo { SAggSupporter aggSup; SArray* pPseudoColInfo; SExprSupp scalarSup; + SNode* pCondition; } SIndefOperatorInfo; typedef struct SFillOperatorInfo { diff --git a/source/libs/executor/src/executorimpl.c b/source/libs/executor/src/executorimpl.c index 181ec499ec..5d92adfaaa 100644 --- a/source/libs/executor/src/executorimpl.c +++ b/source/libs/executor/src/executorimpl.c @@ -3862,6 +3862,8 @@ static SSDataBlock* doApplyIndefinitFunction(SOperatorInfo* pOperator) { } } + doFilter(pIndefInfo->pCondition, pInfo->pRes); + size_t rows = pInfo->pRes->info.rows; pOperator->resultInfo.totalRows += rows; @@ -3915,6 +3917,7 @@ SOperatorInfo* createIndefinitOutputOperatorInfo(SOperatorInfo* downstream, SPhy pInfo->binfo.pRes = pResBlock; pInfo->pPseudoColInfo = setRowTsColumnOutputInfo(pSup->pCtx, numOfExpr); + pInfo->pCondition = pPhyNode->node.pConditions; pOperator->name = "IndefinitOperator"; pOperator->operatorType = QUERY_NODE_PHYSICAL_PLAN_PROJECT;