fix: first run without tag cond
This commit is contained in:
parent
6530658815
commit
47d2f9ad6d
|
@ -427,7 +427,7 @@ SMCtbCursor *metaOpenCtbCursor(void* pVnode, tb_uid_t uid, int lock) {
|
||||||
metaRLock(pMeta);
|
metaRLock(pMeta);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = tdbTbcOpen(pMeta->pCtbIdx, &pCtbCur->pCur, NULL);
|
ret = tdbTbcOpen(pMeta->pCtbIdx, (TBC**)&pCtbCur->pCur, NULL);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
metaULock(pMeta);
|
metaULock(pMeta);
|
||||||
taosMemoryFree(pCtbCur);
|
taosMemoryFree(pCtbCur);
|
||||||
|
@ -1365,7 +1365,7 @@ int32_t metaGetTableTagsByUids(void *pVnode, int64_t suid, SArray *uidList) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t metaGetTableTags(void *pVnode, uint64_t suid, SArray *pUidTagInfo) {
|
int32_t metaGetTableTags(void *pVnode, uint64_t suid, SArray *pUidTagInfo) {
|
||||||
SMCtbCursor *pCur = metaOpenCtbCursor(((SVnode *)pVnode)->pMeta, suid, 1);
|
SMCtbCursor *pCur = metaOpenCtbCursor(pVnode, suid, 1);
|
||||||
|
|
||||||
// If len > 0 means there already have uids, and we only want the
|
// If len > 0 means there already have uids, and we only want the
|
||||||
// tags of the specified tables, of which uid in the uid list. Otherwise, all table tags are retrieved and kept
|
// tags of the specified tables, of which uid in the uid list. Otherwise, all table tags are retrieved and kept
|
||||||
|
|
|
@ -440,7 +440,7 @@ int32_t vnodeGetTableList(void* pVnode, int8_t type, SArray* pList) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t vnodeGetAllTableList(SVnode *pVnode, uint64_t uid, SArray *list) {
|
int32_t vnodeGetAllTableList(SVnode *pVnode, uint64_t uid, SArray *list) {
|
||||||
SMCtbCursor *pCur = metaOpenCtbCursor(pVnode->pMeta, uid, 1);
|
SMCtbCursor *pCur = metaOpenCtbCursor(pVnode, uid, 1);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
tb_uid_t id = metaCtbCursorNext(pCur);
|
tb_uid_t id = metaCtbCursorNext(pCur);
|
||||||
|
@ -462,7 +462,7 @@ int32_t vnodeGetCtbIdListByFilter(SVnode *pVnode, int64_t suid, SArray *list, bo
|
||||||
|
|
||||||
int32_t vnodeGetCtbIdList(void *pVnode, int64_t suid, SArray *list) {
|
int32_t vnodeGetCtbIdList(void *pVnode, int64_t suid, SArray *list) {
|
||||||
SVnode *pVnodeObj = pVnode;
|
SVnode *pVnodeObj = pVnode;
|
||||||
SMCtbCursor *pCur = metaOpenCtbCursor(pVnodeObj->pMeta, suid, 1);
|
SMCtbCursor *pCur = metaOpenCtbCursor(pVnodeObj, suid, 1);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
tb_uid_t id = metaCtbCursorNext(pCur);
|
tb_uid_t id = metaCtbCursorNext(pCur);
|
||||||
|
@ -521,7 +521,7 @@ int32_t vnodeGetStbIdListByFilter(SVnode *pVnode, int64_t suid, SArray *list, bo
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t vnodeGetCtbNum(SVnode *pVnode, int64_t suid, int64_t *num) {
|
int32_t vnodeGetCtbNum(SVnode *pVnode, int64_t suid, int64_t *num) {
|
||||||
SMCtbCursor *pCur = metaOpenCtbCursor(pVnode->pMeta, suid, 0);
|
SMCtbCursor *pCur = metaOpenCtbCursor(pVnode, suid, 0);
|
||||||
if (!pCur) {
|
if (!pCur) {
|
||||||
return TSDB_CODE_FAILED;
|
return TSDB_CODE_FAILED;
|
||||||
}
|
}
|
||||||
|
|
|
@ -371,6 +371,7 @@ SOperatorInfo* createOperator(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, SR
|
||||||
pOperator = createTableCountScanOperatorInfo(pHandle, pTblCountScanNode, pTaskInfo);
|
pOperator = createTableCountScanOperatorInfo(pHandle, pTblCountScanNode, pTaskInfo);
|
||||||
} else if (QUERY_NODE_PHYSICAL_PLAN_TAG_SCAN == type) {
|
} else if (QUERY_NODE_PHYSICAL_PLAN_TAG_SCAN == type) {
|
||||||
STagScanPhysiNode* pTagScanPhyNode = (STagScanPhysiNode*)pPhyNode;
|
STagScanPhysiNode* pTagScanPhyNode = (STagScanPhysiNode*)pPhyNode;
|
||||||
|
pTagScanPhyNode->onlyMetaCtbIdx = true;
|
||||||
STableListInfo* pTableListInfo = tableListCreate();
|
STableListInfo* pTableListInfo = tableListCreate();
|
||||||
if (!pTagScanPhyNode->onlyMetaCtbIdx) {
|
if (!pTagScanPhyNode->onlyMetaCtbIdx) {
|
||||||
int32_t code = createScanTableListInfo((SScanPhysiNode*)pTagScanPhyNode, NULL, false, pHandle, pTableListInfo, pTagCond,
|
int32_t code = createScanTableListInfo((SScanPhysiNode*)pTagScanPhyNode, NULL, false, pHandle, pTableListInfo, pTagCond,
|
||||||
|
|
|
@ -2922,7 +2922,8 @@ static SSDataBlock* doTagScanFromCtbIdx(SOperatorInfo* pOperator) {
|
||||||
SArray* aFilterIdxs = taosArrayInit(pOperator->resultInfo.capacity, sizeof(int32_t));
|
SArray* aFilterIdxs = taosArrayInit(pOperator->resultInfo.capacity, sizeof(int32_t));
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
while (count < pOperator->resultInfo.capacity) {
|
int32_t numTables = 0;
|
||||||
|
while (numTables < pOperator->resultInfo.capacity) {
|
||||||
SMCtbCursor* pCur = pInfo->pCtbCursor;
|
SMCtbCursor* pCur = pInfo->pCtbCursor;
|
||||||
tb_uid_t uid = pAPI->metaFn.ctbCursorNext(pInfo->pCtbCursor);
|
tb_uid_t uid = pAPI->metaFn.ctbCursorNext(pInfo->pCtbCursor);
|
||||||
if (uid == 0) {
|
if (uid == 0) {
|
||||||
|
@ -2932,14 +2933,19 @@ static SSDataBlock* doTagScanFromCtbIdx(SOperatorInfo* pOperator) {
|
||||||
info.pTagVal = taosMemoryMalloc(pCur->vLen);
|
info.pTagVal = taosMemoryMalloc(pCur->vLen);
|
||||||
memcpy(info.pTagVal, pCur->pVal, pCur->vLen);
|
memcpy(info.pTagVal, pCur->pVal, pCur->vLen);
|
||||||
taosArrayPush(aUidTags, &info);
|
taosArrayPush(aUidTags, &info);
|
||||||
|
++numTables;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t numTables = taosArrayGetSize(aUidTags);
|
|
||||||
if (numTables == 0) {
|
if (numTables == 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (pInfo->pTagCond != NULL) {
|
||||||
tagScanFilterByTagCond(aUidTags, pInfo->pTagCond, pInfo->readHandle.vnode, aFilterIdxs, pAPI);
|
tagScanFilterByTagCond(aUidTags, pInfo->pTagCond, pInfo->readHandle.vnode, aFilterIdxs, pAPI);
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < numTables; ++i) {
|
||||||
|
taosArrayPush(aFilterIdxs, &i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
tagScanFillResultBlock(pOperator, pRes, aUidTags, aFilterIdxs, pAPI);
|
tagScanFillResultBlock(pOperator, pRes, aUidTags, aFilterIdxs, pAPI);
|
||||||
count = taosArrayGetSize(aFilterIdxs);
|
count = taosArrayGetSize(aFilterIdxs);
|
||||||
|
@ -2955,6 +2961,7 @@ static SSDataBlock* doTagScanFromCtbIdx(SOperatorInfo* pOperator) {
|
||||||
taosArrayDestroy(aFilterIdxs);
|
taosArrayDestroy(aFilterIdxs);
|
||||||
taosArrayDestroyEx(aUidTags, tagScanFreeUidTag);
|
taosArrayDestroyEx(aUidTags, tagScanFreeUidTag);
|
||||||
|
|
||||||
|
pRes->info.rows = count;
|
||||||
pOperator->resultInfo.totalRows += count;
|
pOperator->resultInfo.totalRows += count;
|
||||||
return (pRes->info.rows == 0) ? NULL : pInfo->pRes;
|
return (pRes->info.rows == 0) ? NULL : pInfo->pRes;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue