@@ -568,7 +568,8 @@ int32_t vtableAddTagPseudoColumnData(SVirtualTableScanInfo *pInfo, const SExprIn
568
568
}
569
569
570
570
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 );
572
573
}
573
574
574
575
backupRows = pBlock -> info .rows ;
@@ -578,29 +579,34 @@ int32_t vtableAddTagPseudoColumnData(SVirtualTableScanInfo *pInfo, const SExprIn
578
579
int32_t dstSlotId = pExpr1 -> base .resSchema .slotId ;
579
580
580
581
SColumnInfoData * pColInfoData = taosArrayGet (pBlock -> pDataBlock , dstSlotId );
582
+ TSDB_CHECK_NULL (pColInfoData , code , lino , _return , terrno );
581
583
colInfoDataCleanup (pColInfoData , pBlock -> info .rows );
582
584
583
585
SColumnInfoData * pTagInfoData = taosArrayGet (tagBlock -> pDataBlock , j );
584
- char * data = colDataGetData ( pTagInfoData , 0 );
586
+ TSDB_CHECK_NULL ( pTagInfoData , code , lino , _return , terrno );
585
587
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 ))) {
588
589
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 ) {
590
596
code = colDataSetNItems (pColInfoData , 0 , data , pBlock -> info .rows , false);
591
- QUERY_CHECK_CODE (code , lino , _end );
597
+ QUERY_CHECK_CODE (code , lino , _return );
592
598
} else { // todo opt for json tag
593
599
for (int32_t i = 0 ; i < pBlock -> info .rows ; ++ i ) {
594
600
code = colDataSetVal (pColInfoData , i , data , false);
595
- QUERY_CHECK_CODE (code , lino , _end );
601
+ QUERY_CHECK_CODE (code , lino , _return );
596
602
}
597
603
}
598
604
}
599
605
600
606
// restore the rows
601
607
pBlock -> info .rows = backupRows ;
602
608
603
- _end :
609
+ _return :
604
610
605
611
if (code != TSDB_CODE_SUCCESS ) {
606
612
qError ("%s failed at line %d since %s" , __func__ , lino , tstrerror (code ));
0 commit comments