From f2c871f2f5fe98d3137e232ca1e7cebb0e2a5e19 Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Fri, 12 Apr 2024 11:07:26 +0800 Subject: [PATCH 1/4] fix: union precision issue --- source/libs/parser/src/parTranslater.c | 2 ++ tests/parallel_test/cases.task | 1 + tests/script/tsim/query/union_precision.sim | 18 ++++++++++++++++++ 3 files changed, 21 insertions(+) create mode 100644 tests/script/tsim/query/union_precision.sim diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index 3a37d841aa..da2bde4b87 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -11093,6 +11093,8 @@ static int32_t setQuery(STranslateContext* pCxt, SQuery* pQuery) { if (nodeType(pQuery->pRoot) == QUERY_NODE_SELECT_STMT) { pQuery->precision = extractResultTsPrecision((SSelectStmt*)pQuery->pRoot); + } else if (nodeType(pQuery->pRoot) == QUERY_NODE_SET_OPERATOR) { + pQuery->precision = ((SSetOperator*)pQuery->pRoot)->precision; } } diff --git a/tests/parallel_test/cases.task b/tests/parallel_test/cases.task index 2402f6a94a..e62af177ef 100644 --- a/tests/parallel_test/cases.task +++ b/tests/parallel_test/cases.task @@ -1167,6 +1167,7 @@ ,,y,script,./test.sh -f tsim/query/apercentile.sim ,,y,script,./test.sh -f tsim/query/query_count0.sim ,,y,script,./test.sh -f tsim/query/query_count_sliding0.sim +,,y,script,./test.sh -f tsim/query/union_precision.sim ,,y,script,./test.sh -f tsim/qnode/basic1.sim ,,y,script,./test.sh -f tsim/snode/basic1.sim ,,y,script,./test.sh -f tsim/mnode/basic1.sim diff --git a/tests/script/tsim/query/union_precision.sim b/tests/script/tsim/query/union_precision.sim new file mode 100644 index 0000000000..1377bf2c52 --- /dev/null +++ b/tests/script/tsim/query/union_precision.sim @@ -0,0 +1,18 @@ +system sh/stop_dnodes.sh +system sh/deploy.sh -n dnode1 -i 1 +system sh/exec.sh -n dnode1 -s start +sql connect + +sql create database tt precision 'us'; +sql use tt ; +sql CREATE TABLE t_test_table ( ts TIMESTAMP, a NCHAR(80), b NCHAR(80), c NCHAR(80) ); +sql insert into t_test_table values('2024-04-07 14:30:22.823','aa','aa', 'aa'); +sql select * from t_test_table t union all select * from t_test_table t ; +if $rows != 2 then + return -1 +endi +if $data00 != @24-04-07 14:30:22.823000@ then + return -1 +endi + +system sh/exec.sh -n dnode1 -s stop -x SIGINT From 27af9de6284c2f7d87739e93f4eaab3b949affb5 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Fri, 12 Apr 2024 22:16:48 +0800 Subject: [PATCH 2/4] fix(tsdb):add placeholder if no rowkeys exist. --- source/dnode/vnode/src/tsdb/tsdbMergeTree.c | 49 +++++++-------------- 1 file changed, 16 insertions(+), 33 deletions(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbMergeTree.c b/source/dnode/vnode/src/tsdb/tsdbMergeTree.c index 2e141bcae5..49c0c483dd 100644 --- a/source/dnode/vnode/src/tsdb/tsdbMergeTree.c +++ b/source/dnode/vnode/src/tsdb/tsdbMergeTree.c @@ -392,24 +392,19 @@ static int32_t loadSttStatisticsBlockData(SSttFileReader *pSttFileReader, SSttBl } if (pStatisBlkArray->data[k].maxTbid.suid == suid) { + int32_t size = rows - i; + int32_t offset = i * sizeof(int64_t); - tsdbInfo("-----before index:%d, uid:%" PRId64 " add record, numInUid:%d, hasPk:%d, numInPk:%d, rows:%d", i, suid, - (int)taosArrayGetSize(pBlockLoadInfo->info.pUid), block.numOfPKs, - (int)taosArrayGetSize(pBlockLoadInfo->info.pFirstKey), rows-i); - - taosArrayAddBatch(pBlockLoadInfo->info.pUid, tBufferGetDataAt(&block.uids, i * sizeof(int64_t)), rows - i); - taosArrayAddBatch(pBlockLoadInfo->info.pFirstTs, - tBufferGetDataAt(&block.firstKeyTimestamps, i * sizeof(int64_t)), rows - i); - taosArrayAddBatch(pBlockLoadInfo->info.pLastTs, tBufferGetDataAt(&block.lastKeyTimestamps, i * sizeof(int64_t)), - rows - i); - taosArrayAddBatch(pBlockLoadInfo->info.pCount, tBufferGetDataAt(&block.counts, i * sizeof(int64_t)), rows - i); + taosArrayAddBatch(pBlockLoadInfo->info.pUid, tBufferGetDataAt(&block.uids, offset), size); + taosArrayAddBatch(pBlockLoadInfo->info.pFirstTs, tBufferGetDataAt(&block.firstKeyTimestamps, offset), size); + taosArrayAddBatch(pBlockLoadInfo->info.pLastTs, tBufferGetDataAt(&block.lastKeyTimestamps, offset), size); + taosArrayAddBatch(pBlockLoadInfo->info.pCount, tBufferGetDataAt(&block.counts, offset), size); if (block.numOfPKs > 0) { SValue vFirst = {0}, vLast = {0}; for (int32_t f = i; f < rows; ++f) { int32_t code = tValueColumnGet(&block.firstKeyPKs[0], f, &vFirst); if (code) { - ASSERT(0); break; } @@ -419,21 +414,18 @@ static int32_t loadSttStatisticsBlockData(SSttFileReader *pSttFileReader, SSttBl // todo add api to clone the original data code = tValueColumnGet(&block.lastKeyPKs[0], f, &vLast); if (code) { - ASSERT(0); break; } tValueDupPayload(&vLast); taosArrayPush(pBlockLoadInfo->info.pLastKey, &vLast); } - } - - tsdbInfo("-----after index:%d, uid:%" PRId64 " add record, numInUid:%d, hasPk:%d, numInPk:%d", i, suid, - (int)taosArrayGetSize(pBlockLoadInfo->info.pUid), block.numOfPKs, - (int)taosArrayGetSize(pBlockLoadInfo->info.pFirstKey)); - - if (block.numOfPKs > 0) { - ASSERT(taosArrayGetSize(pBlockLoadInfo->info.pLastKey) == taosArrayGetSize(pBlockLoadInfo->info.pFirstTs)); + } else { + SValue vFirst = {0}; + for(int32_t j = 0; j < size; ++j) { + taosArrayPush(pBlockLoadInfo->info.pFirstKey, &vFirst); + taosArrayPush(pBlockLoadInfo->info.pLastKey, &vFirst); + } } } else { STbStatisRecord record = {0}; @@ -444,10 +436,6 @@ static int32_t loadSttStatisticsBlockData(SSttFileReader *pSttFileReader, SSttBl break; } - tsdbInfo("before index:%d, uid:%" PRId64 " add record, numInUid:%d, hasPk:%d, numInPk:%d", i, suid, - (int)taosArrayGetSize(pBlockLoadInfo->info.pUid), record.firstKey.numOfPKs, - (int)taosArrayGetSize(pBlockLoadInfo->info.pFirstKey)); - taosArrayPush(pBlockLoadInfo->info.pUid, &record.uid); taosArrayPush(pBlockLoadInfo->info.pCount, &record.count); @@ -457,23 +445,18 @@ static int32_t loadSttStatisticsBlockData(SSttFileReader *pSttFileReader, SSttBl if (record.firstKey.numOfPKs > 0) { SValue s = record.firstKey.pks[0]; tValueDupPayload(&s); - taosArrayPush(pBlockLoadInfo->info.pFirstKey, &s); s = record.lastKey.pks[0]; tValueDupPayload(&s); - taosArrayPush(pBlockLoadInfo->info.pLastKey, &s); + } else { + SValue v = {0}; + taosArrayPush(pBlockLoadInfo->info.pFirstKey, &v); + taosArrayPush(pBlockLoadInfo->info.pLastKey, &v); } i += 1; - tsdbInfo("after index:%d, uid:%" PRId64 " add record, numInUid:%d, hasPk:%d, numInPk:%d", i, suid, - (int)taosArrayGetSize(pBlockLoadInfo->info.pUid), record.firstKey.numOfPKs, - (int)taosArrayGetSize(pBlockLoadInfo->info.pFirstKey)); - - if (record.firstKey.numOfPKs > 0) { - ASSERT(taosArrayGetSize(pBlockLoadInfo->info.pLastKey) == taosArrayGetSize(pBlockLoadInfo->info.pFirstTs)); - } } } } From 54cef114368c2c66b8fc90744dd5f22d479dfbd9 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Fri, 12 Apr 2024 22:17:24 +0800 Subject: [PATCH 3/4] refactor: disable debugflag change tmrdebugFlag level. --- source/common/src/tglobal.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/common/src/tglobal.c b/source/common/src/tglobal.c index e0c9487e05..8d8a9c9134 100644 --- a/source/common/src/tglobal.c +++ b/source/common/src/tglobal.c @@ -1789,8 +1789,11 @@ static void taosCheckAndSetDebugFlag(int32_t *pFlagPtr, char *name, int32_t flag void taosSetGlobalDebugFlag(int32_t flag) { taosSetAllDebugFlag(tsCfg, flag); } +// NOTE: set all command does not change the tmrDebugFlag static void taosSetAllDebugFlag(SConfig *pCfg, int32_t flag) { - if (flag <= 0) return; + if (flag <= 0) { + return; + } SArray *noNeedToSetVars = NULL; SConfigItem *pItem = cfgGetItem(pCfg, "debugFlag"); @@ -1800,7 +1803,6 @@ static void taosSetAllDebugFlag(SConfig *pCfg, int32_t flag) { } taosCheckAndSetDebugFlag(&simDebugFlag, "simDebugFlag", flag, noNeedToSetVars); - taosCheckAndSetDebugFlag(&tmrDebugFlag, "tmrDebugFlag", flag, noNeedToSetVars); taosCheckAndSetDebugFlag(&uDebugFlag, "uDebugFlag", flag, noNeedToSetVars); taosCheckAndSetDebugFlag(&rpcDebugFlag, "rpcDebugFlag", flag, noNeedToSetVars); taosCheckAndSetDebugFlag(&qDebugFlag, "qDebugFlag", flag, noNeedToSetVars); From 46fd0cb0b553bf1a99e723bc5afad0557d1de85c Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Fri, 12 Apr 2024 23:32:47 +0800 Subject: [PATCH 4/4] fix(tsdb): set correct initial value --- source/dnode/vnode/src/tsdb/tsdbReadUtil.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbReadUtil.c b/source/dnode/vnode/src/tsdb/tsdbReadUtil.c index acfb541706..c805d2f93f 100644 --- a/source/dnode/vnode/src/tsdb/tsdbReadUtil.c +++ b/source/dnode/vnode/src/tsdb/tsdbReadUtil.c @@ -137,7 +137,21 @@ int32_t initRowKey(SRowKey* pKey, int64_t ts, int32_t numOfPks, int32_t type, in if (numOfPks > 0) { pKey->pks[0].type = type; if (IS_NUMERIC_TYPE(pKey->pks[0].type)) { - pKey->pks[0].val = asc? INT64_MIN:INT64_MAX; + if (asc) { + switch(pKey->pks[0].type) { + case TSDB_DATA_TYPE_BIGINT:pKey->pks[0].val = INT64_MIN;break; + case TSDB_DATA_TYPE_INT:pKey->pks[0].val = INT32_MIN;break; + case TSDB_DATA_TYPE_SMALLINT:pKey->pks[0].val = INT16_MIN;break; + case TSDB_DATA_TYPE_TINYINT:pKey->pks[0].val = INT8_MIN;break; + } + } else { + switch(pKey->pks[0].type) { + case TSDB_DATA_TYPE_BIGINT:pKey->pks[0].val = INT64_MAX;break; + case TSDB_DATA_TYPE_INT:pKey->pks[0].val = INT32_MAX;break; + case TSDB_DATA_TYPE_SMALLINT:pKey->pks[0].val = INT16_MAX;break; + case TSDB_DATA_TYPE_TINYINT:pKey->pks[0].val = INT8_MAX;break; + } + } } else { pKey->pks[0].pData = taosMemoryCalloc(1, len); pKey->pks[0].nData = 0;