From 73d7caa63a73382a1aafc8e870468c82bd14541c Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Wed, 16 Aug 2023 19:12:32 +0800 Subject: [PATCH] fix: remove uid from scan list --- .../libs/executor/src/dynqueryctrloperator.c | 8 ++--- source/libs/executor/src/exchangeoperator.c | 2 +- source/libs/executor/src/scanoperator.c | 34 +++++++++++-------- source/libs/nodes/src/nodesCloneFuncs.c | 1 + source/libs/planner/src/planOptimizer.c | 9 ++--- 5 files changed, 31 insertions(+), 23 deletions(-) diff --git a/source/libs/executor/src/dynqueryctrloperator.c b/source/libs/executor/src/dynqueryctrloperator.c index 11ff084ead..6fb7e693cf 100755 --- a/source/libs/executor/src/dynqueryctrloperator.c +++ b/source/libs/executor/src/dynqueryctrloperator.c @@ -264,7 +264,7 @@ static int32_t buildBatchExchangeOperatorParam(SOperatorParam** ppRes, int32_t d int32_t iter = 0; void* p = NULL; - while (p = tSimpleHashIterate(pVg, p, &iter)) { + while (NULL != (p = tSimpleHashIterate(pVg, p, &iter))) { int32_t* pVgId = tSimpleHashGetKey(p, NULL); SArray* pUidList = *(SArray**)p; basic.vgId = *pVgId; @@ -349,7 +349,7 @@ static int32_t buildBatchTableScanOperatorParam(SOperatorParam** ppRes, int32_t int32_t iter = 0; void* p = NULL; - while (p = tSimpleHashIterate(pVg, p, &iter)) { + while (NULL != (p = tSimpleHashIterate(pVg, p, &iter))) { int32_t* pVgId = tSimpleHashGetKey(p, NULL); SArray* pUidList = *(SArray**)p; @@ -692,7 +692,7 @@ static void postProcessStbJoinTableHash(SOperatorInfo* pOperator) { uint64_t* pUid = NULL; int32_t iter = 0; - while (pUid = tSimpleHashIterate(pStbJoin->ctx.prev.onceTable, pUid, &iter)) { + while (NULL != (pUid = tSimpleHashIterate(pStbJoin->ctx.prev.onceTable, pUid, &iter))) { tSimpleHashRemove(pStbJoin->ctx.prev.leftCache, pUid, sizeof(*pUid)); } @@ -702,7 +702,7 @@ static void postProcessStbJoinTableHash(SOperatorInfo* pOperator) { // debug only iter = 0; uint32_t* num = NULL; - while (num = tSimpleHashIterate(pStbJoin->ctx.prev.leftCache, num, &iter)) { + while (NULL != (num = tSimpleHashIterate(pStbJoin->ctx.prev.leftCache, num, &iter))) { ASSERT(*num > 1); } } diff --git a/source/libs/executor/src/exchangeoperator.c b/source/libs/executor/src/exchangeoperator.c index 6b21151f93..ef8bf9674a 100644 --- a/source/libs/executor/src/exchangeoperator.c +++ b/source/libs/executor/src/exchangeoperator.c @@ -809,7 +809,7 @@ int32_t addDynamicExchangeSource(SOperatorInfo* pOperator) { if (pParam->multiParams) { SExchangeOperatorBatchParam* pBatch = (SExchangeOperatorBatchParam*)pOperator->pOperatorGetParam->value; int32_t iter = 0; - while (pBasicParam = tSimpleHashIterate(pBatch->pBatchs, pBasicParam, &iter)) { + while (NULL != (pBasicParam = tSimpleHashIterate(pBatch->pBatchs, pBasicParam, &iter))) { code = addSingleExchangeSource(pOperator, pBasicParam); if (code) { return code; diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index ad272a342e..9c19da7f64 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -2903,17 +2903,23 @@ static void tagScanFilterByTagCond(SArray* aUidTags, SNode* pTagCond, SArray* aF } -static void tagScanFillOneCellWithTag(const STUidTagInfo* pUidTagInfo, SExprInfo* pExprInfo, SColumnInfoData* pColInfo, int rowIndex, const SStorageAPI* pAPI, void* pVnode) { - if (fmIsScanPseudoColumnFunc(pExprInfo->pExpr->_function.functionId)) { // tbname - char str[TSDB_TABLE_FNAME_LEN + VARSTR_HEADER_SIZE] = {0}; -// if (pUidTagInfo->name != NULL) { -// STR_TO_VARSTR(str, pUidTagInfo->name); -// } else { // name is not retrieved during filter -// pAPI->metaFn.getTableNameByUid(pVnode, pUidTagInfo->uid, str); -// } - STR_TO_VARSTR(str, "ctbidx"); +static void tagScanFillOneCellWithTag(SOperatorInfo* pOperator, const STUidTagInfo* pUidTagInfo, SExprInfo* pExprInfo, SColumnInfoData* pColInfo, int rowIndex, const SStorageAPI* pAPI, void* pVnode) { + if (QUERY_NODE_FUNCTION == pExprInfo->pExpr->nodeType) { + if (FUNCTION_TYPE_TBNAME == pExprInfo->pExpr->_function.functionType) { // tbname + char str[TSDB_TABLE_FNAME_LEN + VARSTR_HEADER_SIZE] = {0}; + // if (pUidTagInfo->name != NULL) { + // STR_TO_VARSTR(str, pUidTagInfo->name); + // } else { // name is not retrieved during filter + // pAPI->metaFn.getTableNameByUid(pVnode, pUidTagInfo->uid, str); + // } + STR_TO_VARSTR(str, "ctbidx"); - colDataSetVal(pColInfo, rowIndex, str, false); + colDataSetVal(pColInfo, rowIndex, str, false); + } else if (FUNCTION_TYPE_TBUID == pExprInfo->pExpr->_function.functionType) { + colDataSetVal(pColInfo, rowIndex, (char*)&pUidTagInfo->uid, false); + } else if (FUNCTION_TYPE_VGID == pExprInfo->pExpr->_function.functionType) { + colDataSetVal(pColInfo, rowIndex, (char*)&pOperator->pTaskInfo->id.vgId, false); + } } else { STagVal tagVal = {0}; tagVal.cid = pExprInfo->base.pParam[0].pCol->colId; @@ -2950,7 +2956,7 @@ static int32_t tagScanFillResultBlock(SOperatorInfo* pOperator, SSDataBlock* pRe STUidTagInfo* pUidTagInfo = taosArrayGet(aUidTags, idx); for (int32_t j = 0; j < pOperator->exprSupp.numOfExprs; ++j) { SColumnInfoData* pDst = taosArrayGet(pRes->pDataBlock, pExprInfo[j].base.resSchema.slotId); - tagScanFillOneCellWithTag(pUidTagInfo, &pExprInfo[j], pDst, i, pAPI, pInfo->readHandle.vnode); + tagScanFillOneCellWithTag(pOperator, pUidTagInfo, &pExprInfo[j], pDst, i, pAPI, pInfo->readHandle.vnode); } } } else { @@ -2959,7 +2965,7 @@ static int32_t tagScanFillResultBlock(SOperatorInfo* pOperator, SSDataBlock* pRe STUidTagInfo* pUidTagInfo = taosArrayGet(aUidTags, i); for (int32_t j = 0; j < pOperator->exprSupp.numOfExprs; ++j) { SColumnInfoData* pDst = taosArrayGet(pRes->pDataBlock, pExprInfo[j].base.resSchema.slotId); - tagScanFillOneCellWithTag(pUidTagInfo, &pExprInfo[j], pDst, i, pAPI, pInfo->readHandle.vnode); + tagScanFillOneCellWithTag(pOperator, pUidTagInfo, &pExprInfo[j], pDst, i, pAPI, pInfo->readHandle.vnode); } } } @@ -2978,7 +2984,7 @@ static SSDataBlock* doTagScanFromCtbIdx(SOperatorInfo* pOperator) { blockDataCleanup(pRes); if (pInfo->pCtbCursor == NULL) { - pInfo->pCtbCursor = pAPI->metaFn.openCtbCursor(pInfo->readHandle.vnode, pInfo->suid, 1); + pInfo->pCtbCursor = pAPI->metaFn.openCtbCursor(pInfo->readHandle.vnode, pInfo->suid, 0); } SArray* aUidTags = pInfo->aUidTags; @@ -3087,7 +3093,7 @@ static SSDataBlock* doTagScanFromMetaEntry(SOperatorInfo* pOperator) { static void destroyTagScanOperatorInfo(void* param) { STagScanInfo* pInfo = (STagScanInfo*)param; if (pInfo->pCtbCursor != NULL) { - pInfo->pStorageAPI->metaFn.closeCtbCursor(pInfo->pCtbCursor, 1); + pInfo->pStorageAPI->metaFn.closeCtbCursor(pInfo->pCtbCursor, 0); } taosHashCleanup(pInfo->filterCtx.colHash); taosArrayDestroy(pInfo->filterCtx.cInfoList); diff --git a/source/libs/nodes/src/nodesCloneFuncs.c b/source/libs/nodes/src/nodesCloneFuncs.c index dc36ba35ae..1e9075994a 100644 --- a/source/libs/nodes/src/nodesCloneFuncs.c +++ b/source/libs/nodes/src/nodesCloneFuncs.c @@ -419,6 +419,7 @@ static int32_t logicScanCopy(const SScanLogicNode* pSrc, SScanLogicNode* pDst) { CLONE_NODE_FIELD(pSubtable); COPY_SCALAR_FIELD(igLastNull); COPY_SCALAR_FIELD(groupOrderScan); + COPY_SCALAR_FIELD(onlyMetaCtbIdx); return TSDB_CODE_SUCCESS; } diff --git a/source/libs/planner/src/planOptimizer.c b/source/libs/planner/src/planOptimizer.c index 3bb06443dc..e2165dbf96 100644 --- a/source/libs/planner/src/planOptimizer.c +++ b/source/libs/planner/src/planOptimizer.c @@ -3206,6 +3206,7 @@ int32_t stbJoinOptRewriteToTagScan(SLogicNode* pJoin, SNode* pNode) { NODES_DESTORY_NODE(pScan->node.pConditions); pScan->node.requireDataOrder = DATA_ORDER_LEVEL_NONE; pScan->node.resultDataOrder = DATA_ORDER_LEVEL_NONE; + pScan->onlyMetaCtbIdx = true; SNodeList* pTags = nodesMakeList(); int32_t code = nodesCollectColumnsFromNode(pJoinNode->pTagEqCond, NULL, COLLECT_COL_TYPE_TAG, &pTags); @@ -3328,10 +3329,10 @@ static int32_t stbJoinOptCreateTableScanNodes(SLogicNode* pJoin, SNodeList** ppL SNode* pNode = NULL; FOREACH(pNode, pList) { SScanLogicNode* pScan = (SScanLogicNode*)pNode; - code = stbJoinOptAddFuncToScanNode("_tbuid", pScan); - if (code) { - break; - } + //code = stbJoinOptAddFuncToScanNode("_tbuid", pScan); + //if (code) { + // break; + //} pScan->node.dynamicOp = true; *(srcScan + i++) = pScan->pVgroupList->numOfVgroups <= 1;