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