fix(tsdb): set correct pk info when creating cache scan operator.
This commit is contained in:
parent
e5dddc4abf
commit
00fa4e7f0c
|
@ -87,8 +87,11 @@ static void setColIdForCacheReadBlock(SSDataBlock* pBlock, SLastRowScanPhysiNode
|
|||
SOperatorInfo* createCacherowsScanOperator(SLastRowScanPhysiNode* pScanNode, SReadHandle* readHandle,
|
||||
STableListInfo* pTableListInfo, SExecTaskInfo* pTaskInfo) {
|
||||
int32_t code = TSDB_CODE_SUCCESS;
|
||||
int32_t numOfCols = 0;
|
||||
SNodeList* pScanCols = pScanNode->scan.pScanCols;
|
||||
SCacheRowsScanInfo* pInfo = taosMemoryCalloc(1, sizeof(SCacheRowsScanInfo));
|
||||
SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo));
|
||||
|
||||
if (pInfo == NULL || pOperator == NULL) {
|
||||
code = TSDB_CODE_OUT_OF_MEMORY;
|
||||
tableListDestroy(pTableListInfo);
|
||||
|
@ -101,22 +104,32 @@ SOperatorInfo* createCacherowsScanOperator(SLastRowScanPhysiNode* pScanNode, SRe
|
|||
SDataBlockDescNode* pDescNode = pScanNode->scan.node.pOutputDataBlockDesc;
|
||||
pInfo->pRes = createDataBlockFromDescNode(pDescNode);
|
||||
|
||||
int32_t numOfCols = 0;
|
||||
code =
|
||||
extractColMatchInfo(pScanNode->scan.pScanCols, pDescNode, &numOfCols, COL_MATCH_FROM_COL_ID, &pInfo->matchInfo);
|
||||
code = extractColMatchInfo(pScanCols, pDescNode, &numOfCols, COL_MATCH_FROM_COL_ID, &pInfo->matchInfo);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
goto _error;
|
||||
}
|
||||
|
||||
// todd: the pk information should comes from the physical plan
|
||||
for(int32_t i = 0; i < taosArrayGetSize(pInfo->matchInfo.pList); ++i) {
|
||||
SColMatchItem* pItem = taosArrayGet(pInfo->matchInfo.pList, i);
|
||||
if (pItem->isPk) {
|
||||
pInfo->numOfPks += 1;
|
||||
pInfo->pkCol.type = pItem->dataType.type; // only record one primary key
|
||||
pInfo->pkCol.bytes = pItem->dataType.bytes; // only record one primary key
|
||||
// todo: the pk information should comes from the physical plan
|
||||
// pk info may not in pScanCols, so extract primary key from pInfo->matchInfo may failed
|
||||
SSchemaInfo* pSchemaInfo = taosArrayGet(pTaskInfo->schemaInfos, 0);
|
||||
if (pSchemaInfo != NULL) {
|
||||
if (pSchemaInfo->sw->pSchema[1].flags & COL_IS_KEY) { // is primary key
|
||||
SSchema* pColSchema = &pSchemaInfo->sw->pSchema[1];
|
||||
pInfo->numOfPks = 1;
|
||||
pInfo->pkCol.type = pColSchema->type;
|
||||
pInfo->pkCol.bytes = pColSchema->bytes;
|
||||
pInfo->pkCol.pk = 1;
|
||||
}
|
||||
} else {
|
||||
for(int32_t i = 0; i < taosArrayGetSize(pInfo->matchInfo.pList); ++i) {
|
||||
SColMatchItem* pItem = taosArrayGet(pInfo->matchInfo.pList, i);
|
||||
if (pItem->isPk) {
|
||||
pInfo->numOfPks += 1;
|
||||
pInfo->pkCol.type = pItem->dataType.type; // only record one primary key
|
||||
pInfo->pkCol.bytes = pItem->dataType.bytes; // only record one primary key
|
||||
pInfo->pkCol.pk = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SArray* pCidList = taosArrayInit(numOfCols, sizeof(int16_t));
|
||||
|
|
Loading…
Reference in New Issue