Skip to content

Commit 2e2897f

Browse files
Merge pull request #29166 from taosdata/fix/m/TD-33223
fix null type caused query error and fix show create table crash
2 parents f2f6ff0 + 25c345a commit 2e2897f

File tree

7 files changed

+67
-24
lines changed

7 files changed

+67
-24
lines changed

source/common/src/ttypes.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
#include "tcompression.h"
1919

2020
const int32_t TYPE_BYTES[21] = {
21-
-1, // TSDB_DATA_TYPE_NULL
21+
2, // TSDB_DATA_TYPE_NULL
2222
CHAR_BYTES, // TSDB_DATA_TYPE_BOOL
2323
CHAR_BYTES, // TSDB_DATA_TYPE_TINYINT
2424
SHORT_BYTES, // TSDB_DATA_TYPE_SMALLINT
@@ -42,7 +42,7 @@ const int32_t TYPE_BYTES[21] = {
4242
};
4343

4444
tDataTypeDescriptor tDataTypes[TSDB_DATA_TYPE_MAX] = {
45-
{TSDB_DATA_TYPE_NULL, 6, 1, "NOTYPE", 0, 0, NULL, NULL},
45+
{TSDB_DATA_TYPE_NULL, 6, 2, "NOTYPE", 0, 0, NULL, NULL},
4646
{TSDB_DATA_TYPE_BOOL, 4, CHAR_BYTES, "BOOL", false, true, tsCompressBool, tsDecompressBool},
4747
{TSDB_DATA_TYPE_TINYINT, 7, CHAR_BYTES, "TINYINT", INT8_MIN, INT8_MAX, tsCompressTinyint, tsDecompressTinyint},
4848
{TSDB_DATA_TYPE_SMALLINT, 8, SHORT_BYTES, "SMALLINT", INT16_MIN, INT16_MAX, tsCompressSmallint,

source/libs/catalog/inc/catalogInt.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -497,6 +497,8 @@ typedef struct SCtgAsyncFps {
497497
ctgDumpTaskResFp dumpResFp;
498498
ctgCompTaskFp compFp;
499499
ctgCloneTaskResFp cloneFp;
500+
int32_t subTaskFactor; // to indicate how many sub tasks this task will generate by ctgLaunchSubTask
501+
// default to 1, means no sub task, 2 means 1 sub task, 3 means 2 sub tasks...
500502
} SCtgAsyncFps;
501503

502504
typedef struct SCtgApiStat {

source/libs/catalog/src/ctgAsync.c

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -861,6 +861,16 @@ int32_t ctgInitJob(SCatalog* pCtg, SRequestConnInfo* pConn, SCtgJob** job, const
861861

862862
int32_t taskNum = tbMetaNum + dbVgNum + udfNum + tbHashNum + qnodeNum + dnodeNum + svrVerNum + dbCfgNum + indexNum +
863863
userNum + dbInfoNum + tbIndexNum + tbCfgNum + tbTagNum + viewNum + tbTsmaNum + tbNameNum;
864+
int32_t taskNumWithSubTasks = tbMetaNum * gCtgAsyncFps[CTG_TASK_GET_TB_META].subTaskFactor + dbVgNum * gCtgAsyncFps[CTG_TASK_GET_DB_VGROUP].subTaskFactor +
865+
udfNum * gCtgAsyncFps[CTG_TASK_GET_UDF].subTaskFactor + tbHashNum * gCtgAsyncFps[CTG_TASK_GET_TB_HASH].subTaskFactor +
866+
qnodeNum * gCtgAsyncFps[CTG_TASK_GET_QNODE].subTaskFactor + dnodeNum * gCtgAsyncFps[CTG_TASK_GET_DNODE].subTaskFactor +
867+
svrVerNum * gCtgAsyncFps[CTG_TASK_GET_SVR_VER].subTaskFactor + dbCfgNum * gCtgAsyncFps[CTG_TASK_GET_DB_CFG].subTaskFactor +
868+
indexNum * gCtgAsyncFps[CTG_TASK_GET_INDEX_INFO].subTaskFactor + userNum * gCtgAsyncFps[CTG_TASK_GET_USER].subTaskFactor +
869+
dbInfoNum * gCtgAsyncFps[CTG_TASK_GET_DB_INFO].subTaskFactor + tbIndexNum * gCtgAsyncFps[CTG_TASK_GET_TB_SMA_INDEX].subTaskFactor +
870+
tbCfgNum * gCtgAsyncFps[CTG_TASK_GET_TB_CFG].subTaskFactor + tbTagNum * gCtgAsyncFps[CTG_TASK_GET_TB_TAG].subTaskFactor +
871+
viewNum * gCtgAsyncFps[CTG_TASK_GET_VIEW].subTaskFactor + tbTsmaNum * gCtgAsyncFps[CTG_TASK_GET_TB_TSMA].subTaskFactor +
872+
tsmaNum * gCtgAsyncFps[CTG_TASK_GET_TSMA].subTaskFactor + tbNameNum * gCtgAsyncFps[CTG_TASK_GET_TB_NAME].subTaskFactor;
873+
864874
*job = taosMemoryCalloc(1, sizeof(SCtgJob));
865875
if (NULL == *job) {
866876
ctgError("failed to calloc, size:%d,QID:0x%" PRIx64, (int32_t)sizeof(SCtgJob), pConn->requestId);
@@ -905,7 +915,7 @@ int32_t ctgInitJob(SCatalog* pCtg, SRequestConnInfo* pConn, SCtgJob** job, const
905915
}
906916
#endif
907917

908-
pJob->pTasks = taosArrayInit(taskNum, sizeof(SCtgTask));
918+
pJob->pTasks = taosArrayInit(taskNumWithSubTasks, sizeof(SCtgTask));
909919
if (NULL == pJob->pTasks) {
910920
ctgError("taosArrayInit %d tasks failed", taskNum);
911921
CTG_ERR_JRET(terrno);
@@ -4178,27 +4188,27 @@ int32_t ctgCloneDbVg(SCtgTask* pTask, void** pRes) {
41784188
}
41794189

41804190
SCtgAsyncFps gCtgAsyncFps[] = {
4181-
{ctgInitGetQnodeTask, ctgLaunchGetQnodeTask, ctgHandleGetQnodeRsp, ctgDumpQnodeRes, NULL, NULL},
4182-
{ctgInitGetDnodeTask, ctgLaunchGetDnodeTask, ctgHandleGetDnodeRsp, ctgDumpDnodeRes, NULL, NULL},
4183-
{ctgInitGetDbVgTask, ctgLaunchGetDbVgTask, ctgHandleGetDbVgRsp, ctgDumpDbVgRes, ctgCompDbVgTasks, ctgCloneDbVg},
4184-
{ctgInitGetDbCfgTask, ctgLaunchGetDbCfgTask, ctgHandleGetDbCfgRsp, ctgDumpDbCfgRes, NULL, NULL},
4185-
{ctgInitGetDbInfoTask, ctgLaunchGetDbInfoTask, ctgHandleGetDbInfoRsp, ctgDumpDbInfoRes, NULL, NULL},
4191+
{ctgInitGetQnodeTask, ctgLaunchGetQnodeTask, ctgHandleGetQnodeRsp, ctgDumpQnodeRes, NULL, NULL, 1},
4192+
{ctgInitGetDnodeTask, ctgLaunchGetDnodeTask, ctgHandleGetDnodeRsp, ctgDumpDnodeRes, NULL, NULL, 1},
4193+
{ctgInitGetDbVgTask, ctgLaunchGetDbVgTask, ctgHandleGetDbVgRsp, ctgDumpDbVgRes, ctgCompDbVgTasks, ctgCloneDbVg, 1},
4194+
{ctgInitGetDbCfgTask, ctgLaunchGetDbCfgTask, ctgHandleGetDbCfgRsp, ctgDumpDbCfgRes, NULL, NULL, 1},
4195+
{ctgInitGetDbInfoTask, ctgLaunchGetDbInfoTask, ctgHandleGetDbInfoRsp, ctgDumpDbInfoRes, NULL, NULL, 1},
41864196
{ctgInitGetTbMetaTask, ctgLaunchGetTbMetaTask, ctgHandleGetTbMetaRsp, ctgDumpTbMetaRes, ctgCompTbMetaTasks,
4187-
ctgCloneTbMeta},
4188-
{ctgInitGetTbHashTask, ctgLaunchGetTbHashTask, ctgHandleGetTbHashRsp, ctgDumpTbHashRes, NULL, NULL},
4189-
{ctgInitGetTbIndexTask, ctgLaunchGetTbIndexTask, ctgHandleGetTbIndexRsp, ctgDumpTbIndexRes, NULL, NULL},
4190-
{ctgInitGetTbCfgTask, ctgLaunchGetTbCfgTask, ctgHandleGetTbCfgRsp, ctgDumpTbCfgRes, NULL, NULL},
4191-
{ctgInitGetIndexTask, ctgLaunchGetIndexTask, ctgHandleGetIndexRsp, ctgDumpIndexRes, NULL, NULL},
4192-
{ctgInitGetUdfTask, ctgLaunchGetUdfTask, ctgHandleGetUdfRsp, ctgDumpUdfRes, NULL, NULL},
4193-
{ctgInitGetUserTask, ctgLaunchGetUserTask, ctgHandleGetUserRsp, ctgDumpUserRes, NULL, NULL},
4194-
{ctgInitGetSvrVerTask, ctgLaunchGetSvrVerTask, ctgHandleGetSvrVerRsp, ctgDumpSvrVer, NULL, NULL},
4195-
{ctgInitGetTbMetasTask, ctgLaunchGetTbMetasTask, ctgHandleGetTbMetasRsp, ctgDumpTbMetasRes, NULL, NULL},
4196-
{ctgInitGetTbHashsTask, ctgLaunchGetTbHashsTask, ctgHandleGetTbHashsRsp, ctgDumpTbHashsRes, NULL, NULL},
4197-
{ctgInitGetTbTagTask, ctgLaunchGetTbTagTask, ctgHandleGetTbTagRsp, ctgDumpTbTagRes, NULL, NULL},
4198-
{ctgInitGetViewsTask, ctgLaunchGetViewsTask, ctgHandleGetViewsRsp, ctgDumpViewsRes, NULL, NULL},
4199-
{ctgInitGetTbTSMATask, ctgLaunchGetTbTSMATask, ctgHandleGetTbTSMARsp, ctgDumpTbTSMARes, NULL, NULL},
4200-
{ctgInitGetTSMATask, ctgLaunchGetTSMATask, ctgHandleGetTSMARsp, ctgDumpTSMARes, NULL, NULL},
4201-
{ctgInitGetTbNamesTask, ctgLaunchGetTbNamesTask, ctgHandleGetTbNamesRsp, ctgDumpTbNamesRes, NULL, NULL},
4197+
ctgCloneTbMeta, 1},
4198+
{ctgInitGetTbHashTask, ctgLaunchGetTbHashTask, ctgHandleGetTbHashRsp, ctgDumpTbHashRes, NULL, NULL, 1},
4199+
{ctgInitGetTbIndexTask, ctgLaunchGetTbIndexTask, ctgHandleGetTbIndexRsp, ctgDumpTbIndexRes, NULL, NULL, 1},
4200+
{ctgInitGetTbCfgTask, ctgLaunchGetTbCfgTask, ctgHandleGetTbCfgRsp, ctgDumpTbCfgRes, NULL, NULL, 2},
4201+
{ctgInitGetIndexTask, ctgLaunchGetIndexTask, ctgHandleGetIndexRsp, ctgDumpIndexRes, NULL, NULL, 1},
4202+
{ctgInitGetUdfTask, ctgLaunchGetUdfTask, ctgHandleGetUdfRsp, ctgDumpUdfRes, NULL, NULL, 1},
4203+
{ctgInitGetUserTask, ctgLaunchGetUserTask, ctgHandleGetUserRsp, ctgDumpUserRes, NULL, NULL, 2},
4204+
{ctgInitGetSvrVerTask, ctgLaunchGetSvrVerTask, ctgHandleGetSvrVerRsp, ctgDumpSvrVer, NULL, NULL, 1},
4205+
{ctgInitGetTbMetasTask, ctgLaunchGetTbMetasTask, ctgHandleGetTbMetasRsp, ctgDumpTbMetasRes, NULL, NULL, 1},
4206+
{ctgInitGetTbHashsTask, ctgLaunchGetTbHashsTask, ctgHandleGetTbHashsRsp, ctgDumpTbHashsRes, NULL, NULL, 1},
4207+
{ctgInitGetTbTagTask, ctgLaunchGetTbTagTask, ctgHandleGetTbTagRsp, ctgDumpTbTagRes, NULL, NULL, 2},
4208+
{ctgInitGetViewsTask, ctgLaunchGetViewsTask, ctgHandleGetViewsRsp, ctgDumpViewsRes, NULL, NULL, 1},
4209+
{ctgInitGetTbTSMATask, ctgLaunchGetTbTSMATask, ctgHandleGetTbTSMARsp, ctgDumpTbTSMARes, NULL, NULL, 1},
4210+
{ctgInitGetTSMATask, ctgLaunchGetTSMATask, ctgHandleGetTSMARsp, ctgDumpTSMARes, NULL, NULL, 1},
4211+
{ctgInitGetTbNamesTask, ctgLaunchGetTbNamesTask, ctgHandleGetTbNamesRsp, ctgDumpTbNamesRes, NULL, NULL, 1},
42024212
};
42034213

42044214
int32_t ctgMakeAsyncRes(SCtgJob* pJob) {

source/libs/parser/src/parCalcConst.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -611,7 +611,12 @@ static void resetProjectNullType(SNode* pStmt) {
611611
resetProjectNullTypeImpl(((SSelectStmt*)pStmt)->pProjectionList);
612612
break;
613613
case QUERY_NODE_SET_OPERATOR: {
614-
resetProjectNullTypeImpl(((SSetOperator*)pStmt)->pProjectionList);
614+
SSetOperator* pSetOp = (SSetOperator*)pStmt;
615+
resetProjectNullTypeImpl(pSetOp->pProjectionList);
616+
if (pSetOp->pLeft)
617+
resetProjectNullType(pSetOp->pLeft);
618+
if (pSetOp->pRight)
619+
resetProjectNullType(pSetOp->pRight);
615620
break;
616621
}
617622
default:

source/libs/parser/src/parTranslater.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2270,6 +2270,7 @@ static bool dataTypeEqual(const SDataType* l, const SDataType* r) {
22702270

22712271
// 0 means equal, 1 means the left shall prevail, -1 means the right shall prevail
22722272
static int32_t dataTypeComp(const SDataType* l, const SDataType* r) {
2273+
if (l->type == TSDB_DATA_TYPE_NULL) return -1;
22732274
if (l->type != r->type) {
22742275
return 1;
22752276
}

tests/script/tsim/show/basic.sim

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,5 +254,7 @@ if $rows <= 0 then
254254
return -1
255255
endi
256256

257+
system taos -P7100 -d db -s " show create table db.t0"
258+
257259
system sh/exec.sh -n dnode1 -s stop -x SIGINT
258260
system sh/exec.sh -n dnode2 -s stop -x SIGINT

tests/system-test/2-query/union.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -436,6 +436,29 @@ def test_TD_33137(self):
436436
tdSql.query(sql, queryTimes=1)
437437
tdSql.checkRows(49)
438438

439+
sql = "select null union select null"
440+
tdSql.query(sql, queryTimes=1)
441+
tdSql.checkRows(1)
442+
tdSql.checkData(0, 0, None)
443+
444+
sql = "select null union all select null"
445+
tdSql.query(sql, queryTimes=1)
446+
tdSql.checkRows(2)
447+
tdSql.checkData(0, 0, None)
448+
tdSql.checkData(1, 0, None)
449+
450+
sql = "select null union select 1"
451+
tdSql.query(sql, queryTimes=1)
452+
tdSql.checkRows(2)
453+
tdSql.checkData(0, 0, None)
454+
tdSql.checkData(1, 0, 1)
455+
456+
sql = "select null union select 'asd'"
457+
tdSql.query(sql, queryTimes=1)
458+
tdSql.checkRows(2)
459+
tdSql.checkData(0, 0, None)
460+
tdSql.checkData(1, 0, 'asd')
461+
439462
def stop(self):
440463
tdSql.close()
441464
tdLog.success(f"{__file__} successfully executed")

0 commit comments

Comments
 (0)