From e0393347920bf12328688a7824ef227321e30162 Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Wed, 10 Aug 2022 20:18:54 +0800 Subject: [PATCH 01/19] opti: logic in get table list --- source/common/src/tdatablock.c | 2 + source/libs/executor/src/executil.c | 154 ++++++++++++++++++++++++++-- 2 files changed, 148 insertions(+), 8 deletions(-) diff --git a/source/common/src/tdatablock.c b/source/common/src/tdatablock.c index dba30bb876..7692e02a37 100644 --- a/source/common/src/tdatablock.c +++ b/source/common/src/tdatablock.c @@ -1343,12 +1343,14 @@ SSDataBlock* createDataBlock() { SSDataBlock* pBlock = taosMemoryCalloc(1, sizeof(SSDataBlock)); if (pBlock == NULL) { terrno = TSDB_CODE_OUT_OF_MEMORY; + return NULL; } pBlock->pDataBlock = taosArrayInit(4, sizeof(SColumnInfoData)); if (pBlock->pDataBlock == NULL) { terrno = TSDB_CODE_OUT_OF_MEMORY; taosMemoryFree(pBlock); + return NULL; } return pBlock; diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index 34247d3b47..2b2c4cc201 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -298,6 +298,143 @@ int32_t isQualifiedTable(STableKeyInfo* info, SNode* pTagCond, void* metaHandle, return TSDB_CODE_SUCCESS; } +typedef struct tagFilterAssist{ + SHashObj *colHash; + int32_t index; + SArray *cInfoList; +}tagFilterAssist; + +static EDealRes getColumn(SNode* pNode, void* pContext) { + if (QUERY_NODE_COLUMN == nodeType(pNode)) { + tagFilterAssist *pData = (tagFilterAssist *)pContext; + SColumnNode* pSColumnNode = (SColumnNode*)pNode; + void *data = taosHashGet(pData->colHash, &pSColumnNode->colId, sizeof(pSColumnNode->colId)); + if(!data){ + taosHashPut(pData->colHash, &pSColumnNode->colId, sizeof(pSColumnNode->colId), &pNode, sizeof(pNode)); + pSColumnNode->slotId = pData->index++; + SColumnInfo cInfo = {.colId = pSColumnNode->colId, .type = pSColumnNode->node.resType.type, .bytes = pSColumnNode->node.resType.bytes}; + taosArrayPush(pData->cInfoList, &cInfo); + } + + return DEAL_RES_END; + } + return DEAL_RES_CONTINUE; +} + +static int32_t createResultData(SDataType* pType, int32_t numOfRows, SScalarParam* pParam) { + SColumnInfoData* pColumnData = taosMemoryCalloc(1, sizeof(SColumnInfoData)); + if (pColumnData == NULL) { + terrno = TSDB_CODE_OUT_OF_MEMORY; + return terrno; + } + + pColumnData->info.type = pType->type; + pColumnData->info.bytes = pType->bytes; + pColumnData->info.scale = pType->scale; + pColumnData->info.precision = pType->precision; + + int32_t code = colInfoDataEnsureCapacity(pColumnData, numOfRows); + if (code != TSDB_CODE_SUCCESS) { + terrno = TSDB_CODE_OUT_OF_MEMORY; + taosMemoryFree(pColumnData); + return terrno; + } + + pParam->columnData = pColumnData; + pParam->colAlloced = true; + return TSDB_CODE_SUCCESS; +} + +SColumnInfoData* getColInfoResult(void* metaHandle, SArray* pTableList, SNode* pTagCond){ + int32_t code = TSDB_CODE_SUCCESS; + SArray* pBlockList = NULL; + SSDataBlock* pResBlock = NULL; + SScalarParam output = {0}; + + tagFilterAssist ctx = {0}; + ctx.colHash = taosHashInit(4, taosGetDefaultHashFunction(TSDB_DATA_TYPE_SMALLINT), false, HASH_NO_LOCK); + if(ctx.colHash == NULL){ + terrno = TSDB_CODE_OUT_OF_MEMORY; + goto end; + } + ctx.index = 0; + ctx.cInfoList = taosArrayInit(4, sizeof(SColumnInfo)); + if(ctx.cInfoList == NULL){ + terrno = TSDB_CODE_OUT_OF_MEMORY; + goto end; + } + nodesWalkExprPostOrder(pTagCond, getColumn, (void *)&ctx); + + pResBlock = createDataBlock(); + if (pResBlock == NULL) { + terrno = TSDB_CODE_OUT_OF_MEMORY; + goto end; + } + + for (int32_t i = 0; i < taosArrayGetSize(ctx.cInfoList); ++i) { + SColumnInfoData colInfo = {{0}, 0}; + colInfo.info = *(SColumnInfo*)taosArrayGet(ctx.cInfoList, i); + blockDataAppendColInfo(pResBlock, &colInfo); + } + + int32_t rows = taosArrayGetSize(pTableList); + code = blockDataEnsureCapacity(pResBlock, rows); + if (code != TSDB_CODE_SUCCESS) { + terrno = code; + goto end; + } + + for (int32_t i = 0; i < rows; i++) { + STableKeyInfo* info = taosArrayGet(pTableList, i); + + SMetaReader mr = {0}; + metaReaderInit(&mr, metaHandle, 0); + code = metaGetTableEntryByUid(&mr, info->uid); + if (TSDB_CODE_SUCCESS == code) { + for(int32_t j = 0; j < taosArrayGetSize(pResBlock->pDataBlock); j++){ + SColumnInfoData* pColInfo = (SColumnInfoData*)taosArrayGet(pResBlock->pDataBlock, j); + STagVal tagVal = {0}; + tagVal.cid = pColInfo->info.colId; + const char* p = metaGetTableTagVal(&mr.me, pColInfo->info.type, &tagVal); + + if (IS_VAR_DATA_TYPE(pColInfo->info.type)) { + char* tmp = taosMemoryCalloc(tagVal.nData + VARSTR_HEADER_SIZE, 1); + memcpy(varDataVal(tmp), tagVal.pData, tagVal.nData); + varDataSetLen(tmp, tagVal.nData); + colDataAppend(pColInfo, i, tmp, p == NULL); + taosMemoryFree(tmp); + } else { + colDataAppend(pColInfo, i, p, p == NULL); + } + } + + } + metaReaderClear(&mr); + } + + pBlockList = taosArrayInit(2, POINTER_BYTES); + taosArrayPush(pBlockList, &pResBlock); + + SDataType type = {.type = TSDB_DATA_TYPE_BOOL, .bytes = sizeof(bool)}; + code = createResultData(&type, rows, &output); + if (code != TSDB_CODE_SUCCESS) { + goto end; + } + + code = scalarCalculate(pTagCond, pBlockList, &output); + if(code != TSDB_CODE_SUCCESS){ + terrno = code; + } + +end: + taosArrayDestroy(pBlockList); + taosHashCleanup(ctx.colHash); + taosArrayDestroy(ctx.cInfoList); + blockDataDestroy(pResBlock); + taosArrayDestroy(pBlockList); + return output.columnData; +} + int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, SNode* pTagCond, SNode* pTagIndexCond, STableListInfo* pListInfo) { int32_t code = TSDB_CODE_SUCCESS; @@ -347,22 +484,23 @@ int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, } if (pTagCond) { + SColumnInfoData* pColInfoData = getColInfoResult(metaHandle, pListInfo->pTableList, pTagCond); + if(terrno != TDB_CODE_SUCCESS){ + colDataDestroy(pColInfoData); + return terrno; + } + int32_t i = 0; while (i < taosArrayGetSize(pListInfo->pTableList)) { - STableKeyInfo* info = taosArrayGet(pListInfo->pTableList, i); + void* var = POINTER_SHIFT(pColInfoData->pData, i * pColInfoData->info.bytes); - bool qualified = true; - code = isQualifiedTable(info, pTagCond, metaHandle, &qualified); - if (code != TSDB_CODE_SUCCESS) { - return code; - } - - if (!qualified) { + if (*(bool*)var == false) { taosArrayRemove(pListInfo->pTableList, i); continue; } i++; } + colDataDestroy(pColInfoData); } pListInfo->pGroupList = taosArrayInit(4, POINTER_BYTES); From e7f4755386f19c149dc8569372a75700b1237556 Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Wed, 10 Aug 2022 20:26:59 +0800 Subject: [PATCH 02/19] opti: add log for time cost --- source/libs/executor/src/executil.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index 2b2c4cc201..63bd30120e 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -384,6 +384,7 @@ SColumnInfoData* getColInfoResult(void* metaHandle, SArray* pTableList, SNode* p goto end; } + int64_t st = taosGetTimestampUs(); for (int32_t i = 0; i < rows; i++) { STableKeyInfo* info = taosArrayGet(pTableList, i); @@ -411,6 +412,8 @@ SColumnInfoData* getColInfoResult(void* metaHandle, SArray* pTableList, SNode* p } metaReaderClear(&mr); } + int64_t st1 = taosGetTimestampUs(); + qDebug("generate tag block rows:%d, cost:%lf ms", rows, st1-st); pBlockList = taosArrayInit(2, POINTER_BYTES); taosArrayPush(pBlockList, &pResBlock); @@ -425,6 +428,8 @@ SColumnInfoData* getColInfoResult(void* metaHandle, SArray* pTableList, SNode* p if(code != TSDB_CODE_SUCCESS){ terrno = code; } + int64_t st2 = taosGetTimestampUs(); + qDebug("calculate tag block rows:%d, cost:%lf ms", rows, st2-st1); end: taosArrayDestroy(pBlockList); From 8be139626889e79f7aab95ba99530c1fbfcb440e Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Wed, 10 Aug 2022 21:31:08 +0800 Subject: [PATCH 03/19] opti: add log for time cost --- source/libs/executor/src/executil.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index 63bd30120e..2a2a387e31 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -412,6 +412,8 @@ SColumnInfoData* getColInfoResult(void* metaHandle, SArray* pTableList, SNode* p } metaReaderClear(&mr); } + pResBlock->info.rows = rows; + int64_t st1 = taosGetTimestampUs(); qDebug("generate tag block rows:%d, cost:%lf ms", rows, st1-st); @@ -432,7 +434,6 @@ SColumnInfoData* getColInfoResult(void* metaHandle, SArray* pTableList, SNode* p qDebug("calculate tag block rows:%d, cost:%lf ms", rows, st2-st1); end: - taosArrayDestroy(pBlockList); taosHashCleanup(ctx.colHash); taosArrayDestroy(ctx.cInfoList); blockDataDestroy(pResBlock); From 4f03e2e4f5f4c550805e43b2107f40786eb994d6 Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Thu, 11 Aug 2022 14:35:38 +0800 Subject: [PATCH 04/19] opti:logic for get table list --- source/libs/executor/src/executil.c | 48 ++++++++++++++++------------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index 2a2a387e31..4713eaefe5 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -315,8 +315,6 @@ static EDealRes getColumn(SNode* pNode, void* pContext) { SColumnInfo cInfo = {.colId = pSColumnNode->colId, .type = pSColumnNode->node.resType.type, .bytes = pSColumnNode->node.resType.bytes}; taosArrayPush(pData->cInfoList, &cInfo); } - - return DEAL_RES_END; } return DEAL_RES_CONTINUE; } @@ -388,34 +386,42 @@ SColumnInfoData* getColInfoResult(void* metaHandle, SArray* pTableList, SNode* p for (int32_t i = 0; i < rows; i++) { STableKeyInfo* info = taosArrayGet(pTableList, i); +// int64_t stt = taosGetTimestampUs(); SMetaReader mr = {0}; metaReaderInit(&mr, metaHandle, 0); code = metaGetTableEntryByUid(&mr, info->uid); - if (TSDB_CODE_SUCCESS == code) { - for(int32_t j = 0; j < taosArrayGetSize(pResBlock->pDataBlock); j++){ - SColumnInfoData* pColInfo = (SColumnInfoData*)taosArrayGet(pResBlock->pDataBlock, j); - STagVal tagVal = {0}; - tagVal.cid = pColInfo->info.colId; - const char* p = metaGetTableTagVal(&mr.me, pColInfo->info.type, &tagVal); +// int64_t stt1 = taosGetTimestampUs(); +// qDebug("generate tag get meta rows:%d, cost:%ld ms", rows, stt1-stt); - if (IS_VAR_DATA_TYPE(pColInfo->info.type)) { - char* tmp = taosMemoryCalloc(tagVal.nData + VARSTR_HEADER_SIZE, 1); - memcpy(varDataVal(tmp), tagVal.pData, tagVal.nData); - varDataSetLen(tmp, tagVal.nData); - colDataAppend(pColInfo, i, tmp, p == NULL); - taosMemoryFree(tmp); - } else { - colDataAppend(pColInfo, i, p, p == NULL); - } + for(int32_t j = 0; j < taosArrayGetSize(pResBlock->pDataBlock); j++){ + SColumnInfoData* pColInfo = (SColumnInfoData*)taosArrayGet(pResBlock->pDataBlock, j); + STagVal tagVal = {0}; + tagVal.cid = pColInfo->info.colId; +// int64_t t1 = taosGetTimestampUs(); + const char* p = metaGetTableTagVal(&mr.me, pColInfo->info.type, &tagVal); +// int64_t t2 = taosGetTimestampUs(); +// qDebug("generate tag inner1 rows:%d, cost:%ld ms", rows, t2-t1); + + if (p == NULL){ + colDataAppend(pColInfo, i, p, true); + } else if (IS_VAR_DATA_TYPE(pColInfo->info.type)) { + char *tmp = (char*)(tagVal.pData - VARSTR_HEADER_SIZE); + varDataSetLen(tmp, tagVal.nData); + colDataAppend(pColInfo, i, tmp, p == NULL); + } else { + colDataAppend(pColInfo, i, p, false); } - +// int64_t t3 = taosGetTimestampUs(); +// qDebug("generate tag inner2 rows:%d, cost:%ld ms", rows, t3-t2); } +// int64_t stt2 = taosGetTimestampUs(); +// qDebug("generate tag get block rows:%d, cost:%ld us", rows, stt2-stt1); metaReaderClear(&mr); } pResBlock->info.rows = rows; int64_t st1 = taosGetTimestampUs(); - qDebug("generate tag block rows:%d, cost:%lf ms", rows, st1-st); + qDebug("generate tag block rows:%d, cost:%ld us", rows, st1-st); pBlockList = taosArrayInit(2, POINTER_BYTES); taosArrayPush(pBlockList, &pResBlock); @@ -431,7 +437,7 @@ SColumnInfoData* getColInfoResult(void* metaHandle, SArray* pTableList, SNode* p terrno = code; } int64_t st2 = taosGetTimestampUs(); - qDebug("calculate tag block rows:%d, cost:%lf ms", rows, st2-st1); + qDebug("calculate tag block rows:%d, cost:%ld us", rows, st2-st1); end: taosHashCleanup(ctx.colHash); @@ -489,7 +495,7 @@ int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, taosArrayPush(pListInfo->pTableList, &info); } - if (pTagCond) { + if (pTagCond && taosArrayGetSize(pListInfo->pTableList) > 0) { SColumnInfoData* pColInfoData = getColInfoResult(metaHandle, pListInfo->pTableList, pTagCond); if(terrno != TDB_CODE_SUCCESS){ colDataDestroy(pColInfoData); From 32f9bc0dd0ac02d948b5999747f3090c51cb6bf1 Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Thu, 11 Aug 2022 18:29:28 +0800 Subject: [PATCH 05/19] opti:logic for get table list --- source/dnode/vnode/inc/vnode.h | 1 + source/dnode/vnode/src/meta/metaQuery.c | 52 +++++++++++++++++++++++++ source/libs/executor/src/executil.c | 19 ++++++++- 3 files changed, 71 insertions(+), 1 deletion(-) diff --git a/source/dnode/vnode/inc/vnode.h b/source/dnode/vnode/inc/vnode.h index 18a7583f4c..e969634a9f 100644 --- a/source/dnode/vnode/inc/vnode.h +++ b/source/dnode/vnode/inc/vnode.h @@ -91,6 +91,7 @@ typedef struct SMetaEntry SMetaEntry; void metaReaderInit(SMetaReader *pReader, SMeta *pMeta, int32_t flags); void metaReaderClear(SMetaReader *pReader); int32_t metaGetTableEntryByUid(SMetaReader *pReader, tb_uid_t uid); +//int32_t metaGetTableEntryByUidTest(void *pReader, SArray *uidList); int32_t metaReadNext(SMetaReader *pReader); const void *metaGetTableTagVal(SMetaEntry *pEntry, int16_t type, STagVal *tagVal); int metaGetTableNameByUid(void *meta, uint64_t uid, char *tbName); diff --git a/source/dnode/vnode/src/meta/metaQuery.c b/source/dnode/vnode/src/meta/metaQuery.c index eed0ae5e14..f5771c17bd 100644 --- a/source/dnode/vnode/src/meta/metaQuery.c +++ b/source/dnode/vnode/src/meta/metaQuery.c @@ -53,6 +53,58 @@ _err: return -1; } +int metaGetTableEntryByUidTest(void* meta, SArray *uidList) { + + SArray* readerList = taosArrayInit(taosArrayGetSize(uidList), sizeof(SMetaReader)); + SArray* uidVersion = taosArrayInit(taosArrayGetSize(uidList), sizeof(STbDbKey)); + SMeta *pMeta = meta; + int64_t version; + + int64_t stt1 = taosGetTimestampUs(); + for(int i = 0; i < taosArrayGetSize(uidList); i++) { + void* ppVal = NULL; + int vlen = 0; + uint64_t * uid = taosArrayGet(uidList, i); + // query uid.idx + if (tdbTbGet(pMeta->pUidIdx, uid, sizeof(*uid), &ppVal, &vlen) < 0) { + continue; + } + version = *(int64_t *)ppVal; + + STbDbKey tbDbKey = {.version = version, .uid = *uid}; + taosArrayPush(uidVersion, &tbDbKey); + } + int64_t stt2 = taosGetTimestampUs(); + qDebug("metaGetTableEntryByUidTest1 rows:%d, cost:%ld us", taosArrayGetSize(uidList), stt2-stt1); + + for(int i = 0; i < taosArrayGetSize(uidVersion); i++) { + SMetaReader pReader = {0}; + + STbDbKey *tbDbKey = taosArrayGet(uidVersion, i); + // query table.db + if (tdbTbGet(pMeta->pTbDb, tbDbKey, sizeof(STbDbKey), &pReader.pBuf, &pReader.szBuf) < 0) { + continue; + } + taosArrayPush(readerList, &pReader); + } + int64_t stt3 = taosGetTimestampUs(); + qDebug("metaGetTableEntryByUidTest2 rows:%d, cost:%ld us", taosArrayGetSize(uidList), stt3-stt2); + + for(int i = 0; i < taosArrayGetSize(readerList); i++){ + SMetaReader* pReader = taosArrayGet(readerList, i); + metaReaderInit(pReader, meta, 0); + // decode the entry + tDecoderInit(&pReader->coder, pReader->pBuf, pReader->szBuf); + + if (metaDecodeEntry(&pReader->coder, &pReader->me) < 0) { + } + metaReaderClear(pReader); + } + int64_t stt4 = taosGetTimestampUs(); + qDebug("metaGetTableEntryByUidTest3 rows:%d, cost:%ld us", taosArrayGetSize(readerList), stt4-stt3); + return 0; +} + int metaGetTableEntryByUid(SMetaReader *pReader, tb_uid_t uid) { SMeta *pMeta = pReader->pMeta; int64_t version; diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index 4713eaefe5..f798433f51 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -382,6 +382,20 @@ SColumnInfoData* getColInfoResult(void* metaHandle, SArray* pTableList, SNode* p goto end; } +// int64_t stt = taosGetTimestampUs(); +// SArray* arrAssist = taosArrayInit(rows, sizeof(SMetaReader)); +// SArray* uidList = taosArrayInit(rows, sizeof(uint64_t)); +// for (int32_t i = 0; i < rows; i++) { +// STableKeyInfo* info = taosArrayGet(pTableList, i); +// taosArrayPush(uidList, &info->uid); +// } + +// code = metaGetTableEntryByUidTest(metaHandle, uidList); + +// +// int64_t stt1 = taosGetTimestampUs(); +// qDebug("generate tag meta rows:%d, cost:%ld us", rows, stt1-stt); + int64_t st = taosGetTimestampUs(); for (int32_t i = 0; i < rows; i++) { STableKeyInfo* info = taosArrayGet(pTableList, i); @@ -392,7 +406,7 @@ SColumnInfoData* getColInfoResult(void* metaHandle, SArray* pTableList, SNode* p code = metaGetTableEntryByUid(&mr, info->uid); // int64_t stt1 = taosGetTimestampUs(); // qDebug("generate tag get meta rows:%d, cost:%ld ms", rows, stt1-stt); - +// SMetaReader *mr = taosArrayGet(arrAssist, i); for(int32_t j = 0; j < taosArrayGetSize(pResBlock->pDataBlock); j++){ SColumnInfoData* pColInfo = (SColumnInfoData*)taosArrayGet(pResBlock->pDataBlock, j); STagVal tagVal = {0}; @@ -465,6 +479,7 @@ int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, SIndexMetaArg metaArg = { .metaEx = metaHandle, .idx = tsdbGetIdx(metaHandle), .ivtIdx = tsdbGetIvtIdx(metaHandle), .suid = tableUid}; + int64_t stt = taosGetTimestampUs(); SArray* res = taosArrayInit(8, sizeof(uint64_t)); SIdxFltStatus status = SFLT_NOT_INDEX; code = doFilterTag(pTagIndexCond, &metaArg, res, &status); @@ -481,6 +496,8 @@ int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, taosArrayPush(pListInfo->pTableList, &info); } taosArrayDestroy(res); + int64_t stt1 = taosGetTimestampUs(); + qDebug("generate table list, cost:%ld us", stt1-stt); } else { code = vnodeGetAllTableList(pVnode, tableUid, pListInfo->pTableList); } From e102f81f923963b7684a6003cf742da43aea6d5a Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Fri, 12 Aug 2022 11:33:53 +0800 Subject: [PATCH 06/19] opti:use suid+uid->tags index to optimize time cost --- source/dnode/vnode/inc/vnode.h | 4 +- source/dnode/vnode/src/meta/metaQuery.c | 70 +++++++++++++++++++--- source/dnode/vnode/src/meta/metaTable.c | 5 +- source/libs/executor/src/executil.c | 79 ++++++++++--------------- source/libs/executor/src/scanoperator.c | 4 +- 5 files changed, 103 insertions(+), 59 deletions(-) diff --git a/source/dnode/vnode/inc/vnode.h b/source/dnode/vnode/inc/vnode.h index e969634a9f..6ad47799e1 100644 --- a/source/dnode/vnode/inc/vnode.h +++ b/source/dnode/vnode/inc/vnode.h @@ -91,9 +91,9 @@ typedef struct SMetaEntry SMetaEntry; void metaReaderInit(SMetaReader *pReader, SMeta *pMeta, int32_t flags); void metaReaderClear(SMetaReader *pReader); int32_t metaGetTableEntryByUid(SMetaReader *pReader, tb_uid_t uid); -//int32_t metaGetTableEntryByUidTest(void *pReader, SArray *uidList); +int32_t metaGetTableTags(SMeta *pMeta, uint64_t suid, SArray *uidList, SArray *tags); int32_t metaReadNext(SMetaReader *pReader); -const void *metaGetTableTagVal(SMetaEntry *pEntry, int16_t type, STagVal *tagVal); +const void *metaGetTableTagVal(void *tag, int16_t type, STagVal *tagVal); int metaGetTableNameByUid(void *meta, uint64_t uid, char *tbName); typedef struct SMetaFltParam { diff --git a/source/dnode/vnode/src/meta/metaQuery.c b/source/dnode/vnode/src/meta/metaQuery.c index f5771c17bd..df22913a0d 100644 --- a/source/dnode/vnode/src/meta/metaQuery.c +++ b/source/dnode/vnode/src/meta/metaQuery.c @@ -59,6 +59,7 @@ int metaGetTableEntryByUidTest(void* meta, SArray *uidList) { SArray* uidVersion = taosArrayInit(taosArrayGetSize(uidList), sizeof(STbDbKey)); SMeta *pMeta = meta; int64_t version; + SHashObj *uHash = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), false, HASH_NO_LOCK); int64_t stt1 = taosGetTimestampUs(); for(int i = 0; i < taosArrayGetSize(uidList); i++) { @@ -73,10 +74,31 @@ int metaGetTableEntryByUidTest(void* meta, SArray *uidList) { STbDbKey tbDbKey = {.version = version, .uid = *uid}; taosArrayPush(uidVersion, &tbDbKey); + taosHashPut(uHash, uid, sizeof(int64_t), ppVal, sizeof(int64_t)); } int64_t stt2 = taosGetTimestampUs(); qDebug("metaGetTableEntryByUidTest1 rows:%d, cost:%ld us", taosArrayGetSize(uidList), stt2-stt1); + TBC *pCur = NULL; + tdbTbcOpen(pMeta->pTbDb, &pCur, NULL); + tdbTbcMoveToFirst(pCur); + void *pKey = NULL; + int kLen = 0; + + while(1){ + SMetaReader pReader = {0}; + int32_t ret = tdbTbcNext(pCur, &pKey, &kLen, &pReader.pBuf, &pReader.szBuf); + if (ret < 0) break; + STbDbKey *tmp = (STbDbKey*)pKey; + int64_t *ver = (int64_t*)taosHashGet(uHash, &tmp->uid, sizeof(int64_t)); + if(ver == NULL || *ver != tmp->version) continue; + taosArrayPush(readerList, &pReader); + } + tdbTbcClose(pCur); + + taosArrayClear(readerList); + int64_t stt3 = taosGetTimestampUs(); + qDebug("metaGetTableEntryByUidTest2 rows:%d, cost:%ld us", taosArrayGetSize(uidList), stt3-stt2); for(int i = 0; i < taosArrayGetSize(uidVersion); i++) { SMetaReader pReader = {0}; @@ -87,8 +109,8 @@ int metaGetTableEntryByUidTest(void* meta, SArray *uidList) { } taosArrayPush(readerList, &pReader); } - int64_t stt3 = taosGetTimestampUs(); - qDebug("metaGetTableEntryByUidTest2 rows:%d, cost:%ld us", taosArrayGetSize(uidList), stt3-stt2); + int64_t stt4 = taosGetTimestampUs(); + qDebug("metaGetTableEntryByUidTest3 rows:%d, cost:%ld us", taosArrayGetSize(uidList), stt4-stt3); for(int i = 0; i < taosArrayGetSize(readerList); i++){ SMetaReader* pReader = taosArrayGet(readerList, i); @@ -100,8 +122,8 @@ int metaGetTableEntryByUidTest(void* meta, SArray *uidList) { } metaReaderClear(pReader); } - int64_t stt4 = taosGetTimestampUs(); - qDebug("metaGetTableEntryByUidTest3 rows:%d, cost:%ld us", taosArrayGetSize(readerList), stt4-stt3); + int64_t stt5 = taosGetTimestampUs(); + qDebug("metaGetTableEntryByUidTest4 rows:%d, cost:%ld us", taosArrayGetSize(readerList), stt5-stt4); return 0; } @@ -801,9 +823,8 @@ SArray *metaGetSmaTbUids(SMeta *pMeta) { #endif -const void *metaGetTableTagVal(SMetaEntry *pEntry, int16_t type, STagVal *val) { - ASSERT(pEntry->type == TSDB_CHILD_TABLE); - STag *tag = (STag *)pEntry->ctbEntry.pTags; +const void *metaGetTableTagVal(void *pTag, int16_t type, STagVal *val) { + STag *tag = (STag*) pTag; if (type == TSDB_DATA_TYPE_JSON) { return tag; } @@ -940,3 +961,38 @@ END: return ret; } + +int32_t metaGetTableTags(SMeta *pMeta, uint64_t suid, SArray *uidList, SArray *tags) { + SMCtbCursor *pCur = metaOpenCtbCursor(pMeta, suid); + + SHashObj *uHash = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), false, HASH_NO_LOCK); + size_t len = taosArrayGetSize(uidList); + if(len > 0){ + for(int i = 0; i < len; i++){ + int64_t *uid = taosArrayGet(uidList, i); + taosHashPut(uHash, uid, sizeof(int64_t), &i, sizeof(i)); + } + } + while (1) { + tb_uid_t id = metaCtbCursorNext(pCur); + if (id == 0) { + break; + } + + if(len > 0 && taosHashGet(uHash, &id, sizeof(int64_t)) == NULL){ + continue; + } + + void* tag = taosMemoryMalloc(pCur->vLen); + memcpy(tag, pCur->pVal, pCur->vLen); + taosArrayPush(tags, &tag); + + if(len == 0){ + taosArrayPush(uidList, &id); + } + } + + taosHashCleanup(uHash); + metaCloseCtbCursor(pCur); + return TSDB_CODE_SUCCESS; +} diff --git a/source/dnode/vnode/src/meta/metaTable.c b/source/dnode/vnode/src/meta/metaTable.c index 7427f79509..86e2f38697 100644 --- a/source/dnode/vnode/src/meta/metaTable.c +++ b/source/dnode/vnode/src/meta/metaTable.c @@ -864,6 +864,9 @@ static int metaUpdateTableTagVal(SMeta *pMeta, int64_t version, SVAlterTbReq *pA metaUpdateTagIdx(pMeta, &ctbEntry); } + SCtbIdxKey ctbIdxKey = {.suid = ctbEntry.ctbEntry.suid, .uid = uid}; + tdbTbUpsert(pMeta->pCtbIdx, &ctbIdxKey, sizeof(ctbIdxKey), ctbEntry.ctbEntry.pTags, ((STag*)(ctbEntry.ctbEntry.pTags))->len, &pMeta->txn); + tDecoderClear(&dc1); tDecoderClear(&dc2); if (ctbEntry.ctbEntry.pTags) taosMemoryFree((void *)ctbEntry.ctbEntry.pTags); @@ -1061,7 +1064,7 @@ static int metaUpdateTtlIdx(SMeta *pMeta, const SMetaEntry *pME) { static int metaUpdateCtbIdx(SMeta *pMeta, const SMetaEntry *pME) { SCtbIdxKey ctbIdxKey = {.suid = pME->ctbEntry.suid, .uid = pME->uid}; - return tdbTbInsert(pMeta->pCtbIdx, &ctbIdxKey, sizeof(ctbIdxKey), NULL, 0, &pMeta->txn); + return tdbTbInsert(pMeta->pCtbIdx, &ctbIdxKey, sizeof(ctbIdxKey), pME->ctbEntry.pTags, ((STag*)(pME->ctbEntry.pTags))->len, &pMeta->txn); } int metaCreateTagIdxKey(tb_uid_t suid, int32_t cid, const void *pTagData, int32_t nTagData, int8_t type, tb_uid_t uid, diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index f798433f51..c8d607185e 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -221,7 +221,7 @@ EDealRes doTranslateTagExpr(SNode** pNode, void* pContext) { STagVal tagVal = {0}; tagVal.cid = pSColumnNode->colId; - const char* p = metaGetTableTagVal(&mr->me, pSColumnNode->node.resType.type, &tagVal); + const char* p = metaGetTableTagVal(mr->me.ctbEntry.pTags, pSColumnNode->node.resType.type, &tagVal); if (p == NULL) { res->node.resType.type = TSDB_DATA_TYPE_NULL; } else if (pSColumnNode->node.resType.type == TSDB_DATA_TYPE_JSON) { @@ -343,10 +343,11 @@ static int32_t createResultData(SDataType* pType, int32_t numOfRows, SScalarPara return TSDB_CODE_SUCCESS; } -SColumnInfoData* getColInfoResult(void* metaHandle, SArray* pTableList, SNode* pTagCond){ +SColumnInfoData* getColInfoResult(void* metaHandle, uint64_t suid, SArray* uidList, SNode* pTagCond){ int32_t code = TSDB_CODE_SUCCESS; SArray* pBlockList = NULL; SSDataBlock* pResBlock = NULL; + SArray* tags = NULL; SScalarParam output = {0}; tagFilterAssist ctx = {0}; @@ -375,35 +376,30 @@ SColumnInfoData* getColInfoResult(void* metaHandle, SArray* pTableList, SNode* p blockDataAppendColInfo(pResBlock, &colInfo); } - int32_t rows = taosArrayGetSize(pTableList); + int64_t stt = taosGetTimestampUs(); + tags = taosArrayInit(8, POINTER_BYTES); + code = metaGetTableTags(metaHandle, suid, uidList, tags); + if (code != TSDB_CODE_SUCCESS) { + terrno = code; + goto end; + } + + int32_t rows = taosArrayGetSize(uidList); + + int64_t stt1 = taosGetTimestampUs(); + qDebug("generate tag meta rows:%d, cost:%ld us", rows, stt1-stt); + code = blockDataEnsureCapacity(pResBlock, rows); if (code != TSDB_CODE_SUCCESS) { terrno = code; goto end; } -// int64_t stt = taosGetTimestampUs(); -// SArray* arrAssist = taosArrayInit(rows, sizeof(SMetaReader)); -// SArray* uidList = taosArrayInit(rows, sizeof(uint64_t)); -// for (int32_t i = 0; i < rows; i++) { -// STableKeyInfo* info = taosArrayGet(pTableList, i); -// taosArrayPush(uidList, &info->uid); -// } - -// code = metaGetTableEntryByUidTest(metaHandle, uidList); - -// -// int64_t stt1 = taosGetTimestampUs(); -// qDebug("generate tag meta rows:%d, cost:%ld us", rows, stt1-stt); - int64_t st = taosGetTimestampUs(); for (int32_t i = 0; i < rows; i++) { - STableKeyInfo* info = taosArrayGet(pTableList, i); - + uint64_t* uid = taosArrayGet(uidList, i); + void* tag = taosArrayGet(tags, i); // int64_t stt = taosGetTimestampUs(); - SMetaReader mr = {0}; - metaReaderInit(&mr, metaHandle, 0); - code = metaGetTableEntryByUid(&mr, info->uid); // int64_t stt1 = taosGetTimestampUs(); // qDebug("generate tag get meta rows:%d, cost:%ld ms", rows, stt1-stt); // SMetaReader *mr = taosArrayGet(arrAssist, i); @@ -412,7 +408,7 @@ SColumnInfoData* getColInfoResult(void* metaHandle, SArray* pTableList, SNode* p STagVal tagVal = {0}; tagVal.cid = pColInfo->info.colId; // int64_t t1 = taosGetTimestampUs(); - const char* p = metaGetTableTagVal(&mr.me, pColInfo->info.type, &tagVal); + const char* p = metaGetTableTagVal(tag, pColInfo->info.type, &tagVal); // int64_t t2 = taosGetTimestampUs(); // qDebug("generate tag inner1 rows:%d, cost:%ld ms", rows, t2-t1); @@ -430,7 +426,6 @@ SColumnInfoData* getColInfoResult(void* metaHandle, SArray* pTableList, SNode* p } // int64_t stt2 = taosGetTimestampUs(); // qDebug("generate tag get block rows:%d, cost:%ld us", rows, stt2-stt1); - metaReaderClear(&mr); } pResBlock->info.rows = rows; @@ -454,6 +449,7 @@ SColumnInfoData* getColInfoResult(void* metaHandle, SArray* pTableList, SNode* p qDebug("calculate tag block rows:%d, cost:%ld us", rows, st2-st1); end: + taosArrayDestroy(tags); taosHashCleanup(ctx.colHash); taosArrayDestroy(ctx.cInfoList); blockDataDestroy(pResBlock); @@ -471,8 +467,8 @@ int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, } uint64_t tableUid = pScanNode->uid; - pListInfo->suid = pScanNode->suid; + SArray* res = taosArrayInit(8, sizeof(uint64_t)); if (pScanNode->tableType == TSDB_SUPER_TABLE) { if (pTagIndexCond) { @@ -480,42 +476,24 @@ int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, .metaEx = metaHandle, .idx = tsdbGetIdx(metaHandle), .ivtIdx = tsdbGetIvtIdx(metaHandle), .suid = tableUid}; int64_t stt = taosGetTimestampUs(); - SArray* res = taosArrayInit(8, sizeof(uint64_t)); SIdxFltStatus status = SFLT_NOT_INDEX; code = doFilterTag(pTagIndexCond, &metaArg, res, &status); if (code != 0 || status == SFLT_NOT_INDEX) { qError("failed to get tableIds from index, reason:%s, suid:%" PRIu64, tstrerror(code), tableUid); - // code = TSDB_CODE_INDEX_REBUILDING; - code = vnodeGetAllTableList(pVnode, tableUid, pListInfo->pTableList); - } else { - qDebug("success to get tableIds, size:%d, suid:%" PRIu64, (int)taosArrayGetSize(res), tableUid); } - for (int i = 0; i < taosArrayGetSize(res); i++) { - STableKeyInfo info = {.uid = *(uint64_t*)taosArrayGet(res, i), .groupId = 0}; - taosArrayPush(pListInfo->pTableList, &info); - } - taosArrayDestroy(res); int64_t stt1 = taosGetTimestampUs(); qDebug("generate table list, cost:%ld us", stt1-stt); - } else { - code = vnodeGetAllTableList(pVnode, tableUid, pListInfo->pTableList); - } - - if (code != TSDB_CODE_SUCCESS) { - qError("failed to get tableIds, reason:%s, suid:%" PRIu64, tstrerror(code), tableUid); - terrno = code; - return code; } } else { // Create one table group. - STableKeyInfo info = {.uid = tableUid, .groupId = 0}; - taosArrayPush(pListInfo->pTableList, &info); + taosArrayPush(res, &tableUid); } - if (pTagCond && taosArrayGetSize(pListInfo->pTableList) > 0) { - SColumnInfoData* pColInfoData = getColInfoResult(metaHandle, pListInfo->pTableList, pTagCond); + if (pTagCond) { + SColumnInfoData* pColInfoData = getColInfoResult(metaHandle, pListInfo->suid, res, pTagCond); if(terrno != TDB_CODE_SUCCESS){ colDataDestroy(pColInfoData); + taosArrayDestroy(res); return terrno; } @@ -532,6 +510,13 @@ int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, colDataDestroy(pColInfoData); } + for (int i = 0; i < taosArrayGetSize(res); i++) { + STableKeyInfo info = {.uid = *(uint64_t*)taosArrayGet(res, i), .groupId = 0}; + taosArrayPush(pListInfo->pTableList, &info); + } + + taosArrayDestroy(res); + pListInfo->pGroupList = taosArrayInit(4, POINTER_BYTES); if (pListInfo->pGroupList == NULL) { return TSDB_CODE_OUT_OF_MEMORY; diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index a211542de1..61f6474190 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -439,7 +439,7 @@ int32_t addTagPseudoColumnData(SReadHandle* pHandle, SExprInfo* pPseudoExpr, int } else { // these are tags STagVal tagVal = {0}; tagVal.cid = pExpr->base.pParam[0].pCol->colId; - const char* p = metaGetTableTagVal(&mr.me, pColInfoData->info.type, &tagVal); + const char* p = metaGetTableTagVal(mr.me.ctbEntry.pTags, pColInfoData->info.type, &tagVal); char* data = NULL; if (pColInfoData->info.type != TSDB_DATA_TYPE_JSON && p != NULL) { @@ -2569,7 +2569,7 @@ static SSDataBlock* doTagScan(SOperatorInfo* pOperator) { } else { // it is a tag value STagVal val = {0}; val.cid = pExprInfo[j].base.pParam[0].pCol->colId; - const char* p = metaGetTableTagVal(&mr.me, pDst->info.type, &val); + const char* p = metaGetTableTagVal(mr.me.ctbEntry.pTags, pDst->info.type, &val); char* data = NULL; if (pDst->info.type != TSDB_DATA_TYPE_JSON && p != NULL) { From 95ef68bbc1c8720c3badb1f587529a34adbd89bd Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Fri, 12 Aug 2022 11:39:19 +0800 Subject: [PATCH 07/19] opti:use suid+uid->tags index to optimize time cost --- source/libs/executor/src/executil.c | 2 +- source/util/src/tarray.c | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index c8d607185e..eb6222f15b 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -449,7 +449,7 @@ SColumnInfoData* getColInfoResult(void* metaHandle, uint64_t suid, SArray* uidLi qDebug("calculate tag block rows:%d, cost:%ld us", rows, st2-st1); end: - taosArrayDestroy(tags); + taosArrayDestroyP(tags, taosMemoryFree); taosHashCleanup(ctx.colHash); taosArrayDestroy(ctx.cInfoList); blockDataDestroy(pResBlock); diff --git a/source/util/src/tarray.c b/source/util/src/tarray.c index 3c4a0a20bd..454739348e 100644 --- a/source/util/src/tarray.c +++ b/source/util/src/tarray.c @@ -386,6 +386,7 @@ void* taosArrayDestroy(SArray* pArray) { } void taosArrayDestroyP(SArray* pArray, FDelete fp) { + if(!pArray) return; for (int32_t i = 0; i < pArray->size; i++) { fp(*(void**)TARRAY_GET_ELEM(pArray, i)); } From eec58b8ef0ee974dd41533d4000edb8a8ac32b5b Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Fri, 12 Aug 2022 13:53:24 +0800 Subject: [PATCH 08/19] opti:use suid+uid->tags index to optimize time cost --- source/common/src/tdatablock.c | 1 + source/dnode/vnode/src/meta/metaOpen.c | 2 +- source/libs/executor/src/executil.c | 13 ++++++++----- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/source/common/src/tdatablock.c b/source/common/src/tdatablock.c index 7692e02a37..196376e675 100644 --- a/source/common/src/tdatablock.c +++ b/source/common/src/tdatablock.c @@ -1425,6 +1425,7 @@ size_t blockDataGetCapacityInRow(const SSDataBlock* pBlock, size_t pageSize) { } void colDataDestroy(SColumnInfoData* pColData) { + if(!pColData) return; if (IS_VAR_DATA_TYPE(pColData->info.type)) { taosMemoryFreeClear(pColData->varmeta.offset); } else { diff --git a/source/dnode/vnode/src/meta/metaOpen.c b/source/dnode/vnode/src/meta/metaOpen.c index 941d2c6d72..89071d0881 100644 --- a/source/dnode/vnode/src/meta/metaOpen.c +++ b/source/dnode/vnode/src/meta/metaOpen.c @@ -87,7 +87,7 @@ int metaOpen(SVnode *pVnode, SMeta **ppMeta) { } // open pCtbIdx - ret = tdbTbOpen("ctb.idx", sizeof(SCtbIdxKey), 0, ctbIdxKeyCmpr, pMeta->pEnv, &pMeta->pCtbIdx); + ret = tdbTbOpen("ctb.idx", sizeof(SCtbIdxKey), -1, ctbIdxKeyCmpr, pMeta->pEnv, &pMeta->pCtbIdx); if (ret < 0) { metaError("vgId:%d, failed to open meta child table index since %s", TD_VID(pVnode), tstrerror(terrno)); goto _err; diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index eb6222f15b..81192cf2b7 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -385,7 +385,9 @@ SColumnInfoData* getColInfoResult(void* metaHandle, uint64_t suid, SArray* uidLi } int32_t rows = taosArrayGetSize(uidList); - + if(rows == 0){ + goto end; + } int64_t stt1 = taosGetTimestampUs(); qDebug("generate tag meta rows:%d, cost:%ld us", rows, stt1-stt); @@ -397,8 +399,7 @@ SColumnInfoData* getColInfoResult(void* metaHandle, uint64_t suid, SArray* uidLi int64_t st = taosGetTimestampUs(); for (int32_t i = 0; i < rows; i++) { - uint64_t* uid = taosArrayGet(uidList, i); - void* tag = taosArrayGet(tags, i); + void* tag = taosArrayGetP(tags, i); // int64_t stt = taosGetTimestampUs(); // int64_t stt1 = taosGetTimestampUs(); // qDebug("generate tag get meta rows:%d, cost:%ld ms", rows, stt1-stt); @@ -498,16 +499,18 @@ int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, } int32_t i = 0; - while (i < taosArrayGetSize(pListInfo->pTableList)) { + while (i < taosArrayGetSize(res) && pColInfoData) { void* var = POINTER_SHIFT(pColInfoData->pData, i * pColInfoData->info.bytes); if (*(bool*)var == false) { - taosArrayRemove(pListInfo->pTableList, i); + taosArrayRemove(res, i); continue; } i++; } colDataDestroy(pColInfoData); + }else{ + vnodeGetCtbIdList(pVnode, pScanNode->suid, res); } for (int i = 0; i < taosArrayGetSize(res); i++) { From 78e87a0aaec281f4efaae19aa06616ae2809d037 Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Fri, 12 Aug 2022 14:38:54 +0800 Subject: [PATCH 09/19] fix:memory leak --- source/libs/executor/src/executil.c | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index 81192cf2b7..42383887ab 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -343,7 +343,7 @@ static int32_t createResultData(SDataType* pType, int32_t numOfRows, SScalarPara return TSDB_CODE_SUCCESS; } -SColumnInfoData* getColInfoResult(void* metaHandle, uint64_t suid, SArray* uidList, SNode* pTagCond){ +static SColumnInfoData* getColInfoResult(void* metaHandle, uint64_t suid, SArray* uidList, SNode* pTagCond){ int32_t code = TSDB_CODE_SUCCESS; SArray* pBlockList = NULL; SSDataBlock* pResBlock = NULL; @@ -400,18 +400,11 @@ SColumnInfoData* getColInfoResult(void* metaHandle, uint64_t suid, SArray* uidLi int64_t st = taosGetTimestampUs(); for (int32_t i = 0; i < rows; i++) { void* tag = taosArrayGetP(tags, i); -// int64_t stt = taosGetTimestampUs(); -// int64_t stt1 = taosGetTimestampUs(); -// qDebug("generate tag get meta rows:%d, cost:%ld ms", rows, stt1-stt); -// SMetaReader *mr = taosArrayGet(arrAssist, i); for(int32_t j = 0; j < taosArrayGetSize(pResBlock->pDataBlock); j++){ SColumnInfoData* pColInfo = (SColumnInfoData*)taosArrayGet(pResBlock->pDataBlock, j); STagVal tagVal = {0}; tagVal.cid = pColInfo->info.colId; -// int64_t t1 = taosGetTimestampUs(); const char* p = metaGetTableTagVal(tag, pColInfo->info.type, &tagVal); -// int64_t t2 = taosGetTimestampUs(); -// qDebug("generate tag inner1 rows:%d, cost:%ld ms", rows, t2-t1); if (p == NULL){ colDataAppend(pColInfo, i, p, true); @@ -422,11 +415,7 @@ SColumnInfoData* getColInfoResult(void* metaHandle, uint64_t suid, SArray* uidLi } else { colDataAppend(pColInfo, i, p, false); } -// int64_t t3 = taosGetTimestampUs(); -// qDebug("generate tag inner2 rows:%d, cost:%ld ms", rows, t3-t2); } -// int64_t stt2 = taosGetTimestampUs(); -// qDebug("generate tag get block rows:%d, cost:%ld us", rows, stt2-stt1); } pResBlock->info.rows = rows; @@ -494,6 +483,7 @@ int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, SColumnInfoData* pColInfoData = getColInfoResult(metaHandle, pListInfo->suid, res, pTagCond); if(terrno != TDB_CODE_SUCCESS){ colDataDestroy(pColInfoData); + taosMemoryFreeClear(pColInfoData); taosArrayDestroy(res); return terrno; } @@ -509,6 +499,7 @@ int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, i++; } colDataDestroy(pColInfoData); + taosMemoryFreeClear(pColInfoData); }else{ vnodeGetCtbIdList(pVnode, pScanNode->suid, res); } From 4f97d72502bfba48732bbdbb3c532172ec4357cb Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Fri, 12 Aug 2022 15:02:34 +0800 Subject: [PATCH 10/19] fix:memory leak --- source/libs/executor/src/executil.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index 42383887ab..c157eded69 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -474,6 +474,8 @@ int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, int64_t stt1 = taosGetTimestampUs(); qDebug("generate table list, cost:%ld us", stt1-stt); + }else if(!pTagCond){ + vnodeGetCtbIdList(pVnode, pScanNode->suid, res); } } else { // Create one table group. taosArrayPush(res, &tableUid); @@ -500,8 +502,6 @@ int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, } colDataDestroy(pColInfoData); taosMemoryFreeClear(pColInfoData); - }else{ - vnodeGetCtbIdList(pVnode, pScanNode->suid, res); } for (int i = 0; i < taosArrayGetSize(res); i++) { From 37f6d1195c26e715e260cbbe5c9b598c10ce37b8 Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Fri, 12 Aug 2022 21:57:29 +0800 Subject: [PATCH 11/19] fix:error in get table list --- source/dnode/vnode/src/meta/metaTable.c | 1 + source/libs/executor/src/executil.c | 85 ++++++++++++++++++------- 2 files changed, 62 insertions(+), 24 deletions(-) diff --git a/source/dnode/vnode/src/meta/metaTable.c b/source/dnode/vnode/src/meta/metaTable.c index 4a92b5233a..a253381449 100644 --- a/source/dnode/vnode/src/meta/metaTable.c +++ b/source/dnode/vnode/src/meta/metaTable.c @@ -1065,6 +1065,7 @@ static int metaUpdateTtlIdx(SMeta *pMeta, const SMetaEntry *pME) { static int metaUpdateCtbIdx(SMeta *pMeta, const SMetaEntry *pME) { SCtbIdxKey ctbIdxKey = {.suid = pME->ctbEntry.suid, .uid = pME->uid}; + return tdbTbInsert(pMeta->pCtbIdx, &ctbIdxKey, sizeof(ctbIdxKey), pME->ctbEntry.pTags, ((STag*)(pME->ctbEntry.pTags))->len, &pMeta->txn); } diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index c157eded69..2a43751707 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -304,18 +304,37 @@ typedef struct tagFilterAssist{ SArray *cInfoList; }tagFilterAssist; -static EDealRes getColumn(SNode* pNode, void* pContext) { - if (QUERY_NODE_COLUMN == nodeType(pNode)) { - tagFilterAssist *pData = (tagFilterAssist *)pContext; - SColumnNode* pSColumnNode = (SColumnNode*)pNode; - void *data = taosHashGet(pData->colHash, &pSColumnNode->colId, sizeof(pSColumnNode->colId)); - if(!data){ - taosHashPut(pData->colHash, &pSColumnNode->colId, sizeof(pSColumnNode->colId), &pNode, sizeof(pNode)); - pSColumnNode->slotId = pData->index++; - SColumnInfo cInfo = {.colId = pSColumnNode->colId, .type = pSColumnNode->node.resType.type, .bytes = pSColumnNode->node.resType.bytes}; - taosArrayPush(pData->cInfoList, &cInfo); +static EDealRes getColumn(SNode** pNode, void* pContext) { + SColumnNode* pSColumnNode = NULL; + if (QUERY_NODE_COLUMN == nodeType((*pNode))) { + pSColumnNode = *(SColumnNode**)pNode; + }else if(QUERY_NODE_FUNCTION == nodeType((*pNode))){ + SFunctionNode* pFuncNode = *(SFunctionNode**)(pNode); + if (pFuncNode->funcType == FUNCTION_TYPE_TBNAME) { + pSColumnNode = (SColumnNode*)nodesMakeNode(QUERY_NODE_COLUMN); + if (NULL == pSColumnNode) { + return DEAL_RES_ERROR; + } + pSColumnNode->colId = -1; + pSColumnNode->colType = COLUMN_TYPE_TBNAME; + pSColumnNode->node.resType.type = TSDB_DATA_TYPE_VARCHAR; + pSColumnNode->node.resType.bytes = TSDB_TABLE_FNAME_LEN - 1 + VARSTR_HEADER_SIZE; + nodesDestroyNode(*pNode); + *pNode = (SNode*)pSColumnNode; } + }else{ + return DEAL_RES_CONTINUE; } + + tagFilterAssist *pData = (tagFilterAssist *)pContext; + void *data = taosHashGet(pData->colHash, &pSColumnNode->colId, sizeof(pSColumnNode->colId)); + if(!data){ + taosHashPut(pData->colHash, &pSColumnNode->colId, sizeof(pSColumnNode->colId), pNode, sizeof((*pNode))); + pSColumnNode->slotId = pData->index++; + SColumnInfo cInfo = {.colId = pSColumnNode->colId, .type = pSColumnNode->node.resType.type, .bytes = pSColumnNode->node.resType.bytes}; + taosArrayPush(pData->cInfoList, &cInfo); + } + return DEAL_RES_CONTINUE; } @@ -362,7 +381,8 @@ static SColumnInfoData* getColInfoResult(void* metaHandle, uint64_t suid, SArray terrno = TSDB_CODE_OUT_OF_MEMORY; goto end; } - nodesWalkExprPostOrder(pTagCond, getColumn, (void *)&ctx); + + nodesRewriteExprPostOrder(&pTagCond, getColumn, (void *)&ctx); pResBlock = createDataBlock(); if (pResBlock == NULL) { @@ -400,20 +420,30 @@ static SColumnInfoData* getColInfoResult(void* metaHandle, uint64_t suid, SArray int64_t st = taosGetTimestampUs(); for (int32_t i = 0; i < rows; i++) { void* tag = taosArrayGetP(tags, i); + int64_t* uid = taosArrayGet(uidList, i); for(int32_t j = 0; j < taosArrayGetSize(pResBlock->pDataBlock); j++){ SColumnInfoData* pColInfo = (SColumnInfoData*)taosArrayGet(pResBlock->pDataBlock, j); - STagVal tagVal = {0}; - tagVal.cid = pColInfo->info.colId; - const char* p = metaGetTableTagVal(tag, pColInfo->info.type, &tagVal); + if(pColInfo->info.colId == -1){ // tbname + char str[TSDB_TABLE_FNAME_LEN + VARSTR_HEADER_SIZE] = {0}; + metaGetTableNameByUid(metaHandle, *uid, str); + colDataAppend(pColInfo, i, str, false); + qDebug("tbnameget uid:%ld, tbname:%s", *uid, str+2); + }else{ + STagVal tagVal = {0}; + tagVal.cid = pColInfo->info.colId; + const char* p = metaGetTableTagVal(tag, pColInfo->info.type, &tagVal); - if (p == NULL){ - colDataAppend(pColInfo, i, p, true); - } else if (IS_VAR_DATA_TYPE(pColInfo->info.type)) { - char *tmp = (char*)(tagVal.pData - VARSTR_HEADER_SIZE); - varDataSetLen(tmp, tagVal.nData); - colDataAppend(pColInfo, i, tmp, p == NULL); - } else { - colDataAppend(pColInfo, i, p, false); + if (p == NULL){ + colDataAppend(pColInfo, i, p, true); + } else if (IS_VAR_DATA_TYPE(pColInfo->info.type)) { + char *tmp = taosMemoryMalloc(tagVal.nData + VARSTR_HEADER_SIZE); + varDataSetLen(tmp, tagVal.nData); + memcpy(tmp + VARSTR_HEADER_SIZE, tagVal.pData, tagVal.nData); + colDataAppend(pColInfo, i, tmp, false); + taosMemoryFree(tmp); + } else { + colDataAppend(pColInfo, i, (const char*)&tagVal.i64, false); + } } } } @@ -491,14 +521,20 @@ int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, } int32_t i = 0; - while (i < taosArrayGetSize(res) && pColInfoData) { - void* var = POINTER_SHIFT(pColInfoData->pData, i * pColInfoData->info.bytes); + int32_t j = 0; + int32_t len = taosArrayGetSize(res); + while (i < taosArrayGetSize(res) && j < len && pColInfoData) { + void* var = POINTER_SHIFT(pColInfoData->pData, j * pColInfoData->info.bytes); + int64_t* uid = taosArrayGet(res, i); + qDebug("tbnameget get uid:%ld, res:%d", *uid, *(bool*)var); if (*(bool*)var == false) { taosArrayRemove(res, i); + j++; continue; } i++; + j++; } colDataDestroy(pColInfoData); taosMemoryFreeClear(pColInfoData); @@ -507,6 +543,7 @@ int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, for (int i = 0; i < taosArrayGetSize(res); i++) { STableKeyInfo info = {.uid = *(uint64_t*)taosArrayGet(res, i), .groupId = 0}; taosArrayPush(pListInfo->pTableList, &info); + qDebug("tbnameget get uid:%ld", info.uid); } taosArrayDestroy(res); From 4eccd81e9420af0ce6c1812e531f3a518494c43e Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Tue, 16 Aug 2022 14:39:03 +0800 Subject: [PATCH 12/19] fix:error in tag filter optimization --- source/libs/executor/src/executil.c | 4 +++- tests/system-test/2-query/json_tag.py | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index 2a43751707..2e82ab3d89 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -433,8 +433,10 @@ static SColumnInfoData* getColInfoResult(void* metaHandle, uint64_t suid, SArray tagVal.cid = pColInfo->info.colId; const char* p = metaGetTableTagVal(tag, pColInfo->info.type, &tagVal); - if (p == NULL){ + if (p == NULL || (pColInfo->info.type == TSDB_DATA_TYPE_JSON && ((STag*)p)->nTag == 0)){ colDataAppend(pColInfo, i, p, true); + } else if (pColInfo->info.type == TSDB_DATA_TYPE_JSON) { + colDataAppend(pColInfo, i, p, false); } else if (IS_VAR_DATA_TYPE(pColInfo->info.type)) { char *tmp = taosMemoryMalloc(tagVal.nData + VARSTR_HEADER_SIZE); varDataSetLen(tmp, tagVal.nData); diff --git a/tests/system-test/2-query/json_tag.py b/tests/system-test/2-query/json_tag.py index d9d7ef2300..30179062f5 100644 --- a/tests/system-test/2-query/json_tag.py +++ b/tests/system-test/2-query/json_tag.py @@ -216,7 +216,7 @@ class TDTestCase: # test where with json tag tdSql.query("select * from jsons1_1 where jtag is not null") - tdSql.query("select * from jsons1 where jtag='{\"tag1\":11,\"tag2\":\"\"}'") + tdSql.error("select * from jsons1 where jtag='{\"tag1\":11,\"tag2\":\"\"}'") tdSql.error("select * from jsons1 where jtag->'tag1'={}") # test json error From c4d25ccb90874c49e9602189611157eddf99201e Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Tue, 16 Aug 2022 14:48:31 +0800 Subject: [PATCH 13/19] fix:remove log for time cost --- source/dnode/vnode/src/meta/metaQuery.c | 146 ++++++++++++------------ source/libs/executor/src/executil.c | 22 ++-- 2 files changed, 84 insertions(+), 84 deletions(-) diff --git a/source/dnode/vnode/src/meta/metaQuery.c b/source/dnode/vnode/src/meta/metaQuery.c index df22913a0d..adf9088cae 100644 --- a/source/dnode/vnode/src/meta/metaQuery.c +++ b/source/dnode/vnode/src/meta/metaQuery.c @@ -53,79 +53,79 @@ _err: return -1; } -int metaGetTableEntryByUidTest(void* meta, SArray *uidList) { - - SArray* readerList = taosArrayInit(taosArrayGetSize(uidList), sizeof(SMetaReader)); - SArray* uidVersion = taosArrayInit(taosArrayGetSize(uidList), sizeof(STbDbKey)); - SMeta *pMeta = meta; - int64_t version; - SHashObj *uHash = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), false, HASH_NO_LOCK); - - int64_t stt1 = taosGetTimestampUs(); - for(int i = 0; i < taosArrayGetSize(uidList); i++) { - void* ppVal = NULL; - int vlen = 0; - uint64_t * uid = taosArrayGet(uidList, i); - // query uid.idx - if (tdbTbGet(pMeta->pUidIdx, uid, sizeof(*uid), &ppVal, &vlen) < 0) { - continue; - } - version = *(int64_t *)ppVal; - - STbDbKey tbDbKey = {.version = version, .uid = *uid}; - taosArrayPush(uidVersion, &tbDbKey); - taosHashPut(uHash, uid, sizeof(int64_t), ppVal, sizeof(int64_t)); - } - int64_t stt2 = taosGetTimestampUs(); - qDebug("metaGetTableEntryByUidTest1 rows:%d, cost:%ld us", taosArrayGetSize(uidList), stt2-stt1); - - TBC *pCur = NULL; - tdbTbcOpen(pMeta->pTbDb, &pCur, NULL); - tdbTbcMoveToFirst(pCur); - void *pKey = NULL; - int kLen = 0; - - while(1){ - SMetaReader pReader = {0}; - int32_t ret = tdbTbcNext(pCur, &pKey, &kLen, &pReader.pBuf, &pReader.szBuf); - if (ret < 0) break; - STbDbKey *tmp = (STbDbKey*)pKey; - int64_t *ver = (int64_t*)taosHashGet(uHash, &tmp->uid, sizeof(int64_t)); - if(ver == NULL || *ver != tmp->version) continue; - taosArrayPush(readerList, &pReader); - } - tdbTbcClose(pCur); - - taosArrayClear(readerList); - int64_t stt3 = taosGetTimestampUs(); - qDebug("metaGetTableEntryByUidTest2 rows:%d, cost:%ld us", taosArrayGetSize(uidList), stt3-stt2); - for(int i = 0; i < taosArrayGetSize(uidVersion); i++) { - SMetaReader pReader = {0}; - - STbDbKey *tbDbKey = taosArrayGet(uidVersion, i); - // query table.db - if (tdbTbGet(pMeta->pTbDb, tbDbKey, sizeof(STbDbKey), &pReader.pBuf, &pReader.szBuf) < 0) { - continue; - } - taosArrayPush(readerList, &pReader); - } - int64_t stt4 = taosGetTimestampUs(); - qDebug("metaGetTableEntryByUidTest3 rows:%d, cost:%ld us", taosArrayGetSize(uidList), stt4-stt3); - - for(int i = 0; i < taosArrayGetSize(readerList); i++){ - SMetaReader* pReader = taosArrayGet(readerList, i); - metaReaderInit(pReader, meta, 0); - // decode the entry - tDecoderInit(&pReader->coder, pReader->pBuf, pReader->szBuf); - - if (metaDecodeEntry(&pReader->coder, &pReader->me) < 0) { - } - metaReaderClear(pReader); - } - int64_t stt5 = taosGetTimestampUs(); - qDebug("metaGetTableEntryByUidTest4 rows:%d, cost:%ld us", taosArrayGetSize(readerList), stt5-stt4); - return 0; -} +//int metaGetTableEntryByUidTest(void* meta, SArray *uidList) { +// +// SArray* readerList = taosArrayInit(taosArrayGetSize(uidList), sizeof(SMetaReader)); +// SArray* uidVersion = taosArrayInit(taosArrayGetSize(uidList), sizeof(STbDbKey)); +// SMeta *pMeta = meta; +// int64_t version; +// SHashObj *uHash = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), false, HASH_NO_LOCK); +// +// int64_t stt1 = taosGetTimestampUs(); +// for(int i = 0; i < taosArrayGetSize(uidList); i++) { +// void* ppVal = NULL; +// int vlen = 0; +// uint64_t * uid = taosArrayGet(uidList, i); +// // query uid.idx +// if (tdbTbGet(pMeta->pUidIdx, uid, sizeof(*uid), &ppVal, &vlen) < 0) { +// continue; +// } +// version = *(int64_t *)ppVal; +// +// STbDbKey tbDbKey = {.version = version, .uid = *uid}; +// taosArrayPush(uidVersion, &tbDbKey); +// taosHashPut(uHash, uid, sizeof(int64_t), ppVal, sizeof(int64_t)); +// } +// int64_t stt2 = taosGetTimestampUs(); +// qDebug("metaGetTableEntryByUidTest1 rows:%d, cost:%ld us", taosArrayGetSize(uidList), stt2-stt1); +// +// TBC *pCur = NULL; +// tdbTbcOpen(pMeta->pTbDb, &pCur, NULL); +// tdbTbcMoveToFirst(pCur); +// void *pKey = NULL; +// int kLen = 0; +// +// while(1){ +// SMetaReader pReader = {0}; +// int32_t ret = tdbTbcNext(pCur, &pKey, &kLen, &pReader.pBuf, &pReader.szBuf); +// if (ret < 0) break; +// STbDbKey *tmp = (STbDbKey*)pKey; +// int64_t *ver = (int64_t*)taosHashGet(uHash, &tmp->uid, sizeof(int64_t)); +// if(ver == NULL || *ver != tmp->version) continue; +// taosArrayPush(readerList, &pReader); +// } +// tdbTbcClose(pCur); +// +// taosArrayClear(readerList); +// int64_t stt3 = taosGetTimestampUs(); +// qDebug("metaGetTableEntryByUidTest2 rows:%d, cost:%ld us", taosArrayGetSize(uidList), stt3-stt2); +// for(int i = 0; i < taosArrayGetSize(uidVersion); i++) { +// SMetaReader pReader = {0}; +// +// STbDbKey *tbDbKey = taosArrayGet(uidVersion, i); +// // query table.db +// if (tdbTbGet(pMeta->pTbDb, tbDbKey, sizeof(STbDbKey), &pReader.pBuf, &pReader.szBuf) < 0) { +// continue; +// } +// taosArrayPush(readerList, &pReader); +// } +// int64_t stt4 = taosGetTimestampUs(); +// qDebug("metaGetTableEntryByUidTest3 rows:%d, cost:%ld us", taosArrayGetSize(uidList), stt4-stt3); +// +// for(int i = 0; i < taosArrayGetSize(readerList); i++){ +// SMetaReader* pReader = taosArrayGet(readerList, i); +// metaReaderInit(pReader, meta, 0); +// // decode the entry +// tDecoderInit(&pReader->coder, pReader->pBuf, pReader->szBuf); +// +// if (metaDecodeEntry(&pReader->coder, &pReader->me) < 0) { +// } +// metaReaderClear(pReader); +// } +// int64_t stt5 = taosGetTimestampUs(); +// qDebug("metaGetTableEntryByUidTest4 rows:%d, cost:%ld us", taosArrayGetSize(readerList), stt5-stt4); +// return 0; +//} int metaGetTableEntryByUid(SMetaReader *pReader, tb_uid_t uid) { SMeta *pMeta = pReader->pMeta; diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index 2e82ab3d89..449f357685 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -396,7 +396,7 @@ static SColumnInfoData* getColInfoResult(void* metaHandle, uint64_t suid, SArray blockDataAppendColInfo(pResBlock, &colInfo); } - int64_t stt = taosGetTimestampUs(); +// int64_t stt = taosGetTimestampUs(); tags = taosArrayInit(8, POINTER_BYTES); code = metaGetTableTags(metaHandle, suid, uidList, tags); if (code != TSDB_CODE_SUCCESS) { @@ -408,8 +408,8 @@ static SColumnInfoData* getColInfoResult(void* metaHandle, uint64_t suid, SArray if(rows == 0){ goto end; } - int64_t stt1 = taosGetTimestampUs(); - qDebug("generate tag meta rows:%d, cost:%ld us", rows, stt1-stt); +// int64_t stt1 = taosGetTimestampUs(); +// qDebug("generate tag meta rows:%d, cost:%ld us", rows, stt1-stt); code = blockDataEnsureCapacity(pResBlock, rows); if (code != TSDB_CODE_SUCCESS) { @@ -417,7 +417,7 @@ static SColumnInfoData* getColInfoResult(void* metaHandle, uint64_t suid, SArray goto end; } - int64_t st = taosGetTimestampUs(); +// int64_t st = taosGetTimestampUs(); for (int32_t i = 0; i < rows; i++) { void* tag = taosArrayGetP(tags, i); int64_t* uid = taosArrayGet(uidList, i); @@ -451,8 +451,8 @@ static SColumnInfoData* getColInfoResult(void* metaHandle, uint64_t suid, SArray } pResBlock->info.rows = rows; - int64_t st1 = taosGetTimestampUs(); - qDebug("generate tag block rows:%d, cost:%ld us", rows, st1-st); +// int64_t st1 = taosGetTimestampUs(); +// qDebug("generate tag block rows:%d, cost:%ld us", rows, st1-st); pBlockList = taosArrayInit(2, POINTER_BYTES); taosArrayPush(pBlockList, &pResBlock); @@ -467,8 +467,8 @@ static SColumnInfoData* getColInfoResult(void* metaHandle, uint64_t suid, SArray if(code != TSDB_CODE_SUCCESS){ terrno = code; } - int64_t st2 = taosGetTimestampUs(); - qDebug("calculate tag block rows:%d, cost:%ld us", rows, st2-st1); +// int64_t st2 = taosGetTimestampUs(); +// qDebug("calculate tag block rows:%d, cost:%ld us", rows, st2-st1); end: taosArrayDestroyP(tags, taosMemoryFree); @@ -497,15 +497,15 @@ int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, SIndexMetaArg metaArg = { .metaEx = metaHandle, .idx = tsdbGetIdx(metaHandle), .ivtIdx = tsdbGetIvtIdx(metaHandle), .suid = tableUid}; - int64_t stt = taosGetTimestampUs(); +// int64_t stt = taosGetTimestampUs(); SIdxFltStatus status = SFLT_NOT_INDEX; code = doFilterTag(pTagIndexCond, &metaArg, res, &status); if (code != 0 || status == SFLT_NOT_INDEX) { qError("failed to get tableIds from index, reason:%s, suid:%" PRIu64, tstrerror(code), tableUid); } - int64_t stt1 = taosGetTimestampUs(); - qDebug("generate table list, cost:%ld us", stt1-stt); +// int64_t stt1 = taosGetTimestampUs(); +// qDebug("generate table list, cost:%ld us", stt1-stt); }else if(!pTagCond){ vnodeGetCtbIdList(pVnode, pScanNode->suid, res); } From 2bf2d5e6e1226252a0aaef69b5d4af1b1e692539 Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Wed, 17 Aug 2022 11:39:55 +0800 Subject: [PATCH 14/19] fix:error in get table list by tag filter --- source/dnode/vnode/src/meta/metaQuery.c | 20 +- source/libs/executor/src/executil.c | 29 ++- source/libs/scalar/src/sclvector.c | 5 +- tests/system-test/2-query/json_tag.py | 295 ++++++++++++++++++++++++ 4 files changed, 336 insertions(+), 13 deletions(-) diff --git a/source/dnode/vnode/src/meta/metaQuery.c b/source/dnode/vnode/src/meta/metaQuery.c index b302897907..9f2cf409be 100644 --- a/source/dnode/vnode/src/meta/metaQuery.c +++ b/source/dnode/vnode/src/meta/metaQuery.c @@ -965,10 +965,11 @@ END: int32_t metaGetTableTags(SMeta *pMeta, uint64_t suid, SArray *uidList, SArray *tags) { SMCtbCursor *pCur = metaOpenCtbCursor(pMeta, suid); - SHashObj *uHash = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), false, HASH_NO_LOCK); - size_t len = taosArrayGetSize(uidList); - if (len > 0) { - for (int i = 0; i < len; i++) { + SHashObj *uHash = NULL; + size_t len = taosArrayGetSize(uidList); // len > 0 means there already have uids + if(len > 0){ + uHash = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), true, HASH_NO_LOCK); + for(int i = 0; i < len; i++){ int64_t *uid = taosArrayGet(uidList, i); taosHashPut(uHash, uid, sizeof(int64_t), &i, sizeof(i)); } @@ -985,13 +986,22 @@ int32_t metaGetTableTags(SMeta *pMeta, uint64_t suid, SArray *uidList, SArray *t void *tag = taosMemoryMalloc(pCur->vLen); memcpy(tag, pCur->pVal, pCur->vLen); - taosArrayPush(tags, &tag); if (len == 0) { taosArrayPush(uidList, &id); + taosArrayPush(tags, &tag); + }else{ + taosHashPut(uHash, &id, sizeof(int64_t), &tag, POINTER_BYTES); } } + for(int i = 0; i < len; i++){ + int64_t *uid = taosArrayGet(uidList, i); + void **tag = taosHashGet(uHash, uid, POINTER_BYTES); + taosArrayPush(tags, tag); + } + + taosHashCleanup(uHash); metaCloseCtbCursor(pCur); return TSDB_CODE_SUCCESS; diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index 449f357685..f8164e0947 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -321,6 +321,8 @@ static EDealRes getColumn(SNode** pNode, void* pContext) { pSColumnNode->node.resType.bytes = TSDB_TABLE_FNAME_LEN - 1 + VARSTR_HEADER_SIZE; nodesDestroyNode(*pNode); *pNode = (SNode*)pSColumnNode; + }else{ + return DEAL_RES_CONTINUE; } }else{ return DEAL_RES_CONTINUE; @@ -423,11 +425,16 @@ static SColumnInfoData* getColInfoResult(void* metaHandle, uint64_t suid, SArray int64_t* uid = taosArrayGet(uidList, i); for(int32_t j = 0; j < taosArrayGetSize(pResBlock->pDataBlock); j++){ SColumnInfoData* pColInfo = (SColumnInfoData*)taosArrayGet(pResBlock->pDataBlock, j); + + char str[TSDB_TABLE_FNAME_LEN + VARSTR_HEADER_SIZE] = {0}; + metaGetTableNameByUid(metaHandle, *uid, str); + colDataAppend(pColInfo, i, str, false); + if(pColInfo->info.colId == -1){ // tbname - char str[TSDB_TABLE_FNAME_LEN + VARSTR_HEADER_SIZE] = {0}; - metaGetTableNameByUid(metaHandle, *uid, str); - colDataAppend(pColInfo, i, str, false); - qDebug("tbnameget uid:%ld, tbname:%s", *uid, str+2); +// char str[TSDB_TABLE_FNAME_LEN + VARSTR_HEADER_SIZE] = {0}; +// metaGetTableNameByUid(metaHandle, *uid, str); +// colDataAppend(pColInfo, i, str, false); +// qDebug("tagfilter uid:%ld, tbname:%s", *uid, str+2); }else{ STagVal tagVal = {0}; tagVal.cid = pColInfo->info.colId; @@ -445,6 +452,16 @@ static SColumnInfoData* getColInfoResult(void* metaHandle, uint64_t suid, SArray taosMemoryFree(tmp); } else { colDataAppend(pColInfo, i, (const char*)&tagVal.i64, false); + + if(pColInfo->info.type == TSDB_DATA_TYPE_TINYINT){ + int8_t tint = *(int8_t*)(&tagVal.i64); + qDebug("tagfilter uid:%ld, tbname:%s, tint:%d", *uid, str+2, tint); + + }else if(pColInfo->info.type == TSDB_DATA_TYPE_INT){ + int nint = *(int*)(&tagVal.i64); + qDebug("tagfilter uid:%ld, tbname:%s nint:+%d", *uid, str+2, nint); + + } } } } @@ -529,7 +546,7 @@ int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, void* var = POINTER_SHIFT(pColInfoData->pData, j * pColInfoData->info.bytes); int64_t* uid = taosArrayGet(res, i); - qDebug("tbnameget get uid:%ld, res:%d", *uid, *(bool*)var); + qDebug("tagfilter get uid:%ld, res:%d", *uid, *(bool*)var); if (*(bool*)var == false) { taosArrayRemove(res, i); j++; @@ -545,7 +562,7 @@ int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, for (int i = 0; i < taosArrayGetSize(res); i++) { STableKeyInfo info = {.uid = *(uint64_t*)taosArrayGet(res, i), .groupId = 0}; taosArrayPush(pListInfo->pTableList, &info); - qDebug("tbnameget get uid:%ld", info.uid); + qDebug("tagfilter get uid:%ld", info.uid); } taosArrayDestroy(res); diff --git a/source/libs/scalar/src/sclvector.c b/source/libs/scalar/src/sclvector.c index aaa70ef5ae..4fc0005e4d 100644 --- a/source/libs/scalar/src/sclvector.c +++ b/source/libs/scalar/src/sclvector.c @@ -1672,8 +1672,9 @@ void vectorBitOr(SScalarParam* pLeft, SScalarParam* pRight, SScalarParam *pOut, colDataAppendInt8(pOut->columnData, i, (int8_t*)&result);\ }else{\ bool res = filterDoCompare(fp, optr, pLeftData, pRightData);\ - colDataAppendInt8(pOut->columnData, i, (int8_t*)&res);\ - }\ + colDataAppendInt8(pOut->columnData, i, (int8_t*)&res); \ + if(GET_PARAM_TYPE(pLeft) == TSDB_DATA_TYPE_BIGINT){qDebug("tagfilter left:%d, right:%d, res:%d", *(int64_t*)(pLeftData), *(int64_t*)(pRightData), res);} \ + } \ if(freeLeft) taosMemoryFreeClear(pLeftData);\ if(freeRight) taosMemoryFreeClear(pRightData);\ } diff --git a/tests/system-test/2-query/json_tag.py b/tests/system-test/2-query/json_tag.py index 856d764747..9b4379c011 100644 --- a/tests/system-test/2-query/json_tag.py +++ b/tests/system-test/2-query/json_tag.py @@ -698,3 +698,298 @@ class TDTestCase: tdCases.addWindows(__file__, TDTestCase()) tdCases.addLinux(__file__, TDTestCase()) + +08/16 17:52:17.220901 00059267 QRY tagfilter uid:4871209028224417813, tbname:t3 nint:+2 +08/16 17:52:17.220973 00059267 QRY tagfilter uid:4871209028224417813, tbname:t3, tint:3 +08/16 17:52:17.220992 00059267 QRY tagfilter uid:4871209028228349987, tbname:t10 nint:+3 +08/16 17:52:17.221014 00059267 QRY tagfilter uid:4871209028228349987, tbname:t10, tint:4 +08/16 17:52:17.221042 00059267 QRY tagfilter uid:4871209028232282161, tbname:t17 nint:+4 +08/16 17:52:17.221057 00059267 QRY tagfilter uid:4871209028232282161, tbname:t17, tint:5 +08/16 17:52:17.221580 00059267 QRY tagfilter uid:4871209028236083263, tbname:t24 nint:+5 +08/16 17:52:17.221627 00059267 QRY tagfilter uid:4871209028236083263, tbname:t24, tint:6 +08/16 17:52:17.221641 00059267 QRY tagfilter uid:4871209028240015437, tbname:t31 nint:+2 +08/16 17:52:17.221654 00059267 QRY tagfilter uid:4871209028240015437, tbname:t31, tint:3 +08/16 17:52:17.221974 00059267 QRY tagfilter uid:4871209028244013147, tbname:t38 nint:+3 +08/16 17:52:17.222022 00059267 QRY tagfilter uid:4871209028244013147, tbname:t38, tint:4 +08/16 17:52:17.222040 00059267 QRY tagfilter uid:4871209028247879785, tbname:t45 nint:+4 +08/16 17:52:17.222054 00059267 QRY tagfilter uid:4871209028247879785, tbname:t45, tint:5 +08/16 17:52:17.222068 00059267 QRY tagfilter uid:4871209028251877495, tbname:t52 nint:+5 +08/16 17:52:17.222081 00059267 QRY tagfilter uid:4871209028251877495, tbname:t52, tint:6 +08/16 17:52:17.222167 00059267 QRY tagfilter uid:4871209028255744133, tbname:t59 nint:+2 +08/16 17:52:17.222192 00059267 QRY tagfilter uid:4871209028255744133, tbname:t59, tint:3 +08/16 17:52:17.222210 00059267 QRY tagfilter uid:4871209028259741843, tbname:t66 nint:+3 +08/16 17:52:17.222490 00059267 QRY tagfilter uid:4871209028259741843, tbname:t66, tint:4 +08/16 17:52:17.222522 00059267 QRY tagfilter uid:4871209028263805089, tbname:t73 nint:+4 +08/16 17:52:17.222551 00059267 QRY tagfilter uid:4871209028263805089, tbname:t73, tint:5 +08/16 17:52:17.222809 00059267 QRY tagfilter uid:4871209028267802799, tbname:t80 nint:+5 +08/16 17:52:17.222855 00059267 QRY tagfilter uid:4871209028267802799, tbname:t80, tint:6 +08/16 17:52:17.222874 00059267 QRY tagfilter uid:4871209028272062653, tbname:t87 nint:+2 +08/16 17:52:17.222934 00059267 QRY tagfilter uid:4871209028272062653, tbname:t87, tint:3 +08/16 17:52:17.222976 00059267 QRY tagfilter uid:4871209028276322508, tbname:t94 nint:+3 +08/16 17:52:17.222995 00059267 QRY tagfilter uid:4871209028276322508, tbname:t94, tint:4 +08/16 17:52:17.223013 00059267 QRY tagfilter uid:4871209028224942103, tbname:t4 nint:+4 +08/16 17:52:17.223029 00059267 QRY tagfilter uid:4871209028224942103, tbname:t4, tint:5 +08/16 17:52:17.223047 00059267 QRY tagfilter uid:4871209028228874277, tbname:t11 nint:+5 +08/16 17:52:17.223064 00059267 QRY tagfilter uid:4871209028228874277, tbname:t11, tint:6 +08/16 17:52:17.223079 00059267 QRY tagfilter uid:4871209028232871987, tbname:t18 nint:+2 +08/16 17:52:17.223093 00059267 QRY tagfilter uid:4871209028232871987, tbname:t18, tint:3 +08/16 17:52:17.223109 00059267 QRY tagfilter uid:4871209028236607553, tbname:t25 nint:+3 +08/16 17:52:17.223125 00059267 QRY tagfilter uid:4871209028236607553, tbname:t25, tint:4 +08/16 17:52:17.223141 00059267 QRY tagfilter uid:4871209028240605263, tbname:t32 nint:+4 +08/16 17:52:17.223156 00059267 QRY tagfilter uid:4871209028240605263, tbname:t32, tint:5 +08/16 17:52:17.223172 00059267 QRY tagfilter uid:4871209028244602973, tbname:t39 nint:+5 +08/16 17:52:17.223188 00059267 QRY tagfilter uid:4871209028244602973, tbname:t39, tint:6 +08/16 17:52:17.223204 00059267 QRY tagfilter uid:4871209028248404075, tbname:t46 nint:+2 +08/16 17:52:17.223219 00059267 QRY tagfilter uid:4871209028248404075, tbname:t46, tint:3 +08/16 17:52:17.223564 00059267 QRY tagfilter uid:4871209028252401785, tbname:t53 nint:+3 +08/16 17:52:17.223598 00059267 QRY tagfilter uid:4871209028252401785, tbname:t53, tint:4 +08/16 17:52:17.223614 00059267 QRY tagfilter uid:4871209028256333959, tbname:t60 nint:+4 +08/16 17:52:17.223638 00059267 QRY tagfilter uid:4871209028256333959, tbname:t60, tint:5 +08/16 17:52:17.223771 00059267 QRY tagfilter uid:4871209028260397205, tbname:t67 nint:+5 +08/16 17:52:17.223813 00059267 QRY tagfilter uid:4871209028260397205, tbname:t67, tint:6 +08/16 17:52:17.223828 00059267 QRY tagfilter uid:4871209028264525987, tbname:t74 nint:+2 +08/16 17:52:17.223858 00059267 QRY tagfilter uid:4871209028264525987, tbname:t74, tint:3 +08/16 17:52:17.223895 00059267 QRY tagfilter uid:4871209028268392625, tbname:t81 nint:+3 +08/16 17:52:17.223917 00059267 QRY tagfilter uid:4871209028268392625, tbname:t81, tint:4 +08/16 17:52:17.223953 00059267 QRY tagfilter uid:4871209028272718015, tbname:t88 nint:+4 +08/16 17:52:17.223977 00059267 QRY tagfilter uid:4871209028272718015, tbname:t88, tint:5 +08/16 17:52:17.223991 00059267 QRY tagfilter uid:4871209028276977870, tbname:t95 nint:+5 +08/16 17:52:17.224003 00059267 QRY tagfilter uid:4871209028276977870, tbname:t95, tint:6 +08/16 17:52:17.224018 00059267 QRY tagfilter uid:4871209028225466393, tbname:t5 nint:+2 +08/16 17:52:17.224030 00059267 QRY tagfilter uid:4871209028225466393, tbname:t5, tint:3 +08/16 17:52:17.224044 00059267 QRY tagfilter uid:4871209028229398567, tbname:t12 nint:+3 +08/16 17:52:17.224056 00059267 QRY tagfilter uid:4871209028229398567, tbname:t12, tint:4 +08/16 17:52:17.224071 00059267 QRY tagfilter uid:4871209028233396277, tbname:t19 nint:+4 +08/16 17:52:17.224084 00059267 QRY tagfilter uid:4871209028233396277, tbname:t19, tint:5 +08/16 17:52:17.224097 00059267 QRY tagfilter uid:4871209028237197379, tbname:t26 nint:+5 +08/16 17:52:17.224110 00059267 QRY tagfilter uid:4871209028237197379, tbname:t26, tint:6 +08/16 17:52:17.224125 00059267 QRY tagfilter uid:4871209028241195089, tbname:t33 nint:+2 +08/16 17:52:17.224139 00059267 QRY tagfilter uid:4871209028241195089, tbname:t33, tint:3 +08/16 17:52:17.224188 00059267 QRY tagfilter uid:4871209028245127263, tbname:t40 nint:+3 +08/16 17:52:17.224209 00059267 QRY tagfilter uid:4871209028245127263, tbname:t40, tint:4 +08/16 17:52:17.224459 00059267 QRY tagfilter uid:4871209028248993901, tbname:t47 nint:+4 +08/16 17:52:17.224479 00059267 QRY tagfilter uid:4871209028248993901, tbname:t47, tint:5 +08/16 17:52:17.224494 00059267 QRY tagfilter uid:4871209028252926075, tbname:t54 nint:+5 +08/16 17:52:17.224507 00059267 QRY tagfilter uid:4871209028252926075, tbname:t54, tint:6 +08/16 17:52:17.224522 00059267 QRY tagfilter uid:4871209028256858249, tbname:t61 nint:+2 +08/16 17:52:17.224535 00059267 QRY tagfilter uid:4871209028256858249, tbname:t61, tint:3 +08/16 17:52:17.224549 00059267 QRY tagfilter uid:4871209028260987031, tbname:t68 nint:+3 +08/16 17:52:17.224564 00059267 QRY tagfilter uid:4871209028260987031, tbname:t68, tint:4 +08/16 17:52:17.224664 00059267 QRY tagfilter uid:4871209028265050277, tbname:t75 nint:+4 +08/16 17:52:17.224717 00059267 QRY tagfilter uid:4871209028265050277, tbname:t75, tint:5 +08/16 17:52:17.224731 00059267 QRY tagfilter uid:4871209028269047987, tbname:t82 nint:+5 +08/16 17:52:17.224769 00059267 QRY tagfilter uid:4871209028269047987, tbname:t82, tint:6 +08/16 17:52:17.224783 00059267 QRY tagfilter uid:4871209028273307841, tbname:t89 nint:+2 +08/16 17:52:17.224923 00059267 QRY tagfilter uid:4871209028273307841, tbname:t89, tint:3 +08/16 17:52:17.224990 00059267 QRY tagfilter uid:4871209028277502160, tbname:t96 nint:+3 +08/16 17:52:17.225006 00059267 QRY tagfilter uid:4871209028277502160, tbname:t96, tint:4 +08/16 17:52:17.225018 00059267 QRY tagfilter uid:4871209028225990683, tbname:t6 nint:+4 +08/16 17:52:17.225029 00059267 QRY tagfilter uid:4871209028225990683, tbname:t6, tint:5 +08/16 17:52:17.225039 00059267 QRY tagfilter uid:4871209028229922857, tbname:t13 nint:+5 +08/16 17:52:17.225053 00059267 QRY tagfilter uid:4871209028229922857, tbname:t13, tint:6 +08/16 17:52:17.225072 00059267 QRY tagfilter uid:4871209028233986103, tbname:t20 nint:+2 +08/16 17:52:17.225082 00059267 QRY tagfilter uid:4871209028233986103, tbname:t20, tint:3 +08/16 17:52:17.225093 00059267 QRY tagfilter uid:4871209028237721669, tbname:t27 nint:+3 +08/16 17:52:17.225103 00059267 QRY tagfilter uid:4871209028237721669, tbname:t27, tint:4 +08/16 17:52:17.225113 00059267 QRY tagfilter uid:4871209028241784915, tbname:t34 nint:+4 +08/16 17:52:17.225368 00059267 QRY tagfilter uid:4871209028241784915, tbname:t34, tint:5 +08/16 17:52:17.225409 00059267 QRY tagfilter uid:4871209028245717089, tbname:t41 nint:+5 +08/16 17:52:17.225437 00059267 QRY tagfilter uid:4871209028245717089, tbname:t41, tint:6 +08/16 17:52:17.225462 00059267 QRY tagfilter uid:4871209028249518191, tbname:t48 nint:+2 +08/16 17:52:17.225475 00059267 QRY tagfilter uid:4871209028249518191, tbname:t48, tint:3 +08/16 17:52:17.225486 00059267 QRY tagfilter uid:4871209028253450365, tbname:t55 nint:+3 +08/16 17:52:17.225496 00059267 QRY tagfilter uid:4871209028253450365, tbname:t55, tint:4 +08/16 17:52:17.225507 00059267 QRY tagfilter uid:4871209028257382539, tbname:t62 nint:+4 +08/16 17:52:17.225532 00059267 QRY tagfilter uid:4871209028257382539, tbname:t62, tint:5 +08/16 17:52:17.225544 00059267 QRY tagfilter uid:4871209028261511321, tbname:t69 nint:+5 +08/16 17:52:17.225554 00059267 QRY tagfilter uid:4871209028261511321, tbname:t69, tint:6 +08/16 17:52:17.225564 00059267 QRY tagfilter uid:4871209028265574567, tbname:t76 nint:+2 +08/16 17:52:17.225575 00059267 QRY tagfilter uid:4871209028265574567, tbname:t76, tint:3 +08/16 17:52:17.225585 00059267 QRY tagfilter uid:4871209028269637813, tbname:t83 nint:+3 +08/16 17:52:17.225615 00059267 QRY tagfilter uid:4871209028269637813, tbname:t83, tint:4 +08/16 17:52:17.225640 00059267 QRY tagfilter uid:4871209028273963203, tbname:t90 nint:+4 +08/16 17:52:17.225670 00059267 QRY tagfilter uid:4871209028273963203, tbname:t90, tint:5 +08/16 17:52:17.225698 00059267 QRY tagfilter uid:4871209028278026450, tbname:t97 nint:+5 +08/16 17:52:17.225709 00059267 QRY tagfilter uid:4871209028278026450, tbname:t97, tint:6 +08/16 17:52:17.226570 00059267 QRY tagfilter left:2, right:3, res:1 +08/16 17:52:17.226623 00059267 QRY tagfilter left:3, right:3, res:0 +08/16 17:52:17.226642 00059267 QRY tagfilter left:4, right:3, res:0 +08/16 17:52:17.226684 00059267 QRY tagfilter left:5, right:3, res:0 +08/16 17:52:17.226733 00059267 QRY tagfilter left:2, right:3, res:1 +08/16 17:52:17.226765 00059267 QRY tagfilter left:3, right:3, res:0 +08/16 17:52:17.226773 00059267 QRY tagfilter left:4, right:3, res:0 +08/16 17:52:17.226780 00059267 QRY tagfilter left:5, right:3, res:0 +08/16 17:52:17.226787 00059267 QRY tagfilter left:2, right:3, res:1 +08/16 17:52:17.226793 00059267 QRY tagfilter left:3, right:3, res:0 +08/16 17:52:17.226801 00059267 QRY tagfilter left:4, right:3, res:0 +08/16 17:52:17.226808 00059267 QRY tagfilter left:5, right:3, res:0 +08/16 17:52:17.226815 00059267 QRY tagfilter left:2, right:3, res:1 +08/16 17:52:17.226821 00059267 QRY tagfilter left:3, right:3, res:0 +08/16 17:52:17.226828 00059267 QRY tagfilter left:4, right:3, res:0 +08/16 17:52:17.226834 00059267 QRY tagfilter left:5, right:3, res:0 +08/16 17:52:17.226840 00059267 QRY tagfilter left:2, right:3, res:1 +08/16 17:52:17.226847 00059267 QRY tagfilter left:3, right:3, res:0 +08/16 17:52:17.226854 00059267 QRY tagfilter left:4, right:3, res:0 +08/16 17:52:17.226860 00059267 QRY tagfilter left:5, right:3, res:0 +08/16 17:52:17.226867 00059267 QRY tagfilter left:2, right:3, res:1 +08/16 17:52:17.226873 00059267 QRY tagfilter left:3, right:3, res:0 +08/16 17:52:17.226880 00059267 QRY tagfilter left:4, right:3, res:0 +08/16 17:52:17.226886 00059267 QRY tagfilter left:5, right:3, res:0 +08/16 17:52:17.226893 00059267 QRY tagfilter left:2, right:3, res:1 +08/16 17:52:17.226900 00059267 QRY tagfilter left:3, right:3, res:0 +08/16 17:52:17.226907 00059267 QRY tagfilter left:4, right:3, res:0 +08/16 17:52:17.226914 00059267 QRY tagfilter left:5, right:3, res:0 +08/16 17:52:17.226920 00059267 QRY tagfilter left:2, right:3, res:1 +08/16 17:52:17.226927 00059267 QRY tagfilter left:3, right:3, res:0 +08/16 17:52:17.226934 00059267 QRY tagfilter left:4, right:3, res:0 +08/16 17:52:17.226940 00059267 QRY tagfilter left:5, right:3, res:0 +08/16 17:52:17.227014 00059267 QRY tagfilter left:2, right:3, res:1 +08/16 17:52:17.227036 00059267 QRY tagfilter left:3, right:3, res:0 +08/16 17:52:17.227043 00059267 QRY tagfilter left:4, right:3, res:0 +08/16 17:52:17.227050 00059267 QRY tagfilter left:5, right:3, res:0 +08/16 17:52:17.227056 00059267 QRY tagfilter left:2, right:3, res:1 +08/16 17:52:17.227062 00059267 QRY tagfilter left:3, right:3, res:0 +08/16 17:52:17.227069 00059267 QRY tagfilter left:4, right:3, res:0 +08/16 17:52:17.227076 00059267 QRY tagfilter left:5, right:3, res:0 +08/16 17:52:17.227082 00059267 QRY tagfilter left:2, right:3, res:1 +08/16 17:52:17.227089 00059267 QRY tagfilter left:3, right:3, res:0 +08/16 17:52:17.227107 00059267 QRY tagfilter left:4, right:3, res:0 +08/16 17:52:17.227129 00059267 QRY tagfilter left:5, right:3, res:0 +08/16 17:52:17.227138 00059267 QRY tagfilter left:2, right:3, res:1 +08/16 17:52:17.227144 00059267 QRY tagfilter left:3, right:3, res:0 +08/16 17:52:17.227151 00059267 QRY tagfilter left:4, right:3, res:0 +08/16 17:52:17.227157 00059267 QRY tagfilter left:5, right:3, res:0 +08/16 17:52:17.227163 00059267 QRY tagfilter left:2, right:3, res:1 +08/16 17:52:17.227170 00059267 QRY tagfilter left:3, right:3, res:0 +08/16 17:52:17.227176 00059267 QRY tagfilter left:4, right:3, res:0 +08/16 17:52:17.227194 00059267 QRY tagfilter left:5, right:3, res:0 +08/16 17:52:17.227202 00059267 QRY tagfilter left:2, right:3, res:1 +08/16 17:52:17.227208 00059267 QRY tagfilter left:3, right:3, res:0 +08/16 17:52:17.227215 00059267 QRY tagfilter left:4, right:3, res:0 +08/16 17:52:17.227221 00059267 QRY tagfilter left:5, right:3, res:0 +08/16 17:52:17.227284 00059267 QRY tagfilter left:3, right:2, res:1 +08/16 17:52:17.227298 00059267 QRY tagfilter left:4, right:2, res:1 +08/16 17:52:17.227304 00059267 QRY tagfilter left:5, right:2, res:1 +08/16 17:52:17.227311 00059267 QRY tagfilter left:6, right:2, res:1 +08/16 17:52:17.227317 00059267 QRY tagfilter left:3, right:2, res:1 +08/16 17:52:17.227324 00059267 QRY tagfilter left:4, right:2, res:1 +08/16 17:52:17.227330 00059267 QRY tagfilter left:5, right:2, res:1 +08/16 17:52:17.227359 00059267 QRY tagfilter left:6, right:2, res:1 +08/16 17:52:17.227421 00059267 QRY tagfilter left:3, right:2, res:1 +08/16 17:52:17.227437 00059267 QRY tagfilter left:4, right:2, res:1 +08/16 17:52:17.227444 00059267 QRY tagfilter left:5, right:2, res:1 +08/16 17:52:17.227450 00059267 QRY tagfilter left:6, right:2, res:1 +08/16 17:52:17.227456 00059267 QRY tagfilter left:3, right:2, res:1 +08/16 17:52:17.227463 00059267 QRY tagfilter left:4, right:2, res:1 +08/16 17:52:17.227469 00059267 QRY tagfilter left:5, right:2, res:1 +08/16 17:52:17.227475 00059267 QRY tagfilter left:6, right:2, res:1 +08/16 17:52:17.227493 00059267 QRY tagfilter left:3, right:2, res:1 +08/16 17:52:17.227500 00059267 QRY tagfilter left:4, right:2, res:1 +08/16 17:52:17.227507 00059267 QRY tagfilter left:5, right:2, res:1 +08/16 17:52:17.227513 00059267 QRY tagfilter left:6, right:2, res:1 +08/16 17:52:17.227520 00059267 QRY tagfilter left:3, right:2, res:1 +08/16 17:52:17.227526 00059267 QRY tagfilter left:4, right:2, res:1 +08/16 17:52:17.227541 00059267 QRY tagfilter left:5, right:2, res:1 +08/16 17:52:17.227548 00059267 QRY tagfilter left:6, right:2, res:1 +08/16 17:52:17.227570 00059267 QRY tagfilter left:3, right:2, res:1 +08/16 17:52:17.227578 00059267 QRY tagfilter left:4, right:2, res:1 +08/16 17:52:17.227585 00059267 QRY tagfilter left:5, right:2, res:1 +08/16 17:52:17.227591 00059267 QRY tagfilter left:6, right:2, res:1 +08/16 17:52:17.227598 00059267 QRY tagfilter left:3, right:2, res:1 +08/16 17:52:17.227604 00059267 QRY tagfilter left:4, right:2, res:1 +08/16 17:52:17.227611 00059267 QRY tagfilter left:5, right:2, res:1 +08/16 17:52:17.227617 00059267 QRY tagfilter left:6, right:2, res:1 +08/16 17:52:17.227624 00059267 QRY tagfilter left:3, right:2, res:1 +08/16 17:52:17.227630 00059267 QRY tagfilter left:4, right:2, res:1 +08/16 17:52:17.227636 00059267 QRY tagfilter left:5, right:2, res:1 +08/16 17:52:17.227643 00059267 QRY tagfilter left:6, right:2, res:1 +08/16 17:52:17.227649 00059267 QRY tagfilter left:3, right:2, res:1 +08/16 17:52:17.227656 00059267 QRY tagfilter left:4, right:2, res:1 +08/16 17:52:17.227662 00059267 QRY tagfilter left:5, right:2, res:1 +08/16 17:52:17.227668 00059267 QRY tagfilter left:6, right:2, res:1 +08/16 17:52:17.227675 00059267 QRY tagfilter left:3, right:2, res:1 +08/16 17:52:17.227681 00059267 QRY tagfilter left:4, right:2, res:1 +08/16 17:52:17.227688 00059267 QRY tagfilter left:5, right:2, res:1 +08/16 17:52:17.227696 00059267 QRY tagfilter left:6, right:2, res:1 +08/16 17:52:17.227703 00059267 QRY tagfilter left:3, right:2, res:1 +08/16 17:52:17.227709 00059267 QRY tagfilter left:4, right:2, res:1 +08/16 17:52:17.227716 00059267 QRY tagfilter left:5, right:2, res:1 +08/16 17:52:17.227723 00059267 QRY tagfilter left:6, right:2, res:1 +08/16 17:52:17.227729 00059267 QRY tagfilter left:3, right:2, res:1 +08/16 17:52:17.227738 00059267 QRY tagfilter left:4, right:2, res:1 +08/16 17:52:17.227744 00059267 QRY tagfilter left:5, right:2, res:1 +08/16 17:52:17.227750 00059267 QRY tagfilter left:6, right:2, res:1 +08/16 17:52:17.227757 00059267 QRY tagfilter left:3, right:2, res:1 +08/16 17:52:17.227764 00059267 QRY tagfilter left:4, right:2, res:1 +08/16 17:52:17.227771 00059267 QRY tagfilter left:5, right:2, res:1 +08/16 17:52:17.227779 00059267 QRY tagfilter left:6, right:2, res:1 +08/16 17:52:17.227803 00059267 QRY tagfilter get uid:4871209028224417813, res:1 +08/16 17:52:17.227811 00059267 QRY tagfilter get uid:4871209028228349987, res:0 +08/16 17:52:17.227822 00059267 QRY tagfilter get uid:4871209028232282161, res:0 +08/16 17:52:17.227829 00059267 QRY tagfilter get uid:4871209028236083263, res:0 +08/16 17:52:17.227836 00059267 QRY tagfilter get uid:4871209028240015437, res:1 +08/16 17:52:17.227843 00059267 QRY tagfilter get uid:4871209028244013147, res:0 +08/16 17:52:17.227849 00059267 QRY tagfilter get uid:4871209028247879785, res:0 +08/16 17:52:17.227856 00059267 QRY tagfilter get uid:4871209028251877495, res:0 +08/16 17:52:17.227862 00059267 QRY tagfilter get uid:4871209028255744133, res:1 +08/16 17:52:17.227871 00059267 QRY tagfilter get uid:4871209028259741843, res:0 +08/16 17:52:17.227928 00059267 QRY tagfilter get uid:4871209028263805089, res:0 +08/16 17:52:17.227951 00059267 QRY tagfilter get uid:4871209028267802799, res:0 +08/16 17:52:17.227959 00059267 QRY tagfilter get uid:4871209028272062653, res:1 +08/16 17:52:17.227965 00059267 QRY tagfilter get uid:4871209028276322508, res:0 +08/16 17:52:17.227974 00059267 QRY tagfilter get uid:4871209028224942103, res:0 +08/16 17:52:17.227981 00059267 QRY tagfilter get uid:4871209028228874277, res:0 +08/16 17:52:17.227988 00059267 QRY tagfilter get uid:4871209028232871987, res:1 +08/16 17:52:17.227995 00059267 QRY tagfilter get uid:4871209028236607553, res:0 +08/16 17:52:17.228001 00059267 QRY tagfilter get uid:4871209028240605263, res:0 +08/16 17:52:17.228008 00059267 QRY tagfilter get uid:4871209028244602973, res:0 +08/16 17:52:17.228016 00059267 QRY tagfilter get uid:4871209028248404075, res:1 +08/16 17:52:17.228023 00059267 QRY tagfilter get uid:4871209028252401785, res:0 +08/16 17:52:17.228030 00059267 QRY tagfilter get uid:4871209028256333959, res:0 +08/16 17:52:17.228036 00059267 QRY tagfilter get uid:4871209028260397205, res:0 +08/16 17:52:17.228043 00059267 QRY tagfilter get uid:4871209028264525987, res:1 +08/16 17:52:17.228049 00059267 QRY tagfilter get uid:4871209028268392625, res:0 +08/16 17:52:17.228056 00059267 QRY tagfilter get uid:4871209028272718015, res:0 +08/16 17:52:17.228063 00059267 QRY tagfilter get uid:4871209028276977870, res:0 +08/16 17:52:17.228070 00059267 QRY tagfilter get uid:4871209028225466393, res:1 +08/16 17:52:17.228076 00059267 QRY tagfilter get uid:4871209028229398567, res:0 +08/16 17:52:17.228083 00059267 QRY tagfilter get uid:4871209028233396277, res:0 +08/16 17:52:17.228089 00059267 QRY tagfilter get uid:4871209028237197379, res:0 +08/16 17:52:17.228095 00059267 QRY tagfilter get uid:4871209028241195089, res:1 +08/16 17:52:17.228104 00059267 QRY tagfilter get uid:4871209028245127263, res:0 +08/16 17:52:17.228110 00059267 QRY tagfilter get uid:4871209028248993901, res:0 +08/16 17:52:17.228117 00059267 QRY tagfilter get uid:4871209028252926075, res:0 +08/16 17:52:17.228123 00059267 QRY tagfilter get uid:4871209028256858249, res:1 +08/16 17:52:17.228129 00059267 QRY tagfilter get uid:4871209028260987031, res:0 +08/16 17:52:17.228136 00059267 QRY tagfilter get uid:4871209028265050277, res:0 +08/16 17:52:17.228158 00059267 QRY tagfilter get uid:4871209028269047987, res:0 +08/16 17:52:17.228166 00059267 QRY tagfilter get uid:4871209028273307841, res:1 +08/16 17:52:17.228172 00059267 QRY tagfilter get uid:4871209028277502160, res:0 +08/16 17:52:17.228179 00059267 QRY tagfilter get uid:4871209028225990683, res:0 +08/16 17:52:17.228185 00059267 QRY tagfilter get uid:4871209028229922857, res:0 +08/16 17:52:17.228192 00059267 QRY tagfilter get uid:4871209028233986103, res:1 +08/16 17:52:17.228198 00059267 QRY tagfilter get uid:4871209028237721669, res:0 +08/16 17:52:17.228204 00059267 QRY tagfilter get uid:4871209028241784915, res:0 +08/16 17:52:17.228211 00059267 QRY tagfilter get uid:4871209028245717089, res:0 +08/16 17:52:17.228217 00059267 QRY tagfilter get uid:4871209028249518191, res:1 +08/16 17:52:17.228223 00059267 QRY tagfilter get uid:4871209028253450365, res:0 +08/16 17:52:17.228300 00059267 QRY tagfilter get uid:4871209028257382539, res:0 +08/16 17:52:17.228323 00059267 QRY tagfilter get uid:4871209028261511321, res:0 +08/16 17:52:17.228330 00059267 QRY tagfilter get uid:4871209028265574567, res:1 +08/16 17:52:17.228336 00059267 QRY tagfilter get uid:4871209028269637813, res:0 +08/16 17:52:17.228343 00059267 QRY tagfilter get uid:4871209028273963203, res:0 +08/16 17:52:17.228349 00059267 QRY tagfilter get uid:4871209028278026450, res:0 +08/16 17:52:17.228357 00059267 QRY tagfilter get uid:4871209028224417813 +08/16 17:52:17.228363 00059267 QRY tagfilter get uid:4871209028240015437 +08/16 17:52:17.228383 00059267 QRY tagfilter get uid:4871209028255744133 +08/16 17:52:17.228406 00059267 QRY tagfilter get uid:4871209028272062653 +08/16 17:52:17.228413 00059267 QRY tagfilter get uid:4871209028232871987 +08/16 17:52:17.228442 00059267 QRY tagfilter get uid:4871209028248404075 +08/16 17:52:17.228478 00059267 QRY tagfilter get uid:4871209028264525987 +08/16 17:52:17.228499 00059267 QRY tagfilter get uid:4871209028225466393 +08/16 17:52:17.228507 00059267 QRY tagfilter get uid:4871209028241195089 +08/16 17:52:17.228513 00059267 QRY tagfilter get uid:4871209028256858249 +08/16 17:52:17.228520 00059267 QRY tagfilter get uid:4871209028273307841 +08/16 17:52:17.228526 00059267 QRY tagfilter get uid:4871209028233986103 +08/16 17:52:17.228533 00059267 QRY tagfilter get uid:4871209028249518191 +08/16 17:52:17.228539 00059267 QRY tagfilter get uid:4871209028265574567 \ No newline at end of file From 171ce325c79d816f314561d05975ba93498ca411 Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Wed, 17 Aug 2022 11:47:59 +0800 Subject: [PATCH 15/19] fix:error in get table list by tag filter --- source/libs/executor/src/executil.c | 22 +- source/libs/scalar/src/sclvector.c | 1 - tests/system-test/2-query/json_tag.py | 295 -------------------------- 3 files changed, 4 insertions(+), 314 deletions(-) diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index f8164e0947..9f8f97c4f5 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -426,15 +426,11 @@ static SColumnInfoData* getColInfoResult(void* metaHandle, uint64_t suid, SArray for(int32_t j = 0; j < taosArrayGetSize(pResBlock->pDataBlock); j++){ SColumnInfoData* pColInfo = (SColumnInfoData*)taosArrayGet(pResBlock->pDataBlock, j); - char str[TSDB_TABLE_FNAME_LEN + VARSTR_HEADER_SIZE] = {0}; - metaGetTableNameByUid(metaHandle, *uid, str); - colDataAppend(pColInfo, i, str, false); - if(pColInfo->info.colId == -1){ // tbname -// char str[TSDB_TABLE_FNAME_LEN + VARSTR_HEADER_SIZE] = {0}; -// metaGetTableNameByUid(metaHandle, *uid, str); -// colDataAppend(pColInfo, i, str, false); -// qDebug("tagfilter uid:%ld, tbname:%s", *uid, str+2); + char str[TSDB_TABLE_FNAME_LEN + VARSTR_HEADER_SIZE] = {0}; + metaGetTableNameByUid(metaHandle, *uid, str); + colDataAppend(pColInfo, i, str, false); + qDebug("tagfilter uid:%ld, tbname:%s", *uid, str+2); }else{ STagVal tagVal = {0}; tagVal.cid = pColInfo->info.colId; @@ -452,16 +448,6 @@ static SColumnInfoData* getColInfoResult(void* metaHandle, uint64_t suid, SArray taosMemoryFree(tmp); } else { colDataAppend(pColInfo, i, (const char*)&tagVal.i64, false); - - if(pColInfo->info.type == TSDB_DATA_TYPE_TINYINT){ - int8_t tint = *(int8_t*)(&tagVal.i64); - qDebug("tagfilter uid:%ld, tbname:%s, tint:%d", *uid, str+2, tint); - - }else if(pColInfo->info.type == TSDB_DATA_TYPE_INT){ - int nint = *(int*)(&tagVal.i64); - qDebug("tagfilter uid:%ld, tbname:%s nint:+%d", *uid, str+2, nint); - - } } } } diff --git a/source/libs/scalar/src/sclvector.c b/source/libs/scalar/src/sclvector.c index 4fc0005e4d..55699d5abd 100644 --- a/source/libs/scalar/src/sclvector.c +++ b/source/libs/scalar/src/sclvector.c @@ -1673,7 +1673,6 @@ void vectorBitOr(SScalarParam* pLeft, SScalarParam* pRight, SScalarParam *pOut, }else{\ bool res = filterDoCompare(fp, optr, pLeftData, pRightData);\ colDataAppendInt8(pOut->columnData, i, (int8_t*)&res); \ - if(GET_PARAM_TYPE(pLeft) == TSDB_DATA_TYPE_BIGINT){qDebug("tagfilter left:%d, right:%d, res:%d", *(int64_t*)(pLeftData), *(int64_t*)(pRightData), res);} \ } \ if(freeLeft) taosMemoryFreeClear(pLeftData);\ if(freeRight) taosMemoryFreeClear(pRightData);\ diff --git a/tests/system-test/2-query/json_tag.py b/tests/system-test/2-query/json_tag.py index 9b4379c011..856d764747 100644 --- a/tests/system-test/2-query/json_tag.py +++ b/tests/system-test/2-query/json_tag.py @@ -698,298 +698,3 @@ class TDTestCase: tdCases.addWindows(__file__, TDTestCase()) tdCases.addLinux(__file__, TDTestCase()) - -08/16 17:52:17.220901 00059267 QRY tagfilter uid:4871209028224417813, tbname:t3 nint:+2 -08/16 17:52:17.220973 00059267 QRY tagfilter uid:4871209028224417813, tbname:t3, tint:3 -08/16 17:52:17.220992 00059267 QRY tagfilter uid:4871209028228349987, tbname:t10 nint:+3 -08/16 17:52:17.221014 00059267 QRY tagfilter uid:4871209028228349987, tbname:t10, tint:4 -08/16 17:52:17.221042 00059267 QRY tagfilter uid:4871209028232282161, tbname:t17 nint:+4 -08/16 17:52:17.221057 00059267 QRY tagfilter uid:4871209028232282161, tbname:t17, tint:5 -08/16 17:52:17.221580 00059267 QRY tagfilter uid:4871209028236083263, tbname:t24 nint:+5 -08/16 17:52:17.221627 00059267 QRY tagfilter uid:4871209028236083263, tbname:t24, tint:6 -08/16 17:52:17.221641 00059267 QRY tagfilter uid:4871209028240015437, tbname:t31 nint:+2 -08/16 17:52:17.221654 00059267 QRY tagfilter uid:4871209028240015437, tbname:t31, tint:3 -08/16 17:52:17.221974 00059267 QRY tagfilter uid:4871209028244013147, tbname:t38 nint:+3 -08/16 17:52:17.222022 00059267 QRY tagfilter uid:4871209028244013147, tbname:t38, tint:4 -08/16 17:52:17.222040 00059267 QRY tagfilter uid:4871209028247879785, tbname:t45 nint:+4 -08/16 17:52:17.222054 00059267 QRY tagfilter uid:4871209028247879785, tbname:t45, tint:5 -08/16 17:52:17.222068 00059267 QRY tagfilter uid:4871209028251877495, tbname:t52 nint:+5 -08/16 17:52:17.222081 00059267 QRY tagfilter uid:4871209028251877495, tbname:t52, tint:6 -08/16 17:52:17.222167 00059267 QRY tagfilter uid:4871209028255744133, tbname:t59 nint:+2 -08/16 17:52:17.222192 00059267 QRY tagfilter uid:4871209028255744133, tbname:t59, tint:3 -08/16 17:52:17.222210 00059267 QRY tagfilter uid:4871209028259741843, tbname:t66 nint:+3 -08/16 17:52:17.222490 00059267 QRY tagfilter uid:4871209028259741843, tbname:t66, tint:4 -08/16 17:52:17.222522 00059267 QRY tagfilter uid:4871209028263805089, tbname:t73 nint:+4 -08/16 17:52:17.222551 00059267 QRY tagfilter uid:4871209028263805089, tbname:t73, tint:5 -08/16 17:52:17.222809 00059267 QRY tagfilter uid:4871209028267802799, tbname:t80 nint:+5 -08/16 17:52:17.222855 00059267 QRY tagfilter uid:4871209028267802799, tbname:t80, tint:6 -08/16 17:52:17.222874 00059267 QRY tagfilter uid:4871209028272062653, tbname:t87 nint:+2 -08/16 17:52:17.222934 00059267 QRY tagfilter uid:4871209028272062653, tbname:t87, tint:3 -08/16 17:52:17.222976 00059267 QRY tagfilter uid:4871209028276322508, tbname:t94 nint:+3 -08/16 17:52:17.222995 00059267 QRY tagfilter uid:4871209028276322508, tbname:t94, tint:4 -08/16 17:52:17.223013 00059267 QRY tagfilter uid:4871209028224942103, tbname:t4 nint:+4 -08/16 17:52:17.223029 00059267 QRY tagfilter uid:4871209028224942103, tbname:t4, tint:5 -08/16 17:52:17.223047 00059267 QRY tagfilter uid:4871209028228874277, tbname:t11 nint:+5 -08/16 17:52:17.223064 00059267 QRY tagfilter uid:4871209028228874277, tbname:t11, tint:6 -08/16 17:52:17.223079 00059267 QRY tagfilter uid:4871209028232871987, tbname:t18 nint:+2 -08/16 17:52:17.223093 00059267 QRY tagfilter uid:4871209028232871987, tbname:t18, tint:3 -08/16 17:52:17.223109 00059267 QRY tagfilter uid:4871209028236607553, tbname:t25 nint:+3 -08/16 17:52:17.223125 00059267 QRY tagfilter uid:4871209028236607553, tbname:t25, tint:4 -08/16 17:52:17.223141 00059267 QRY tagfilter uid:4871209028240605263, tbname:t32 nint:+4 -08/16 17:52:17.223156 00059267 QRY tagfilter uid:4871209028240605263, tbname:t32, tint:5 -08/16 17:52:17.223172 00059267 QRY tagfilter uid:4871209028244602973, tbname:t39 nint:+5 -08/16 17:52:17.223188 00059267 QRY tagfilter uid:4871209028244602973, tbname:t39, tint:6 -08/16 17:52:17.223204 00059267 QRY tagfilter uid:4871209028248404075, tbname:t46 nint:+2 -08/16 17:52:17.223219 00059267 QRY tagfilter uid:4871209028248404075, tbname:t46, tint:3 -08/16 17:52:17.223564 00059267 QRY tagfilter uid:4871209028252401785, tbname:t53 nint:+3 -08/16 17:52:17.223598 00059267 QRY tagfilter uid:4871209028252401785, tbname:t53, tint:4 -08/16 17:52:17.223614 00059267 QRY tagfilter uid:4871209028256333959, tbname:t60 nint:+4 -08/16 17:52:17.223638 00059267 QRY tagfilter uid:4871209028256333959, tbname:t60, tint:5 -08/16 17:52:17.223771 00059267 QRY tagfilter uid:4871209028260397205, tbname:t67 nint:+5 -08/16 17:52:17.223813 00059267 QRY tagfilter uid:4871209028260397205, tbname:t67, tint:6 -08/16 17:52:17.223828 00059267 QRY tagfilter uid:4871209028264525987, tbname:t74 nint:+2 -08/16 17:52:17.223858 00059267 QRY tagfilter uid:4871209028264525987, tbname:t74, tint:3 -08/16 17:52:17.223895 00059267 QRY tagfilter uid:4871209028268392625, tbname:t81 nint:+3 -08/16 17:52:17.223917 00059267 QRY tagfilter uid:4871209028268392625, tbname:t81, tint:4 -08/16 17:52:17.223953 00059267 QRY tagfilter uid:4871209028272718015, tbname:t88 nint:+4 -08/16 17:52:17.223977 00059267 QRY tagfilter uid:4871209028272718015, tbname:t88, tint:5 -08/16 17:52:17.223991 00059267 QRY tagfilter uid:4871209028276977870, tbname:t95 nint:+5 -08/16 17:52:17.224003 00059267 QRY tagfilter uid:4871209028276977870, tbname:t95, tint:6 -08/16 17:52:17.224018 00059267 QRY tagfilter uid:4871209028225466393, tbname:t5 nint:+2 -08/16 17:52:17.224030 00059267 QRY tagfilter uid:4871209028225466393, tbname:t5, tint:3 -08/16 17:52:17.224044 00059267 QRY tagfilter uid:4871209028229398567, tbname:t12 nint:+3 -08/16 17:52:17.224056 00059267 QRY tagfilter uid:4871209028229398567, tbname:t12, tint:4 -08/16 17:52:17.224071 00059267 QRY tagfilter uid:4871209028233396277, tbname:t19 nint:+4 -08/16 17:52:17.224084 00059267 QRY tagfilter uid:4871209028233396277, tbname:t19, tint:5 -08/16 17:52:17.224097 00059267 QRY tagfilter uid:4871209028237197379, tbname:t26 nint:+5 -08/16 17:52:17.224110 00059267 QRY tagfilter uid:4871209028237197379, tbname:t26, tint:6 -08/16 17:52:17.224125 00059267 QRY tagfilter uid:4871209028241195089, tbname:t33 nint:+2 -08/16 17:52:17.224139 00059267 QRY tagfilter uid:4871209028241195089, tbname:t33, tint:3 -08/16 17:52:17.224188 00059267 QRY tagfilter uid:4871209028245127263, tbname:t40 nint:+3 -08/16 17:52:17.224209 00059267 QRY tagfilter uid:4871209028245127263, tbname:t40, tint:4 -08/16 17:52:17.224459 00059267 QRY tagfilter uid:4871209028248993901, tbname:t47 nint:+4 -08/16 17:52:17.224479 00059267 QRY tagfilter uid:4871209028248993901, tbname:t47, tint:5 -08/16 17:52:17.224494 00059267 QRY tagfilter uid:4871209028252926075, tbname:t54 nint:+5 -08/16 17:52:17.224507 00059267 QRY tagfilter uid:4871209028252926075, tbname:t54, tint:6 -08/16 17:52:17.224522 00059267 QRY tagfilter uid:4871209028256858249, tbname:t61 nint:+2 -08/16 17:52:17.224535 00059267 QRY tagfilter uid:4871209028256858249, tbname:t61, tint:3 -08/16 17:52:17.224549 00059267 QRY tagfilter uid:4871209028260987031, tbname:t68 nint:+3 -08/16 17:52:17.224564 00059267 QRY tagfilter uid:4871209028260987031, tbname:t68, tint:4 -08/16 17:52:17.224664 00059267 QRY tagfilter uid:4871209028265050277, tbname:t75 nint:+4 -08/16 17:52:17.224717 00059267 QRY tagfilter uid:4871209028265050277, tbname:t75, tint:5 -08/16 17:52:17.224731 00059267 QRY tagfilter uid:4871209028269047987, tbname:t82 nint:+5 -08/16 17:52:17.224769 00059267 QRY tagfilter uid:4871209028269047987, tbname:t82, tint:6 -08/16 17:52:17.224783 00059267 QRY tagfilter uid:4871209028273307841, tbname:t89 nint:+2 -08/16 17:52:17.224923 00059267 QRY tagfilter uid:4871209028273307841, tbname:t89, tint:3 -08/16 17:52:17.224990 00059267 QRY tagfilter uid:4871209028277502160, tbname:t96 nint:+3 -08/16 17:52:17.225006 00059267 QRY tagfilter uid:4871209028277502160, tbname:t96, tint:4 -08/16 17:52:17.225018 00059267 QRY tagfilter uid:4871209028225990683, tbname:t6 nint:+4 -08/16 17:52:17.225029 00059267 QRY tagfilter uid:4871209028225990683, tbname:t6, tint:5 -08/16 17:52:17.225039 00059267 QRY tagfilter uid:4871209028229922857, tbname:t13 nint:+5 -08/16 17:52:17.225053 00059267 QRY tagfilter uid:4871209028229922857, tbname:t13, tint:6 -08/16 17:52:17.225072 00059267 QRY tagfilter uid:4871209028233986103, tbname:t20 nint:+2 -08/16 17:52:17.225082 00059267 QRY tagfilter uid:4871209028233986103, tbname:t20, tint:3 -08/16 17:52:17.225093 00059267 QRY tagfilter uid:4871209028237721669, tbname:t27 nint:+3 -08/16 17:52:17.225103 00059267 QRY tagfilter uid:4871209028237721669, tbname:t27, tint:4 -08/16 17:52:17.225113 00059267 QRY tagfilter uid:4871209028241784915, tbname:t34 nint:+4 -08/16 17:52:17.225368 00059267 QRY tagfilter uid:4871209028241784915, tbname:t34, tint:5 -08/16 17:52:17.225409 00059267 QRY tagfilter uid:4871209028245717089, tbname:t41 nint:+5 -08/16 17:52:17.225437 00059267 QRY tagfilter uid:4871209028245717089, tbname:t41, tint:6 -08/16 17:52:17.225462 00059267 QRY tagfilter uid:4871209028249518191, tbname:t48 nint:+2 -08/16 17:52:17.225475 00059267 QRY tagfilter uid:4871209028249518191, tbname:t48, tint:3 -08/16 17:52:17.225486 00059267 QRY tagfilter uid:4871209028253450365, tbname:t55 nint:+3 -08/16 17:52:17.225496 00059267 QRY tagfilter uid:4871209028253450365, tbname:t55, tint:4 -08/16 17:52:17.225507 00059267 QRY tagfilter uid:4871209028257382539, tbname:t62 nint:+4 -08/16 17:52:17.225532 00059267 QRY tagfilter uid:4871209028257382539, tbname:t62, tint:5 -08/16 17:52:17.225544 00059267 QRY tagfilter uid:4871209028261511321, tbname:t69 nint:+5 -08/16 17:52:17.225554 00059267 QRY tagfilter uid:4871209028261511321, tbname:t69, tint:6 -08/16 17:52:17.225564 00059267 QRY tagfilter uid:4871209028265574567, tbname:t76 nint:+2 -08/16 17:52:17.225575 00059267 QRY tagfilter uid:4871209028265574567, tbname:t76, tint:3 -08/16 17:52:17.225585 00059267 QRY tagfilter uid:4871209028269637813, tbname:t83 nint:+3 -08/16 17:52:17.225615 00059267 QRY tagfilter uid:4871209028269637813, tbname:t83, tint:4 -08/16 17:52:17.225640 00059267 QRY tagfilter uid:4871209028273963203, tbname:t90 nint:+4 -08/16 17:52:17.225670 00059267 QRY tagfilter uid:4871209028273963203, tbname:t90, tint:5 -08/16 17:52:17.225698 00059267 QRY tagfilter uid:4871209028278026450, tbname:t97 nint:+5 -08/16 17:52:17.225709 00059267 QRY tagfilter uid:4871209028278026450, tbname:t97, tint:6 -08/16 17:52:17.226570 00059267 QRY tagfilter left:2, right:3, res:1 -08/16 17:52:17.226623 00059267 QRY tagfilter left:3, right:3, res:0 -08/16 17:52:17.226642 00059267 QRY tagfilter left:4, right:3, res:0 -08/16 17:52:17.226684 00059267 QRY tagfilter left:5, right:3, res:0 -08/16 17:52:17.226733 00059267 QRY tagfilter left:2, right:3, res:1 -08/16 17:52:17.226765 00059267 QRY tagfilter left:3, right:3, res:0 -08/16 17:52:17.226773 00059267 QRY tagfilter left:4, right:3, res:0 -08/16 17:52:17.226780 00059267 QRY tagfilter left:5, right:3, res:0 -08/16 17:52:17.226787 00059267 QRY tagfilter left:2, right:3, res:1 -08/16 17:52:17.226793 00059267 QRY tagfilter left:3, right:3, res:0 -08/16 17:52:17.226801 00059267 QRY tagfilter left:4, right:3, res:0 -08/16 17:52:17.226808 00059267 QRY tagfilter left:5, right:3, res:0 -08/16 17:52:17.226815 00059267 QRY tagfilter left:2, right:3, res:1 -08/16 17:52:17.226821 00059267 QRY tagfilter left:3, right:3, res:0 -08/16 17:52:17.226828 00059267 QRY tagfilter left:4, right:3, res:0 -08/16 17:52:17.226834 00059267 QRY tagfilter left:5, right:3, res:0 -08/16 17:52:17.226840 00059267 QRY tagfilter left:2, right:3, res:1 -08/16 17:52:17.226847 00059267 QRY tagfilter left:3, right:3, res:0 -08/16 17:52:17.226854 00059267 QRY tagfilter left:4, right:3, res:0 -08/16 17:52:17.226860 00059267 QRY tagfilter left:5, right:3, res:0 -08/16 17:52:17.226867 00059267 QRY tagfilter left:2, right:3, res:1 -08/16 17:52:17.226873 00059267 QRY tagfilter left:3, right:3, res:0 -08/16 17:52:17.226880 00059267 QRY tagfilter left:4, right:3, res:0 -08/16 17:52:17.226886 00059267 QRY tagfilter left:5, right:3, res:0 -08/16 17:52:17.226893 00059267 QRY tagfilter left:2, right:3, res:1 -08/16 17:52:17.226900 00059267 QRY tagfilter left:3, right:3, res:0 -08/16 17:52:17.226907 00059267 QRY tagfilter left:4, right:3, res:0 -08/16 17:52:17.226914 00059267 QRY tagfilter left:5, right:3, res:0 -08/16 17:52:17.226920 00059267 QRY tagfilter left:2, right:3, res:1 -08/16 17:52:17.226927 00059267 QRY tagfilter left:3, right:3, res:0 -08/16 17:52:17.226934 00059267 QRY tagfilter left:4, right:3, res:0 -08/16 17:52:17.226940 00059267 QRY tagfilter left:5, right:3, res:0 -08/16 17:52:17.227014 00059267 QRY tagfilter left:2, right:3, res:1 -08/16 17:52:17.227036 00059267 QRY tagfilter left:3, right:3, res:0 -08/16 17:52:17.227043 00059267 QRY tagfilter left:4, right:3, res:0 -08/16 17:52:17.227050 00059267 QRY tagfilter left:5, right:3, res:0 -08/16 17:52:17.227056 00059267 QRY tagfilter left:2, right:3, res:1 -08/16 17:52:17.227062 00059267 QRY tagfilter left:3, right:3, res:0 -08/16 17:52:17.227069 00059267 QRY tagfilter left:4, right:3, res:0 -08/16 17:52:17.227076 00059267 QRY tagfilter left:5, right:3, res:0 -08/16 17:52:17.227082 00059267 QRY tagfilter left:2, right:3, res:1 -08/16 17:52:17.227089 00059267 QRY tagfilter left:3, right:3, res:0 -08/16 17:52:17.227107 00059267 QRY tagfilter left:4, right:3, res:0 -08/16 17:52:17.227129 00059267 QRY tagfilter left:5, right:3, res:0 -08/16 17:52:17.227138 00059267 QRY tagfilter left:2, right:3, res:1 -08/16 17:52:17.227144 00059267 QRY tagfilter left:3, right:3, res:0 -08/16 17:52:17.227151 00059267 QRY tagfilter left:4, right:3, res:0 -08/16 17:52:17.227157 00059267 QRY tagfilter left:5, right:3, res:0 -08/16 17:52:17.227163 00059267 QRY tagfilter left:2, right:3, res:1 -08/16 17:52:17.227170 00059267 QRY tagfilter left:3, right:3, res:0 -08/16 17:52:17.227176 00059267 QRY tagfilter left:4, right:3, res:0 -08/16 17:52:17.227194 00059267 QRY tagfilter left:5, right:3, res:0 -08/16 17:52:17.227202 00059267 QRY tagfilter left:2, right:3, res:1 -08/16 17:52:17.227208 00059267 QRY tagfilter left:3, right:3, res:0 -08/16 17:52:17.227215 00059267 QRY tagfilter left:4, right:3, res:0 -08/16 17:52:17.227221 00059267 QRY tagfilter left:5, right:3, res:0 -08/16 17:52:17.227284 00059267 QRY tagfilter left:3, right:2, res:1 -08/16 17:52:17.227298 00059267 QRY tagfilter left:4, right:2, res:1 -08/16 17:52:17.227304 00059267 QRY tagfilter left:5, right:2, res:1 -08/16 17:52:17.227311 00059267 QRY tagfilter left:6, right:2, res:1 -08/16 17:52:17.227317 00059267 QRY tagfilter left:3, right:2, res:1 -08/16 17:52:17.227324 00059267 QRY tagfilter left:4, right:2, res:1 -08/16 17:52:17.227330 00059267 QRY tagfilter left:5, right:2, res:1 -08/16 17:52:17.227359 00059267 QRY tagfilter left:6, right:2, res:1 -08/16 17:52:17.227421 00059267 QRY tagfilter left:3, right:2, res:1 -08/16 17:52:17.227437 00059267 QRY tagfilter left:4, right:2, res:1 -08/16 17:52:17.227444 00059267 QRY tagfilter left:5, right:2, res:1 -08/16 17:52:17.227450 00059267 QRY tagfilter left:6, right:2, res:1 -08/16 17:52:17.227456 00059267 QRY tagfilter left:3, right:2, res:1 -08/16 17:52:17.227463 00059267 QRY tagfilter left:4, right:2, res:1 -08/16 17:52:17.227469 00059267 QRY tagfilter left:5, right:2, res:1 -08/16 17:52:17.227475 00059267 QRY tagfilter left:6, right:2, res:1 -08/16 17:52:17.227493 00059267 QRY tagfilter left:3, right:2, res:1 -08/16 17:52:17.227500 00059267 QRY tagfilter left:4, right:2, res:1 -08/16 17:52:17.227507 00059267 QRY tagfilter left:5, right:2, res:1 -08/16 17:52:17.227513 00059267 QRY tagfilter left:6, right:2, res:1 -08/16 17:52:17.227520 00059267 QRY tagfilter left:3, right:2, res:1 -08/16 17:52:17.227526 00059267 QRY tagfilter left:4, right:2, res:1 -08/16 17:52:17.227541 00059267 QRY tagfilter left:5, right:2, res:1 -08/16 17:52:17.227548 00059267 QRY tagfilter left:6, right:2, res:1 -08/16 17:52:17.227570 00059267 QRY tagfilter left:3, right:2, res:1 -08/16 17:52:17.227578 00059267 QRY tagfilter left:4, right:2, res:1 -08/16 17:52:17.227585 00059267 QRY tagfilter left:5, right:2, res:1 -08/16 17:52:17.227591 00059267 QRY tagfilter left:6, right:2, res:1 -08/16 17:52:17.227598 00059267 QRY tagfilter left:3, right:2, res:1 -08/16 17:52:17.227604 00059267 QRY tagfilter left:4, right:2, res:1 -08/16 17:52:17.227611 00059267 QRY tagfilter left:5, right:2, res:1 -08/16 17:52:17.227617 00059267 QRY tagfilter left:6, right:2, res:1 -08/16 17:52:17.227624 00059267 QRY tagfilter left:3, right:2, res:1 -08/16 17:52:17.227630 00059267 QRY tagfilter left:4, right:2, res:1 -08/16 17:52:17.227636 00059267 QRY tagfilter left:5, right:2, res:1 -08/16 17:52:17.227643 00059267 QRY tagfilter left:6, right:2, res:1 -08/16 17:52:17.227649 00059267 QRY tagfilter left:3, right:2, res:1 -08/16 17:52:17.227656 00059267 QRY tagfilter left:4, right:2, res:1 -08/16 17:52:17.227662 00059267 QRY tagfilter left:5, right:2, res:1 -08/16 17:52:17.227668 00059267 QRY tagfilter left:6, right:2, res:1 -08/16 17:52:17.227675 00059267 QRY tagfilter left:3, right:2, res:1 -08/16 17:52:17.227681 00059267 QRY tagfilter left:4, right:2, res:1 -08/16 17:52:17.227688 00059267 QRY tagfilter left:5, right:2, res:1 -08/16 17:52:17.227696 00059267 QRY tagfilter left:6, right:2, res:1 -08/16 17:52:17.227703 00059267 QRY tagfilter left:3, right:2, res:1 -08/16 17:52:17.227709 00059267 QRY tagfilter left:4, right:2, res:1 -08/16 17:52:17.227716 00059267 QRY tagfilter left:5, right:2, res:1 -08/16 17:52:17.227723 00059267 QRY tagfilter left:6, right:2, res:1 -08/16 17:52:17.227729 00059267 QRY tagfilter left:3, right:2, res:1 -08/16 17:52:17.227738 00059267 QRY tagfilter left:4, right:2, res:1 -08/16 17:52:17.227744 00059267 QRY tagfilter left:5, right:2, res:1 -08/16 17:52:17.227750 00059267 QRY tagfilter left:6, right:2, res:1 -08/16 17:52:17.227757 00059267 QRY tagfilter left:3, right:2, res:1 -08/16 17:52:17.227764 00059267 QRY tagfilter left:4, right:2, res:1 -08/16 17:52:17.227771 00059267 QRY tagfilter left:5, right:2, res:1 -08/16 17:52:17.227779 00059267 QRY tagfilter left:6, right:2, res:1 -08/16 17:52:17.227803 00059267 QRY tagfilter get uid:4871209028224417813, res:1 -08/16 17:52:17.227811 00059267 QRY tagfilter get uid:4871209028228349987, res:0 -08/16 17:52:17.227822 00059267 QRY tagfilter get uid:4871209028232282161, res:0 -08/16 17:52:17.227829 00059267 QRY tagfilter get uid:4871209028236083263, res:0 -08/16 17:52:17.227836 00059267 QRY tagfilter get uid:4871209028240015437, res:1 -08/16 17:52:17.227843 00059267 QRY tagfilter get uid:4871209028244013147, res:0 -08/16 17:52:17.227849 00059267 QRY tagfilter get uid:4871209028247879785, res:0 -08/16 17:52:17.227856 00059267 QRY tagfilter get uid:4871209028251877495, res:0 -08/16 17:52:17.227862 00059267 QRY tagfilter get uid:4871209028255744133, res:1 -08/16 17:52:17.227871 00059267 QRY tagfilter get uid:4871209028259741843, res:0 -08/16 17:52:17.227928 00059267 QRY tagfilter get uid:4871209028263805089, res:0 -08/16 17:52:17.227951 00059267 QRY tagfilter get uid:4871209028267802799, res:0 -08/16 17:52:17.227959 00059267 QRY tagfilter get uid:4871209028272062653, res:1 -08/16 17:52:17.227965 00059267 QRY tagfilter get uid:4871209028276322508, res:0 -08/16 17:52:17.227974 00059267 QRY tagfilter get uid:4871209028224942103, res:0 -08/16 17:52:17.227981 00059267 QRY tagfilter get uid:4871209028228874277, res:0 -08/16 17:52:17.227988 00059267 QRY tagfilter get uid:4871209028232871987, res:1 -08/16 17:52:17.227995 00059267 QRY tagfilter get uid:4871209028236607553, res:0 -08/16 17:52:17.228001 00059267 QRY tagfilter get uid:4871209028240605263, res:0 -08/16 17:52:17.228008 00059267 QRY tagfilter get uid:4871209028244602973, res:0 -08/16 17:52:17.228016 00059267 QRY tagfilter get uid:4871209028248404075, res:1 -08/16 17:52:17.228023 00059267 QRY tagfilter get uid:4871209028252401785, res:0 -08/16 17:52:17.228030 00059267 QRY tagfilter get uid:4871209028256333959, res:0 -08/16 17:52:17.228036 00059267 QRY tagfilter get uid:4871209028260397205, res:0 -08/16 17:52:17.228043 00059267 QRY tagfilter get uid:4871209028264525987, res:1 -08/16 17:52:17.228049 00059267 QRY tagfilter get uid:4871209028268392625, res:0 -08/16 17:52:17.228056 00059267 QRY tagfilter get uid:4871209028272718015, res:0 -08/16 17:52:17.228063 00059267 QRY tagfilter get uid:4871209028276977870, res:0 -08/16 17:52:17.228070 00059267 QRY tagfilter get uid:4871209028225466393, res:1 -08/16 17:52:17.228076 00059267 QRY tagfilter get uid:4871209028229398567, res:0 -08/16 17:52:17.228083 00059267 QRY tagfilter get uid:4871209028233396277, res:0 -08/16 17:52:17.228089 00059267 QRY tagfilter get uid:4871209028237197379, res:0 -08/16 17:52:17.228095 00059267 QRY tagfilter get uid:4871209028241195089, res:1 -08/16 17:52:17.228104 00059267 QRY tagfilter get uid:4871209028245127263, res:0 -08/16 17:52:17.228110 00059267 QRY tagfilter get uid:4871209028248993901, res:0 -08/16 17:52:17.228117 00059267 QRY tagfilter get uid:4871209028252926075, res:0 -08/16 17:52:17.228123 00059267 QRY tagfilter get uid:4871209028256858249, res:1 -08/16 17:52:17.228129 00059267 QRY tagfilter get uid:4871209028260987031, res:0 -08/16 17:52:17.228136 00059267 QRY tagfilter get uid:4871209028265050277, res:0 -08/16 17:52:17.228158 00059267 QRY tagfilter get uid:4871209028269047987, res:0 -08/16 17:52:17.228166 00059267 QRY tagfilter get uid:4871209028273307841, res:1 -08/16 17:52:17.228172 00059267 QRY tagfilter get uid:4871209028277502160, res:0 -08/16 17:52:17.228179 00059267 QRY tagfilter get uid:4871209028225990683, res:0 -08/16 17:52:17.228185 00059267 QRY tagfilter get uid:4871209028229922857, res:0 -08/16 17:52:17.228192 00059267 QRY tagfilter get uid:4871209028233986103, res:1 -08/16 17:52:17.228198 00059267 QRY tagfilter get uid:4871209028237721669, res:0 -08/16 17:52:17.228204 00059267 QRY tagfilter get uid:4871209028241784915, res:0 -08/16 17:52:17.228211 00059267 QRY tagfilter get uid:4871209028245717089, res:0 -08/16 17:52:17.228217 00059267 QRY tagfilter get uid:4871209028249518191, res:1 -08/16 17:52:17.228223 00059267 QRY tagfilter get uid:4871209028253450365, res:0 -08/16 17:52:17.228300 00059267 QRY tagfilter get uid:4871209028257382539, res:0 -08/16 17:52:17.228323 00059267 QRY tagfilter get uid:4871209028261511321, res:0 -08/16 17:52:17.228330 00059267 QRY tagfilter get uid:4871209028265574567, res:1 -08/16 17:52:17.228336 00059267 QRY tagfilter get uid:4871209028269637813, res:0 -08/16 17:52:17.228343 00059267 QRY tagfilter get uid:4871209028273963203, res:0 -08/16 17:52:17.228349 00059267 QRY tagfilter get uid:4871209028278026450, res:0 -08/16 17:52:17.228357 00059267 QRY tagfilter get uid:4871209028224417813 -08/16 17:52:17.228363 00059267 QRY tagfilter get uid:4871209028240015437 -08/16 17:52:17.228383 00059267 QRY tagfilter get uid:4871209028255744133 -08/16 17:52:17.228406 00059267 QRY tagfilter get uid:4871209028272062653 -08/16 17:52:17.228413 00059267 QRY tagfilter get uid:4871209028232871987 -08/16 17:52:17.228442 00059267 QRY tagfilter get uid:4871209028248404075 -08/16 17:52:17.228478 00059267 QRY tagfilter get uid:4871209028264525987 -08/16 17:52:17.228499 00059267 QRY tagfilter get uid:4871209028225466393 -08/16 17:52:17.228507 00059267 QRY tagfilter get uid:4871209028241195089 -08/16 17:52:17.228513 00059267 QRY tagfilter get uid:4871209028256858249 -08/16 17:52:17.228520 00059267 QRY tagfilter get uid:4871209028273307841 -08/16 17:52:17.228526 00059267 QRY tagfilter get uid:4871209028233986103 -08/16 17:52:17.228533 00059267 QRY tagfilter get uid:4871209028249518191 -08/16 17:52:17.228539 00059267 QRY tagfilter get uid:4871209028265574567 \ No newline at end of file From 4f16771de4067d9cecbeef1baafd7b530409e411 Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Wed, 17 Aug 2022 14:45:31 +0800 Subject: [PATCH 16/19] fix:error in get table list by tag filter --- source/dnode/vnode/inc/vnode.h | 2 +- source/dnode/vnode/src/meta/metaQuery.c | 21 ++++----------------- source/libs/executor/src/executil.c | 9 +++++---- 3 files changed, 10 insertions(+), 22 deletions(-) diff --git a/source/dnode/vnode/inc/vnode.h b/source/dnode/vnode/inc/vnode.h index 9d92a9c1e4..c224f6ce7f 100644 --- a/source/dnode/vnode/inc/vnode.h +++ b/source/dnode/vnode/inc/vnode.h @@ -91,7 +91,7 @@ typedef struct SMetaEntry SMetaEntry; void metaReaderInit(SMetaReader *pReader, SMeta *pMeta, int32_t flags); void metaReaderClear(SMetaReader *pReader); int32_t metaGetTableEntryByUid(SMetaReader *pReader, tb_uid_t uid); -int32_t metaGetTableTags(SMeta *pMeta, uint64_t suid, SArray *uidList, SArray *tags); +int32_t metaGetTableTags(SMeta *pMeta, uint64_t suid, SArray *uidList, SHashObj *tags); int32_t metaReadNext(SMetaReader *pReader); const void *metaGetTableTagVal(void *tag, int16_t type, STagVal *tagVal); int metaGetTableNameByUid(void *meta, uint64_t uid, char *tbName); diff --git a/source/dnode/vnode/src/meta/metaQuery.c b/source/dnode/vnode/src/meta/metaQuery.c index 9f2cf409be..29a4dd3e34 100644 --- a/source/dnode/vnode/src/meta/metaQuery.c +++ b/source/dnode/vnode/src/meta/metaQuery.c @@ -962,13 +962,13 @@ END: return ret; } -int32_t metaGetTableTags(SMeta *pMeta, uint64_t suid, SArray *uidList, SArray *tags) { +int32_t metaGetTableTags(SMeta *pMeta, uint64_t suid, SArray *uidList, SHashObj *tags) { SMCtbCursor *pCur = metaOpenCtbCursor(pMeta, suid); SHashObj *uHash = NULL; size_t len = taosArrayGetSize(uidList); // len > 0 means there already have uids if(len > 0){ - uHash = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), true, HASH_NO_LOCK); + uHash = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), false, HASH_NO_LOCK); for(int i = 0; i < len; i++){ int64_t *uid = taosArrayGet(uidList, i); taosHashPut(uHash, uid, sizeof(int64_t), &i, sizeof(i)); @@ -982,26 +982,13 @@ int32_t metaGetTableTags(SMeta *pMeta, uint64_t suid, SArray *uidList, SArray *t if (len > 0 && taosHashGet(uHash, &id, sizeof(int64_t)) == NULL) { continue; - } - - void *tag = taosMemoryMalloc(pCur->vLen); - memcpy(tag, pCur->pVal, pCur->vLen); - - if (len == 0) { + }else if (len == 0) { taosArrayPush(uidList, &id); - taosArrayPush(tags, &tag); - }else{ - taosHashPut(uHash, &id, sizeof(int64_t), &tag, POINTER_BYTES); } - } - for(int i = 0; i < len; i++){ - int64_t *uid = taosArrayGet(uidList, i); - void **tag = taosHashGet(uHash, uid, POINTER_BYTES); - taosArrayPush(tags, tag); + taosHashPut(tags, &id, sizeof(int64_t), pCur->pVal, pCur->vLen); } - taosHashCleanup(uHash); metaCloseCtbCursor(pCur); return TSDB_CODE_SUCCESS; diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index 9f8f97c4f5..2547b5e228 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -368,7 +368,7 @@ static SColumnInfoData* getColInfoResult(void* metaHandle, uint64_t suid, SArray int32_t code = TSDB_CODE_SUCCESS; SArray* pBlockList = NULL; SSDataBlock* pResBlock = NULL; - SArray* tags = NULL; + SHashObj * tags = NULL; SScalarParam output = {0}; tagFilterAssist ctx = {0}; @@ -399,7 +399,7 @@ static SColumnInfoData* getColInfoResult(void* metaHandle, uint64_t suid, SArray } // int64_t stt = taosGetTimestampUs(); - tags = taosArrayInit(8, POINTER_BYTES); + tags = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), false, HASH_NO_LOCK); code = metaGetTableTags(metaHandle, suid, uidList, tags); if (code != TSDB_CODE_SUCCESS) { terrno = code; @@ -421,8 +421,9 @@ static SColumnInfoData* getColInfoResult(void* metaHandle, uint64_t suid, SArray // int64_t st = taosGetTimestampUs(); for (int32_t i = 0; i < rows; i++) { - void* tag = taosArrayGetP(tags, i); int64_t* uid = taosArrayGet(uidList, i); + void* tag = taosHashGet(tags, uid, sizeof(int64_t)); + ASSERT(tag); for(int32_t j = 0; j < taosArrayGetSize(pResBlock->pDataBlock); j++){ SColumnInfoData* pColInfo = (SColumnInfoData*)taosArrayGet(pResBlock->pDataBlock, j); @@ -474,7 +475,7 @@ static SColumnInfoData* getColInfoResult(void* metaHandle, uint64_t suid, SArray // qDebug("calculate tag block rows:%d, cost:%ld us", rows, st2-st1); end: - taosArrayDestroyP(tags, taosMemoryFree); + taosHashCleanup(tags); taosHashCleanup(ctx.colHash); taosArrayDestroy(ctx.cInfoList); blockDataDestroy(pResBlock); From a036d64ae0dc7d50cf5c4bf21df6ef9949396baa Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Wed, 17 Aug 2022 15:28:49 +0800 Subject: [PATCH 17/19] avoid filter invalid table --- source/dnode/vnode/src/meta/metaQuery.c | 141 ++++++++++++------------ 1 file changed, 72 insertions(+), 69 deletions(-) diff --git a/source/dnode/vnode/src/meta/metaQuery.c b/source/dnode/vnode/src/meta/metaQuery.c index 29a4dd3e34..4e85cde7ca 100644 --- a/source/dnode/vnode/src/meta/metaQuery.c +++ b/source/dnode/vnode/src/meta/metaQuery.c @@ -53,79 +53,79 @@ _err: return -1; } -//int metaGetTableEntryByUidTest(void* meta, SArray *uidList) { +// int metaGetTableEntryByUidTest(void* meta, SArray *uidList) { // -// SArray* readerList = taosArrayInit(taosArrayGetSize(uidList), sizeof(SMetaReader)); -// SArray* uidVersion = taosArrayInit(taosArrayGetSize(uidList), sizeof(STbDbKey)); -// SMeta *pMeta = meta; -// int64_t version; -// SHashObj *uHash = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), false, HASH_NO_LOCK); +// SArray* readerList = taosArrayInit(taosArrayGetSize(uidList), sizeof(SMetaReader)); +// SArray* uidVersion = taosArrayInit(taosArrayGetSize(uidList), sizeof(STbDbKey)); +// SMeta *pMeta = meta; +// int64_t version; +// SHashObj *uHash = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), false, HASH_NO_LOCK); // -// int64_t stt1 = taosGetTimestampUs(); -// for(int i = 0; i < taosArrayGetSize(uidList); i++) { -// void* ppVal = NULL; -// int vlen = 0; -// uint64_t * uid = taosArrayGet(uidList, i); -// // query uid.idx -// if (tdbTbGet(pMeta->pUidIdx, uid, sizeof(*uid), &ppVal, &vlen) < 0) { -// continue; -// } -// version = *(int64_t *)ppVal; +// int64_t stt1 = taosGetTimestampUs(); +// for(int i = 0; i < taosArrayGetSize(uidList); i++) { +// void* ppVal = NULL; +// int vlen = 0; +// uint64_t * uid = taosArrayGet(uidList, i); +// // query uid.idx +// if (tdbTbGet(pMeta->pUidIdx, uid, sizeof(*uid), &ppVal, &vlen) < 0) { +// continue; +// } +// version = *(int64_t *)ppVal; // -// STbDbKey tbDbKey = {.version = version, .uid = *uid}; -// taosArrayPush(uidVersion, &tbDbKey); -// taosHashPut(uHash, uid, sizeof(int64_t), ppVal, sizeof(int64_t)); -// } -// int64_t stt2 = taosGetTimestampUs(); -// qDebug("metaGetTableEntryByUidTest1 rows:%d, cost:%ld us", taosArrayGetSize(uidList), stt2-stt1); +// STbDbKey tbDbKey = {.version = version, .uid = *uid}; +// taosArrayPush(uidVersion, &tbDbKey); +// taosHashPut(uHash, uid, sizeof(int64_t), ppVal, sizeof(int64_t)); +// } +// int64_t stt2 = taosGetTimestampUs(); +// qDebug("metaGetTableEntryByUidTest1 rows:%d, cost:%ld us", taosArrayGetSize(uidList), stt2-stt1); // -// TBC *pCur = NULL; -// tdbTbcOpen(pMeta->pTbDb, &pCur, NULL); -// tdbTbcMoveToFirst(pCur); -// void *pKey = NULL; -// int kLen = 0; +// TBC *pCur = NULL; +// tdbTbcOpen(pMeta->pTbDb, &pCur, NULL); +// tdbTbcMoveToFirst(pCur); +// void *pKey = NULL; +// int kLen = 0; // -// while(1){ -// SMetaReader pReader = {0}; -// int32_t ret = tdbTbcNext(pCur, &pKey, &kLen, &pReader.pBuf, &pReader.szBuf); -// if (ret < 0) break; -// STbDbKey *tmp = (STbDbKey*)pKey; -// int64_t *ver = (int64_t*)taosHashGet(uHash, &tmp->uid, sizeof(int64_t)); -// if(ver == NULL || *ver != tmp->version) continue; -// taosArrayPush(readerList, &pReader); -// } -// tdbTbcClose(pCur); +// while(1){ +// SMetaReader pReader = {0}; +// int32_t ret = tdbTbcNext(pCur, &pKey, &kLen, &pReader.pBuf, &pReader.szBuf); +// if (ret < 0) break; +// STbDbKey *tmp = (STbDbKey*)pKey; +// int64_t *ver = (int64_t*)taosHashGet(uHash, &tmp->uid, sizeof(int64_t)); +// if(ver == NULL || *ver != tmp->version) continue; +// taosArrayPush(readerList, &pReader); +// } +// tdbTbcClose(pCur); // -// taosArrayClear(readerList); -// int64_t stt3 = taosGetTimestampUs(); -// qDebug("metaGetTableEntryByUidTest2 rows:%d, cost:%ld us", taosArrayGetSize(uidList), stt3-stt2); -// for(int i = 0; i < taosArrayGetSize(uidVersion); i++) { -// SMetaReader pReader = {0}; +// taosArrayClear(readerList); +// int64_t stt3 = taosGetTimestampUs(); +// qDebug("metaGetTableEntryByUidTest2 rows:%d, cost:%ld us", taosArrayGetSize(uidList), stt3-stt2); +// for(int i = 0; i < taosArrayGetSize(uidVersion); i++) { +// SMetaReader pReader = {0}; // -// STbDbKey *tbDbKey = taosArrayGet(uidVersion, i); -// // query table.db -// if (tdbTbGet(pMeta->pTbDb, tbDbKey, sizeof(STbDbKey), &pReader.pBuf, &pReader.szBuf) < 0) { -// continue; -// } -// taosArrayPush(readerList, &pReader); -// } -// int64_t stt4 = taosGetTimestampUs(); -// qDebug("metaGetTableEntryByUidTest3 rows:%d, cost:%ld us", taosArrayGetSize(uidList), stt4-stt3); +// STbDbKey *tbDbKey = taosArrayGet(uidVersion, i); +// // query table.db +// if (tdbTbGet(pMeta->pTbDb, tbDbKey, sizeof(STbDbKey), &pReader.pBuf, &pReader.szBuf) < 0) { +// continue; +// } +// taosArrayPush(readerList, &pReader); +// } +// int64_t stt4 = taosGetTimestampUs(); +// qDebug("metaGetTableEntryByUidTest3 rows:%d, cost:%ld us", taosArrayGetSize(uidList), stt4-stt3); // -// for(int i = 0; i < taosArrayGetSize(readerList); i++){ -// SMetaReader* pReader = taosArrayGet(readerList, i); -// metaReaderInit(pReader, meta, 0); -// // decode the entry -// tDecoderInit(&pReader->coder, pReader->pBuf, pReader->szBuf); +// for(int i = 0; i < taosArrayGetSize(readerList); i++){ +// SMetaReader* pReader = taosArrayGet(readerList, i); +// metaReaderInit(pReader, meta, 0); +// // decode the entry +// tDecoderInit(&pReader->coder, pReader->pBuf, pReader->szBuf); // -// if (metaDecodeEntry(&pReader->coder, &pReader->me) < 0) { -// } -// metaReaderClear(pReader); -// } -// int64_t stt5 = taosGetTimestampUs(); -// qDebug("metaGetTableEntryByUidTest4 rows:%d, cost:%ld us", taosArrayGetSize(readerList), stt5-stt4); -// return 0; -//} +// if (metaDecodeEntry(&pReader->coder, &pReader->me) < 0) { +// } +// metaReaderClear(pReader); +// } +// int64_t stt5 = taosGetTimestampUs(); +// qDebug("metaGetTableEntryByUidTest4 rows:%d, cost:%ld us", taosArrayGetSize(readerList), stt5-stt4); +// return 0; +// } int metaGetTableEntryByUid(SMetaReader *pReader, tb_uid_t uid) { SMeta *pMeta = pReader->pMeta; @@ -824,7 +824,7 @@ SArray *metaGetSmaTbUids(SMeta *pMeta) { #endif const void *metaGetTableTagVal(void *pTag, int16_t type, STagVal *val) { - STag *tag = (STag*) pTag; + STag *tag = (STag *)pTag; if (type == TSDB_DATA_TYPE_JSON) { return tag; } @@ -926,6 +926,9 @@ int32_t metaFilterTableIds(SMeta *pMeta, SMetaFltParam *param, SArray *pUids) { break; } } + if (p->suid != pKey->suid) { + break; + } first = false; if (p != NULL) { int32_t cmp = (*param->filterFunc)(p->data, pKey->data, pKey->type); @@ -966,10 +969,10 @@ int32_t metaGetTableTags(SMeta *pMeta, uint64_t suid, SArray *uidList, SHashObj SMCtbCursor *pCur = metaOpenCtbCursor(pMeta, suid); SHashObj *uHash = NULL; - size_t len = taosArrayGetSize(uidList); // len > 0 means there already have uids - if(len > 0){ + size_t len = taosArrayGetSize(uidList); // len > 0 means there already have uids + if (len > 0) { uHash = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), false, HASH_NO_LOCK); - for(int i = 0; i < len; i++){ + for (int i = 0; i < len; i++) { int64_t *uid = taosArrayGet(uidList, i); taosHashPut(uHash, uid, sizeof(int64_t), &i, sizeof(i)); } @@ -982,7 +985,7 @@ int32_t metaGetTableTags(SMeta *pMeta, uint64_t suid, SArray *uidList, SHashObj if (len > 0 && taosHashGet(uHash, &id, sizeof(int64_t)) == NULL) { continue; - }else if (len == 0) { + } else if (len == 0) { taosArrayPush(uidList, &id); } From 359fa4bc56ea43fe90bf39aec8ec048deaee4040 Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Wed, 17 Aug 2022 15:50:33 +0800 Subject: [PATCH 18/19] fix:error in get table list by tag filter --- source/libs/executor/src/executil.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index 2547b5e228..fc10551618 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -506,6 +506,7 @@ int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, code = doFilterTag(pTagIndexCond, &metaArg, res, &status); if (code != 0 || status == SFLT_NOT_INDEX) { qError("failed to get tableIds from index, reason:%s, suid:%" PRIu64, tstrerror(code), tableUid); + code = TDB_CODE_SUCCESS; } // int64_t stt1 = taosGetTimestampUs(); From e3c11172ec7ccacefc2f643e249f7500726e691d Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Wed, 17 Aug 2022 19:01:22 +0800 Subject: [PATCH 19/19] fix:error in get table list by tag filter --- source/libs/executor/src/executil.c | 20 +++++++++++++++++++- source/libs/scalar/src/scalar.c | 3 +++ source/libs/scalar/src/sclvector.c | 4 ++-- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index fc10551618..1dabea0d6b 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -334,7 +334,13 @@ static EDealRes getColumn(SNode** pNode, void* pContext) { taosHashPut(pData->colHash, &pSColumnNode->colId, sizeof(pSColumnNode->colId), pNode, sizeof((*pNode))); pSColumnNode->slotId = pData->index++; SColumnInfo cInfo = {.colId = pSColumnNode->colId, .type = pSColumnNode->node.resType.type, .bytes = pSColumnNode->node.resType.bytes}; +#if TAG_FILTER_DEBUG + qDebug("tagfilter build column info, slotId:%d, colId:%d, type:%d", pSColumnNode->slotId, cInfo.colId, cInfo.type); +#endif taosArrayPush(pData->cInfoList, &cInfo); + }else{ + SColumnNode* col = *(SColumnNode**)data; + pSColumnNode->slotId = col->slotId; } return DEAL_RES_CONTINUE; @@ -431,7 +437,9 @@ static SColumnInfoData* getColInfoResult(void* metaHandle, uint64_t suid, SArray char str[TSDB_TABLE_FNAME_LEN + VARSTR_HEADER_SIZE] = {0}; metaGetTableNameByUid(metaHandle, *uid, str); colDataAppend(pColInfo, i, str, false); +#if TAG_FILTER_DEBUG qDebug("tagfilter uid:%ld, tbname:%s", *uid, str+2); +#endif }else{ STagVal tagVal = {0}; tagVal.cid = pColInfo->info.colId; @@ -442,13 +450,23 @@ static SColumnInfoData* getColInfoResult(void* metaHandle, uint64_t suid, SArray } else if (pColInfo->info.type == TSDB_DATA_TYPE_JSON) { colDataAppend(pColInfo, i, p, false); } else if (IS_VAR_DATA_TYPE(pColInfo->info.type)) { - char *tmp = taosMemoryMalloc(tagVal.nData + VARSTR_HEADER_SIZE); + char *tmp = taosMemoryCalloc(tagVal.nData + VARSTR_HEADER_SIZE + 1, 1); varDataSetLen(tmp, tagVal.nData); memcpy(tmp + VARSTR_HEADER_SIZE, tagVal.pData, tagVal.nData); colDataAppend(pColInfo, i, tmp, false); +#if TAG_FILTER_DEBUG + qDebug("tagfilter varch:%s", tmp+2); +#endif taosMemoryFree(tmp); } else { colDataAppend(pColInfo, i, (const char*)&tagVal.i64, false); +#if TAG_FILTER_DEBUG + if(pColInfo->info.type == TSDB_DATA_TYPE_INT){ + qDebug("tagfilter int:%d", *(int*)(&tagVal.i64)); + }else if(pColInfo->info.type == TSDB_DATA_TYPE_DOUBLE){ + qDebug("tagfilter double:%f", *(double *)(&tagVal.i64)); + } +#endif } } } diff --git a/source/libs/scalar/src/scalar.c b/source/libs/scalar/src/scalar.c index d0c5a76f4b..54376561de 100644 --- a/source/libs/scalar/src/scalar.c +++ b/source/libs/scalar/src/scalar.c @@ -292,6 +292,9 @@ int32_t sclInitParam(SNode* node, SScalarParam *param, SScalarCtx *ctx, int32_t } SColumnInfoData *columnData = (SColumnInfoData *)taosArrayGet(block->pDataBlock, ref->slotId); +#if TAG_FILTER_DEBUG + qDebug("tagfilter column info, slotId:%d, colId:%d, type:%d", ref->slotId, columnData->info.colId, columnData->info.type); +#endif param->numOfRows = block->info.rows; param->columnData = columnData; break; diff --git a/source/libs/scalar/src/sclvector.c b/source/libs/scalar/src/sclvector.c index 55699d5abd..aaa70ef5ae 100644 --- a/source/libs/scalar/src/sclvector.c +++ b/source/libs/scalar/src/sclvector.c @@ -1672,8 +1672,8 @@ void vectorBitOr(SScalarParam* pLeft, SScalarParam* pRight, SScalarParam *pOut, colDataAppendInt8(pOut->columnData, i, (int8_t*)&result);\ }else{\ bool res = filterDoCompare(fp, optr, pLeftData, pRightData);\ - colDataAppendInt8(pOut->columnData, i, (int8_t*)&res); \ - } \ + colDataAppendInt8(pOut->columnData, i, (int8_t*)&res);\ + }\ if(freeLeft) taosMemoryFreeClear(pLeftData);\ if(freeRight) taosMemoryFreeClear(pRightData);\ }