Skip to content

Commit b0a33e3

Browse files
committed
feat: [TS-6100] Fix vtable tag error when tag is null
1 parent 6f44e79 commit b0a33e3

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

source/libs/executor/src/virtualtablescanoperator.c

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -568,7 +568,8 @@ int32_t vtableAddTagPseudoColumnData(SVirtualTableScanInfo *pInfo, const SExprIn
568568
}
569569

570570
if (tagBlock->info.rows != 1) {
571-
return TSDB_CODE_FAILED;
571+
qError("tag block should have only one row, current rows:%" PRId64, tagBlock->info.rows);
572+
VTS_ERR_JRET(TSDB_CODE_VTABLE_SCAN_INTERNAL_ERROR);
572573
}
573574

574575
backupRows = pBlock->info.rows;
@@ -578,29 +579,34 @@ int32_t vtableAddTagPseudoColumnData(SVirtualTableScanInfo *pInfo, const SExprIn
578579
int32_t dstSlotId = pExpr1->base.resSchema.slotId;
579580

580581
SColumnInfoData* pColInfoData = taosArrayGet(pBlock->pDataBlock, dstSlotId);
582+
TSDB_CHECK_NULL(pColInfoData, code, lino, _return, terrno);
581583
colInfoDataCleanup(pColInfoData, pBlock->info.rows);
582584

583585
SColumnInfoData* pTagInfoData = taosArrayGet(tagBlock->pDataBlock, j);
584-
char* data = colDataGetData(pTagInfoData, 0);
586+
TSDB_CHECK_NULL(pTagInfoData, code, lino, _return, terrno);
585587

586-
bool isNullVal = (data == NULL) || (pColInfoData->info.type == TSDB_DATA_TYPE_JSON && tTagIsJsonNull(data));
587-
if (isNullVal) {
588+
if (colDataIsNull_s(pTagInfoData, 0) || IS_JSON_NULL(pTagInfoData->info.type, colDataGetData(pTagInfoData, 0))) {
588589
colDataSetNNULL(pColInfoData, 0, pBlock->info.rows);
589-
} else if (pColInfoData->info.type != TSDB_DATA_TYPE_JSON) {
590+
continue;
591+
}
592+
593+
char* data = colDataGetData(pTagInfoData, 0);
594+
595+
if (pColInfoData->info.type != TSDB_DATA_TYPE_JSON) {
590596
code = colDataSetNItems(pColInfoData, 0, data, pBlock->info.rows, false);
591-
QUERY_CHECK_CODE(code, lino, _end);
597+
QUERY_CHECK_CODE(code, lino, _return);
592598
} else { // todo opt for json tag
593599
for (int32_t i = 0; i < pBlock->info.rows; ++i) {
594600
code = colDataSetVal(pColInfoData, i, data, false);
595-
QUERY_CHECK_CODE(code, lino, _end);
601+
QUERY_CHECK_CODE(code, lino, _return);
596602
}
597603
}
598604
}
599605

600606
// restore the rows
601607
pBlock->info.rows = backupRows;
602608

603-
_end:
609+
_return:
604610

605611
if (code != TSDB_CODE_SUCCESS) {
606612
qError("%s failed at line %d since %s", __func__, lino, tstrerror(code));

0 commit comments

Comments
 (0)