From d62ddcf2db5edfcb75b7f9108c759488172a38cf Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Wed, 27 Apr 2022 15:17:15 +0800 Subject: [PATCH 1/3] enh(query): add more information for the result of show tables. --- include/libs/executor/executor.h | 1 + source/dnode/mnode/impl/src/mndInfoSchema.c | 1 + source/dnode/vnode/inc/vnode.h | 1 + source/dnode/vnode/src/meta/metaTable.c | 2 +- source/dnode/vnode/src/vnd/vnodeQuery.c | 10 ++ source/dnode/vnode/src/vnd/vnodeSvr.c | 2 +- source/libs/executor/inc/executorimpl.h | 2 +- source/libs/executor/src/executorimpl.c | 2 +- source/libs/executor/src/scanoperator.c | 101 ++++++++++++++++---- 9 files changed, 98 insertions(+), 24 deletions(-) diff --git a/include/libs/executor/executor.h b/include/libs/executor/executor.h index 4d289147d0..0cd1a9265d 100644 --- a/include/libs/executor/executor.h +++ b/include/libs/executor/executor.h @@ -32,6 +32,7 @@ typedef struct SReadHandle { void* reader; void* meta; void* config; + void* vnode; } SReadHandle; #define STREAM_DATA_TYPE_SUBMIT_BLOCK 0x1 diff --git a/source/dnode/mnode/impl/src/mndInfoSchema.c b/source/dnode/mnode/impl/src/mndInfoSchema.c index 2b46fc9274..52efac883d 100644 --- a/source/dnode/mnode/impl/src/mndInfoSchema.c +++ b/source/dnode/mnode/impl/src/mndInfoSchema.c @@ -142,6 +142,7 @@ static const SInfosTableSchema userTblsSchema[] = { {.name = "vgroup_id", .bytes = 4, .type = TSDB_DATA_TYPE_INT}, {.name = "ttl", .bytes = 4, .type = TSDB_DATA_TYPE_INT}, {.name = "table_comment", .bytes = 4, .type = TSDB_DATA_TYPE_INT}, + {.name = "type", .bytes = 20 + VARSTR_HEADER_SIZE, .type = TSDB_DATA_TYPE_VARCHAR}, }; static const SInfosTableSchema userTblDistSchema[] = { diff --git a/source/dnode/vnode/inc/vnode.h b/source/dnode/vnode/inc/vnode.h index 8984b3d8ae..935bcb245a 100644 --- a/source/dnode/vnode/inc/vnode.h +++ b/source/dnode/vnode/inc/vnode.h @@ -68,6 +68,7 @@ void vnodeStop(SVnode *pVnode); int64_t vnodeGetSyncHandle(SVnode *pVnode); void vnodeGetSnapshot(SVnode *pVnode, SSnapshot *pSnapshot); +void vnodeGetInfo(SVnode *pVnode, const char **dbname, int32_t *vgId); // meta typedef struct SMeta SMeta; // todo: remove diff --git a/source/dnode/vnode/src/meta/metaTable.c b/source/dnode/vnode/src/meta/metaTable.c index 014af4b10d..4c5eedf9ea 100644 --- a/source/dnode/vnode/src/meta/metaTable.c +++ b/source/dnode/vnode/src/meta/metaTable.c @@ -88,7 +88,7 @@ int metaCreateTable(SMeta *pMeta, int64_t version, SVCreateTbReq *pReq) { // preprocess req pReq->uid = tGenIdPI64(); - pReq->ctime = taosGetTimestampSec(); + pReq->ctime = taosGetTimestampMs(); // validate req metaReaderInit(&mr, pMeta->pVnode, 0); diff --git a/source/dnode/vnode/src/vnd/vnodeQuery.c b/source/dnode/vnode/src/vnd/vnodeQuery.c index bcb424d133..1016838151 100644 --- a/source/dnode/vnode/src/vnd/vnodeQuery.c +++ b/source/dnode/vnode/src/vnd/vnodeQuery.c @@ -136,3 +136,13 @@ int32_t vnodeGetLoad(SVnode *pVnode, SVnodeLoad *pLoad) { pLoad->numOfBatchInsertSuccessReqs = 4; return 0; } + +void vnodeGetInfo(SVnode *pVnode, const char **dbname, int32_t *vgId) { + if (dbname) { + *dbname = pVnode->config.dbname; + } + + if (vgId) { + *vgId = TD_VID(pVnode); + } +} \ No newline at end of file diff --git a/source/dnode/vnode/src/vnd/vnodeSvr.c b/source/dnode/vnode/src/vnd/vnodeSvr.c index 61cedc6b50..d22c8c37d5 100644 --- a/source/dnode/vnode/src/vnd/vnodeSvr.c +++ b/source/dnode/vnode/src/vnd/vnodeSvr.c @@ -144,7 +144,7 @@ _err: int vnodeProcessQueryMsg(SVnode *pVnode, SRpcMsg *pMsg) { vTrace("message in vnode query queue is processing"); - SReadHandle handle = {.reader = pVnode->pTsdb, .meta = pVnode->pMeta, .config = &pVnode->config}; + SReadHandle handle = {.reader = pVnode->pTsdb, .meta = pVnode->pMeta, .config = &pVnode->config, .vnode = pVnode}; switch (pMsg->msgType) { case TDMT_VND_QUERY: diff --git a/source/libs/executor/inc/executorimpl.h b/source/libs/executor/inc/executorimpl.h index b841224fe4..7a6432a06c 100644 --- a/source/libs/executor/inc/executorimpl.h +++ b/source/libs/executor/inc/executorimpl.h @@ -380,7 +380,7 @@ typedef struct SStreamBlockScanInfo { typedef struct SSysTableScanInfo { union { void* pTransporter; - void* readHandle; + SReadHandle readHandle; }; SRetrieveMetaTableRsp* pRsp; diff --git a/source/libs/executor/src/executorimpl.c b/source/libs/executor/src/executorimpl.c index 44c46785cc..acbf8b05f6 100644 --- a/source/libs/executor/src/executorimpl.c +++ b/source/libs/executor/src/executorimpl.c @@ -6497,7 +6497,7 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo SArray* colList = extractScanColumnId(pScanNode->pScanCols); SOperatorInfo* pOperator = createSysTableScanOperatorInfo( - pHandle->meta, pResBlock, &pScanNode->tableName, pScanNode->node.pConditions, pSysScanPhyNode->mgmtEpSet, + pHandle, pResBlock, &pScanNode->tableName, pScanNode->node.pConditions, pSysScanPhyNode->mgmtEpSet, colList, pTaskInfo, pSysScanPhyNode->showRewrite, pSysScanPhyNode->accountId); return pOperator; } else { diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index f4eee01007..9600cbc99a 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -811,7 +811,7 @@ static SSDataBlock* doSysTableScan(SOperatorInfo* pOperator, bool* newgroup) { const char* name = tNameGetTableName(&pInfo->name); if (strncasecmp(name, TSDB_INS_TABLE_USER_TABLES, TSDB_TABLE_FNAME_LEN) == 0) { if (pInfo->pCur == NULL) { - pInfo->pCur = metaOpenTbCursor(pInfo->readHandle); + pInfo->pCur = metaOpenTbCursor(pInfo->readHandle.meta); } blockDataCleanup(pInfo->pRes); @@ -819,32 +819,93 @@ static SSDataBlock* doSysTableScan(SOperatorInfo* pOperator, bool* newgroup) { int32_t tableNameSlotId = 1; SColumnInfoData* pTableNameCol = taosArrayGet(pInfo->pRes->pDataBlock, tableNameSlotId); - char* tb = NULL; int32_t numOfRows = 0; + const char* db = NULL; + int32_t vgId = 0; + vnodeGetInfo(pInfo->readHandle.vnode, &db, &vgId); + + SName sn = {0}; + char dbname[TSDB_DB_FNAME_LEN + VARSTR_HEADER_SIZE] = {0}; + tNameFromString(&sn, db, T_NAME_ACCT|T_NAME_DB); + + tNameGetDbName(&sn, varDataVal(dbname)); + varDataSetLen(dbname, strlen(varDataVal(dbname))); + char n[TSDB_TABLE_NAME_LEN] = {0}; while (metaTbCursorNext(pInfo->pCur) == 0) { STR_TO_VARSTR(n, pInfo->pCur->mr.me.name); colDataAppend(pTableNameCol, numOfRows, n, false); - numOfRows += 1; - if (numOfRows >= pInfo->capacity) { - break; + + int32_t tableType = pInfo->pCur->mr.me.type; + + // database name + SColumnInfoData* pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 0); + colDataAppend(pColInfoData, numOfRows, dbname, false); + + // vgId + pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 6); + colDataAppend(pColInfoData, numOfRows, (char*) &vgId, false); + + // table comment + // todo: set the correct comment + pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 8); + colDataAppendNULL(pColInfoData, numOfRows); + + char typestr[256] = {0}; + if (tableType == TSDB_CHILD_TABLE) { + SMetaReader mr = {0}; + + metaReaderInit(&mr, pInfo->readHandle.meta, 0); +// metaGetTableEntryByUid(&mr, pInfo->pCur->mr.me.ctbEntry.suid); + metaReaderClear(&mr); + + pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 3); + colDataAppend(pColInfoData, numOfRows, (char*) &mr.me.stbEntry.schema.nCols, false); + + // create time + int64_t ts = pInfo->pCur->mr.me.ctbEntry.ctime; + pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 2); + colDataAppend(pColInfoData, numOfRows, (char*) &ts, false); + + // uid + pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 5); + colDataAppend(pColInfoData, numOfRows, (char*) &pInfo->pCur->mr.me.uid, false); + + // ttl + pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 7); + colDataAppend(pColInfoData, numOfRows, (char*) &pInfo->pCur->mr.me.ctbEntry.ttlDays, false); + + STR_TO_VARSTR(typestr, "CHILD_TABLE"); + } else if (tableType == TSDB_NORMAL_TABLE) { + // create time + pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 2); + colDataAppend(pColInfoData, numOfRows, (char*) &pInfo->pCur->mr.me.ntbEntry.ctime, false); + + // number of columns + pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 3); + colDataAppend(pColInfoData, numOfRows, (char*) &pInfo->pCur->mr.me.ntbEntry.schema.nCols, false); + + // super table name + pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 4); + colDataAppendNULL(pColInfoData, numOfRows); + + // uid + pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 5); + colDataAppend(pColInfoData, numOfRows, (char*) &pInfo->pCur->mr.me.uid, false); + + // ttl + pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 7); + colDataAppend(pColInfoData, numOfRows, (char*) &pInfo->pCur->mr.me.ntbEntry.ttlDays, false); + + STR_TO_VARSTR(typestr, "NORMAL_TABLE"); } - for (int32_t i = 0; i < pInfo->pRes->info.numOfCols; ++i) { - if (i == tableNameSlotId) { - continue; - } + pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 9); + colDataAppend(pColInfoData, numOfRows, typestr, false); - SColumnInfoData* pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, i); - int64_t tmp = 0; - char t[10] = {0}; - STR_TO_VARSTR(t, "_"); // TODO - if (IS_VAR_DATA_TYPE(pColInfoData->info.type)) { - colDataAppend(pColInfoData, numOfRows, t, false); - } else { - colDataAppend(pColInfoData, numOfRows, (char*)&tmp, false); - } + if (++numOfRows >= pInfo->capacity) { + break; } } @@ -923,7 +984,7 @@ static SSDataBlock* doSysTableScan(SOperatorInfo* pOperator, bool* newgroup) { } } -SOperatorInfo* createSysTableScanOperatorInfo(void* pSysTableReadHandle, SSDataBlock* pResBlock, const SName* pName, +SOperatorInfo* createSysTableScanOperatorInfo(void* readHandle, SSDataBlock* pResBlock, const SName* pName, SNode* pCondition, SEpSet epset, SArray* colList, SExecTaskInfo* pTaskInfo, bool showRewrite, int32_t accountId) { SSysTableScanInfo* pInfo = taosMemoryCalloc(1, sizeof(SSysTableScanInfo)); @@ -945,7 +1006,7 @@ SOperatorInfo* createSysTableScanOperatorInfo(void* pSysTableReadHandle, SSDataB tNameAssign(&pInfo->name, pName); const char* name = tNameGetTableName(&pInfo->name); if (strncasecmp(name, TSDB_INS_TABLE_USER_TABLES, TSDB_TABLE_FNAME_LEN) == 0) { - pInfo->readHandle = pSysTableReadHandle; + pInfo->readHandle = *(SReadHandle*) readHandle; blockDataEnsureCapacity(pInfo->pRes, pInfo->capacity); } else { tsem_init(&pInfo->ready, 0, 0); From 0444f0835e1139eba02683bfa9e20511f1875b1a Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Wed, 27 Apr 2022 15:31:04 +0800 Subject: [PATCH 2/3] fix(query): add super table related information in show tables; --- source/libs/executor/src/executorimpl.c | 1 - source/libs/executor/src/scanoperator.c | 18 +++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/source/libs/executor/src/executorimpl.c b/source/libs/executor/src/executorimpl.c index acbf8b05f6..3206bf211d 100644 --- a/source/libs/executor/src/executorimpl.c +++ b/source/libs/executor/src/executorimpl.c @@ -3738,7 +3738,6 @@ static int32_t doSendFetchDataRequest(SExchangeInfo* pExchangeInfo, SExecTaskInf return TSDB_CODE_SUCCESS; } -// TODO if only one or two columns required, how to extract data? int32_t setSDataBlockFromFetchRsp(SSDataBlock* pRes, SLoadRemoteDataInfo* pLoadInfo, int32_t numOfRows, char* pData, int32_t compLen, int32_t numOfOutput, int64_t startTs, uint64_t* total, SArray* pColList) { diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index 9600cbc99a..022ba9d872 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -852,13 +852,11 @@ static SSDataBlock* doSysTableScan(SOperatorInfo* pOperator, bool* newgroup) { pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 8); colDataAppendNULL(pColInfoData, numOfRows); - char typestr[256] = {0}; + char str[256] = {0}; if (tableType == TSDB_CHILD_TABLE) { SMetaReader mr = {0}; - metaReaderInit(&mr, pInfo->readHandle.meta, 0); -// metaGetTableEntryByUid(&mr, pInfo->pCur->mr.me.ctbEntry.suid); - metaReaderClear(&mr); + metaGetTableEntryByUid(&mr, pInfo->pCur->mr.me.ctbEntry.suid); pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 3); colDataAppend(pColInfoData, numOfRows, (char*) &mr.me.stbEntry.schema.nCols, false); @@ -868,6 +866,12 @@ static SSDataBlock* doSysTableScan(SOperatorInfo* pOperator, bool* newgroup) { pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 2); colDataAppend(pColInfoData, numOfRows, (char*) &ts, false); + // super table name + STR_TO_VARSTR(str, mr.me.name); + pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 4); + colDataAppend(pColInfoData, numOfRows, str, false); + metaReaderClear(&mr); + // uid pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 5); colDataAppend(pColInfoData, numOfRows, (char*) &pInfo->pCur->mr.me.uid, false); @@ -876,7 +880,7 @@ static SSDataBlock* doSysTableScan(SOperatorInfo* pOperator, bool* newgroup) { pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 7); colDataAppend(pColInfoData, numOfRows, (char*) &pInfo->pCur->mr.me.ctbEntry.ttlDays, false); - STR_TO_VARSTR(typestr, "CHILD_TABLE"); + STR_TO_VARSTR(str, "CHILD_TABLE"); } else if (tableType == TSDB_NORMAL_TABLE) { // create time pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 2); @@ -898,11 +902,11 @@ static SSDataBlock* doSysTableScan(SOperatorInfo* pOperator, bool* newgroup) { pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 7); colDataAppend(pColInfoData, numOfRows, (char*) &pInfo->pCur->mr.me.ntbEntry.ttlDays, false); - STR_TO_VARSTR(typestr, "NORMAL_TABLE"); + STR_TO_VARSTR(str, "NORMAL_TABLE"); } pColInfoData = taosArrayGet(pInfo->pRes->pDataBlock, 9); - colDataAppend(pColInfoData, numOfRows, typestr, false); + colDataAppend(pColInfoData, numOfRows, str, false); if (++numOfRows >= pInfo->capacity) { break; From 3db512e08f6120e690f65a09d48a8d7007356e13 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Wed, 27 Apr 2022 16:37:19 +0800 Subject: [PATCH 3/3] refactor(query): do some internal refactor. --- source/libs/executor/src/executorimpl.c | 84 ++++++++++++------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/source/libs/executor/src/executorimpl.c b/source/libs/executor/src/executorimpl.c index 3206bf211d..f6b1839f68 100644 --- a/source/libs/executor/src/executorimpl.c +++ b/source/libs/executor/src/executorimpl.c @@ -3738,6 +3738,32 @@ static int32_t doSendFetchDataRequest(SExchangeInfo* pExchangeInfo, SExecTaskInf return TSDB_CODE_SUCCESS; } +// NOTE: sources columns are more than the destination SSDatablock columns. +static void relocateColumnData(SSDataBlock* pBlock, const SArray* pColMatchInfo, SArray* pCols) { + size_t numOfSrcCols = taosArrayGetSize(pCols); + ASSERT(numOfSrcCols >= pBlock->info.numOfCols); + + int32_t i = 0, j = 0; + while(i < numOfSrcCols && j < taosArrayGetSize(pColMatchInfo)) { + SColumnInfoData* p = taosArrayGet(pCols, i); + SColMatchInfo* pmInfo = taosArrayGet(pColMatchInfo, j); + if (!pmInfo->output) { + j++; + continue; + } + + if (p->info.colId == pmInfo->colId) { + taosArraySet(pBlock->pDataBlock, pmInfo->targetSlotId, p); + i++; + j++; + } else if (p->info.colId < pmInfo->colId) { + i++; + } else { + ASSERT(0); + } + } +} + int32_t setSDataBlockFromFetchRsp(SSDataBlock* pRes, SLoadRemoteDataInfo* pLoadInfo, int32_t numOfRows, char* pData, int32_t compLen, int32_t numOfOutput, int64_t startTs, uint64_t* total, SArray* pColList) { @@ -3755,7 +3781,7 @@ int32_t setSDataBlockFromFetchRsp(SSDataBlock* pRes, SLoadRemoteDataInfo* pLoadI char* pStart = pData + sizeof(int32_t) * numOfOutput; for (int32_t i = 0; i < numOfOutput; ++i) { colLen[i] = htonl(colLen[i]); - ASSERT(colLen[i] > 0); + ASSERT(colLen[i] >= 0); SColumnInfoData* pColInfoData = taosArrayGet(pRes->pDataBlock, i); if (IS_VAR_DATA_TYPE(pColInfoData->info.type)) { @@ -3765,13 +3791,18 @@ int32_t setSDataBlockFromFetchRsp(SSDataBlock* pRes, SLoadRemoteDataInfo* pLoadI memcpy(pColInfoData->varmeta.offset, pStart, sizeof(int32_t) * numOfRows); pStart += sizeof(int32_t) * numOfRows; - pColInfoData->pData = taosMemoryMalloc(colLen[i]); + if (colLen[i] > 0) { + pColInfoData->pData = taosMemoryMalloc(colLen[i]); + } } else { memcpy(pColInfoData->nullbitmap, pStart, BitmapLen(numOfRows)); pStart += BitmapLen(numOfRows); } - memcpy(pColInfoData->pData, pStart, colLen[i]); + if (colLen[i] > 0) { + memcpy(pColInfoData->pData, pStart, colLen[i]); + } + //TODO setting this flag to true temporarily so aggregate function on stable will //examine NULL value for non-primary key column pColInfoData->hasNull = true; @@ -3784,6 +3815,7 @@ int32_t setSDataBlockFromFetchRsp(SSDataBlock* pRes, SLoadRemoteDataInfo* pLoadI int32_t numOfCols = htonl(*(int32_t*)pStart); pStart += sizeof(int32_t); + // todo refactor:extract method SSysTableSchema* pSchema = (SSysTableSchema*)pStart; for (int32_t i = 0; i < numOfCols; ++i) { SSysTableSchema* p = (SSysTableSchema*)pStart; @@ -3838,19 +3870,7 @@ int32_t setSDataBlockFromFetchRsp(SSDataBlock* pRes, SLoadRemoteDataInfo* pLoadI } // data from mnode - for (int32_t i = 0; i < numOfCols; ++i) { - SColumnInfoData* pSrc = taosArrayGet(block.pDataBlock, i); - - for (int32_t j = 0; j < numOfOutput; ++j) { - int16_t colIndex = *(int16_t*)taosArrayGet(pColList, j); - - if (colIndex - 1 == i) { - SColumnInfoData* pColInfoData = taosArrayGet(pRes->pDataBlock, j); - colDataAssign(pColInfoData, pSrc, numOfRows); - break; - } - } - } + relocateColumnData(pRes, pColList, block.pDataBlock); } pRes->info.rows = numOfRows; @@ -6422,7 +6442,6 @@ static tsdbReaderT doCreateDataReader(STableScanPhysiNode* pTableScanNode, SRead static int32_t doCreateTableGroup(void* metaHandle, int32_t tableType, uint64_t tableUid, STableGroupInfo* pGroupInfo, uint64_t queryId, uint64_t taskId); static SArray* extractTableIdList(const STableGroupInfo* pTableGroupInfo); -static SArray* extractScanColumnId(SNodeList* pNodeList); static SArray* extractColumnInfo(SNodeList* pNodeList); static SArray* extractColMatchInfo(SNodeList* pNodeList, SDataBlockDescNode* pOutputNodeList, int32_t* numOfOutputCols); @@ -6493,8 +6512,9 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo SScanPhysiNode* pScanNode = &pSysScanPhyNode->scan; SSDataBlock* pResBlock = createResDataBlock(pScanNode->node.pOutputDataBlockDesc); - SArray* colList = extractScanColumnId(pScanNode->pScanCols); + int32_t numOfOutputCols = 0; + SArray* colList = extractColMatchInfo(pScanNode->pScanCols, pScanNode->node.pOutputDataBlockDesc, &numOfOutputCols); SOperatorInfo* pOperator = createSysTableScanOperatorInfo( pHandle, pResBlock, &pScanNode->tableName, pScanNode->node.pConditions, pSysScanPhyNode->mgmtEpSet, colList, pTaskInfo, pSysScanPhyNode->showRewrite, pSysScanPhyNode->accountId); @@ -6657,28 +6677,6 @@ static int32_t initQueryTableDataCond(SQueryTableDataCond* pCond, const STableS return TSDB_CODE_SUCCESS; } -SArray* extractScanColumnId(SNodeList* pNodeList) { - size_t numOfCols = LIST_LENGTH(pNodeList); - SArray* pList = taosArrayInit(numOfCols, sizeof(int16_t)); - if (pList == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return NULL; - } - - for (int32_t i = 0; i < numOfCols; ++i) { - for (int32_t j = 0; j < numOfCols; ++j) { - STargetNode* pNode = (STargetNode*)nodesListGetNode(pNodeList, j); - if (pNode->slotId == i) { - SColumnNode* pColNode = (SColumnNode*)pNode->pExpr; - taosArrayPush(pList, &pColNode->colId); - break; - } - } - } - - return pList; -} - SArray* extractColumnInfo(SNodeList* pNodeList) { size_t numOfCols = LIST_LENGTH(pNodeList); SArray* pList = taosArrayInit(numOfCols, sizeof(SColumn)); @@ -6814,9 +6812,9 @@ SArray* extractColMatchInfo(SNodeList* pNodeList, SDataBlockDescNode* pOutputNod SColumnNode* pColNode = (SColumnNode*)pNode->pExpr; SColMatchInfo c = {0}; + c.output = true; c.colId = pColNode->colId; c.targetSlotId = pNode->slotId; - c.output = true; taosArrayPush(pList, &c); } @@ -6824,8 +6822,10 @@ SArray* extractColMatchInfo(SNodeList* pNodeList, SDataBlockDescNode* pOutputNod int32_t num = LIST_LENGTH(pOutputNodeList->pSlots); for (int32_t i = 0; i < num; ++i) { SSlotDescNode* pNode = (SSlotDescNode*)nodesListGetNode(pOutputNodeList->pSlots, i); + // todo: add reserve flag check - if (pNode->slotId >= numOfCols) { // it is a column reserved for the arithmetic expression calculation + // it is a column reserved for the arithmetic expression calculation + if (pNode->slotId >= numOfCols) { (*numOfOutputCols) += 1; continue; }