From 852052a99beb29bad066e891eb1f2ede50ac4c51 Mon Sep 17 00:00:00 2001 From: slzhou Date: Mon, 15 Apr 2024 07:47:07 +0800 Subject: [PATCH 1/5] fix: extracted data block shall initialize pks of datablock info --- source/common/src/tdatablock.c | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/source/common/src/tdatablock.c b/source/common/src/tdatablock.c index 7a45e44eab..842038e41f 100644 --- a/source/common/src/tdatablock.c +++ b/source/common/src/tdatablock.c @@ -653,25 +653,15 @@ SSDataBlock* blockDataExtractBlock(SSDataBlock* pBlock, int32_t startIndex, int3 return NULL; } - SSDataBlock* pDst = createDataBlock(); + SSDataBlock* pDst = createOneDataBlock(pBlock, false); if (pDst == NULL) { return NULL; } - pDst->info = pBlock->info; - pDst->info.rows = 0; - pDst->info.capacity = 0; - pDst->info.rowSize = 0; - size_t numOfCols = taosArrayGetSize(pBlock->pDataBlock); - for (int32_t i = 0; i < numOfCols; ++i) { - SColumnInfoData colInfo = {0}; - SColumnInfoData* pSrcCol = taosArrayGet(pBlock->pDataBlock, i); - colInfo.info = pSrcCol->info; - blockDataAppendColInfo(pDst, &colInfo); - } blockDataEnsureCapacity(pDst, rowCount); + size_t numOfCols = taosArrayGetSize(pBlock->pDataBlock); for (int32_t i = 0; i < numOfCols; ++i) { SColumnInfoData* pColData = taosArrayGet(pBlock->pDataBlock, i); SColumnInfoData* pDstCol = taosArrayGet(pDst->pDataBlock, i); From 5f28ee0e525812b48b7d8914993fc25c760db6f6 Mon Sep 17 00:00:00 2001 From: slzhou Date: Mon, 15 Apr 2024 11:28:09 +0800 Subject: [PATCH 2/5] fix: wrongly changed the column type of pk col during last row scan optimize --- source/libs/planner/src/planOptimizer.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/source/libs/planner/src/planOptimizer.c b/source/libs/planner/src/planOptimizer.c index b3f50b540b..d5a25fb517 100644 --- a/source/libs/planner/src/planOptimizer.c +++ b/source/libs/planner/src/planOptimizer.c @@ -2997,15 +2997,9 @@ static int32_t lastRowScanOptimize(SOptimizeContext* pCxt, SLogicSubplan* pLogic if (FUNCTION_TYPE_LAST == funcType) { nodesWalkExpr(nodesListGetNode(pFunc->pParameterList, 0), lastRowScanOptSetColDataType, &cxt); nodesListErase(pFunc->pParameterList, nodesListGetCell(pFunc->pParameterList, 1)); - if (pFunc->hasPk) { - if (LIST_LENGTH(pFunc->pParameterList) != 2) { - planError("last func which has pk but its parameter list length is not %d", 2); - nodesClearList(cxt.pLastCols); - taosArrayDestroy(isDuplicateCol); - return TSDB_CODE_PLAN_INTERNAL_ERROR; - } - nodesWalkExpr(nodesListGetNode(pFunc->pParameterList, 1), lastRowScanOptSetColDataType, &cxt); - } + } + if (pFunc->hasPk) { + nodesListMakeAppend(&cxt.pOtherCols, nodesListGetNode(pFunc->pParameterList, LIST_LENGTH(pFunc->pParameterList) - 1)); } } else { pNode = nodesListGetNode(pFunc->pParameterList, 0); From 04f1cfaf572d562f6c5728ab18aa0982da982cb4 Mon Sep 17 00:00:00 2001 From: slzhou Date: Mon, 15 Apr 2024 13:56:56 +0800 Subject: [PATCH 3/5] feat: add test case for wrong pk data type --- tests/system-test/2-query/pk_func.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/system-test/2-query/pk_func.py b/tests/system-test/2-query/pk_func.py index 30b6671f98..af6530fa51 100644 --- a/tests/system-test/2-query/pk_func.py +++ b/tests/system-test/2-query/pk_func.py @@ -642,7 +642,12 @@ class TDTestCase: tdSql.checkData(7, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) tdSql.checkData(7, 1, 8) tdSql.checkData(7, 2, 8) - + + tdSql.query('select ts, last(pk) from d1.st order by pk') + tdSql.checkRows(1) + tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(0, 1, 8) + tdSql.execute('drop database pk_func') def stop(self): tdSql.close() From 31f5b0dca76bf26f0bc961ef96cc3536403a299c Mon Sep 17 00:00:00 2001 From: slzhou Date: Mon, 15 Apr 2024 14:49:47 +0800 Subject: [PATCH 4/5] fix: add test case for varchar primary key --- tests/parallel_test/cases.task | 1 + tests/system-test/2-query/pk_varchar.py | 306 ++++++++++++++++++++++++ 2 files changed, 307 insertions(+) create mode 100644 tests/system-test/2-query/pk_varchar.py diff --git a/tests/parallel_test/cases.task b/tests/parallel_test/cases.task index 9b00075761..bdc6ef0984 100644 --- a/tests/parallel_test/cases.task +++ b/tests/parallel_test/cases.task @@ -47,6 +47,7 @@ ,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/pk_error.py ,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/pk_func.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/pk_varchar.py ,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/pk_func_group.py ,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/partition_expr.py ,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/project_group.py diff --git a/tests/system-test/2-query/pk_varchar.py b/tests/system-test/2-query/pk_varchar.py new file mode 100644 index 0000000000..167e1079d5 --- /dev/null +++ b/tests/system-test/2-query/pk_varchar.py @@ -0,0 +1,306 @@ +import sys +from util.log import * +from util.cases import * +from util.sql import * +from util.dnodes import tdDnodes +from math import inf + +class TDTestCase: + def caseDescription(self): + ''' + case1: [TD-] + ''' + return + + def init(self, conn, logSql, replicaVer=1): + tdLog.debug("start to execute %s" % __file__) + tdSql.init(conn.cursor(), True) + self.conn = conn + + def restartTaosd(self, index=1, dbname="db"): + tdDnodes.stop(index) + tdDnodes.startWithoutSleep(index) + tdSql.execute(f"use pk_varchar") + + def run(self): + print("running {}".format(__file__)) + tdSql.execute("drop database if exists pk_varchar") + tdSql.execute("create database if not exists pk_varchar") + tdSql.execute('use pk_varchar') + tdSql.execute('drop database IF EXISTS d1;') + + tdSql.execute('drop database IF EXISTS d2;') + + tdSql.execute('create database d1 vgroups 1') + + tdSql.execute('use d1;') + + tdSql.execute('create table st(ts timestamp, pk varchar(256) primary key, f int) tags(t int);') + + tdSql.execute("insert into ct1 using st tags(1) values('2021-04-19 00:00:00', '1', 1);") + + tdSql.execute("insert into ct1 using st tags(1) values('2021-04-19 00:00:00', '2', 2);") + + tdSql.execute("insert into ct2 using st tags(2) values('2021-04-19 00:00:00', '3', 3);") + + tdSql.execute("insert into ct2 using st tags(2) values('2021-04-19 00:00:00', '4', 4);") + + tdSql.execute("insert into ct1 using st tags(1) values('2021-04-19 00:00:01', '1', 1);") + + tdSql.execute("insert into ct1 using st tags(1) values('2021-04-19 00:00:01', '4', 4);") + + tdSql.execute("insert into ct2 using st tags(2) values('2021-04-19 00:00:01', '3', 3);") + + tdSql.execute("insert into ct2 using st tags(2) values('2021-04-19 00:00:01', '2', 2);") + + tdSql.execute("insert into ct1 using st tags(1) values('2021-04-19 00:00:02', '6', 6);") + + tdSql.execute("insert into ct1 using st tags(1) values('2021-04-19 00:00:02', '5', 5);") + + tdSql.execute("insert into ct2 using st tags(2) values('2021-04-19 00:00:02', '8', 8);") + + tdSql.execute("insert into ct2 using st tags(2) values('2021-04-19 00:00:02', '7', 7);") + + tdSql.query('select first(*) from d1.st partition by tbname order by tbname;') + tdSql.checkRows(2) + tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0)) + tdSql.checkData(0, 1, '1') + tdSql.checkData(0, 2, 1) + tdSql.checkData(1, 0, datetime.datetime(2021, 4, 19, 0, 0)) + tdSql.checkData(1, 1, '3') + tdSql.checkData(1, 2, 3) + + tdSql.query('select last(*) from d1.st partition by tbname order by tbname;') + tdSql.checkRows(2) + tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(0, 1, '6') + tdSql.checkData(0, 2, 6) + tdSql.checkData(1, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(1, 1, '8') + tdSql.checkData(1, 2, 8) + + tdSql.query('select last_row(*) from d1.st partition by tbname order by tbname;') + tdSql.checkRows(2) + tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(0, 1, '6') + tdSql.checkData(0, 2, 6) + tdSql.checkData(1, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(1, 1, '8') + tdSql.checkData(1, 2, 8) + + tdSql.query('select ts,diff(f) from d1.st partition by tbname order by tbname;') + tdSql.checkRows(4) + tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0, 1)) + tdSql.checkData(0, 1, 0) + tdSql.checkData(1, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(1, 1, 4) + tdSql.checkData(2, 0, datetime.datetime(2021, 4, 19, 0, 0, 1)) + tdSql.checkData(2, 1, -1) + tdSql.checkData(3, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(3, 1, 5) + + tdSql.query('select irate(f) from d1.st partition by tbname order by tbname;') + tdSql.checkRows(2) + tdSql.checkData(0, 0, 4.0) + tdSql.checkData(1, 0, 5.0) + + tdSql.query('select ts,derivative(f, 1s, 0) from d1.st partition by tbname order by tbname;') + tdSql.checkRows(4) + tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0, 1)) + tdSql.checkData(0, 1, 0.0) + tdSql.checkData(1, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(1, 1, 4.0) + tdSql.checkData(2, 0, datetime.datetime(2021, 4, 19, 0, 0, 1)) + tdSql.checkData(2, 1, -1.0) + tdSql.checkData(3, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(3, 1, 5.0) + + tdSql.query('select twa(f) from d1.st partition by tbname order by tbname;') + tdSql.checkRows(2) + tdSql.checkData(0, 0, 2.0) + tdSql.checkData(1, 0, 3.5) + + tdSql.query('select ts,pk,unique(f) from d1.st partition by tbname order by tbname,ts,pk;') + tdSql.checkRows(10) + tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0)) + tdSql.checkData(0, 1, '1') + tdSql.checkData(0, 2, 1) + tdSql.checkData(1, 0, datetime.datetime(2021, 4, 19, 0, 0)) + tdSql.checkData(1, 1, '2') + tdSql.checkData(1, 2, 2) + tdSql.checkData(2, 0, datetime.datetime(2021, 4, 19, 0, 0, 1)) + tdSql.checkData(2, 1, '4') + tdSql.checkData(2, 2, 4) + tdSql.checkData(3, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(3, 1, '5') + tdSql.checkData(3, 2, 5) + tdSql.checkData(4, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(4, 1, '6') + tdSql.checkData(4, 2, 6) + tdSql.checkData(5, 0, datetime.datetime(2021, 4, 19, 0, 0)) + tdSql.checkData(5, 1, '3') + tdSql.checkData(5, 2, 3) + tdSql.checkData(6, 0, datetime.datetime(2021, 4, 19, 0, 0)) + tdSql.checkData(6, 1, '4') + tdSql.checkData(6, 2, 4) + tdSql.checkData(7, 0, datetime.datetime(2021, 4, 19, 0, 0, 1)) + tdSql.checkData(7, 1, '2') + tdSql.checkData(7, 2, 2) + tdSql.checkData(8, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(8, 1, '7') + tdSql.checkData(8, 2, 7) + tdSql.checkData(9, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(9, 1, '8') + tdSql.checkData(9, 2, 8) + + tdSql.query('select * from d1.st order by ts limit 2;') + tdSql.checkRows(2) + tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0)) + tdSql.checkData(0, 1, '1') + tdSql.checkData(0, 2, 1) + tdSql.checkData(0, 3, 1) + tdSql.checkData(1, 0, datetime.datetime(2021, 4, 19, 0, 0)) + tdSql.checkData(1, 1, '2') + tdSql.checkData(1, 2, 2) + tdSql.checkData(1, 3, 1) + + tdSql.execute('create database d2 vgroups 2') + + tdSql.execute('use d2;') + + tdSql.execute('create table st(ts timestamp, pk varchar(256) primary key, f int) tags(t int);') + + tdSql.execute("insert into ct1 using st tags(1) values('2021-04-19 00:00:00', '1', 1);") + + tdSql.execute("insert into ct1 using st tags(1) values('2021-04-19 00:00:00', '2', 2);") + + tdSql.execute("insert into ct2 using st tags(2) values('2021-04-19 00:00:00', '3', 3);") + + tdSql.execute("insert into ct2 using st tags(2) values('2021-04-19 00:00:00', '4', 4);") + + tdSql.execute("insert into ct1 using st tags(1) values('2021-04-19 00:00:01', '1', 1);") + + tdSql.execute("insert into ct1 using st tags(1) values('2021-04-19 00:00:01', '4', 4);") + + tdSql.execute("insert into ct2 using st tags(2) values('2021-04-19 00:00:01', '3', 3);") + + tdSql.execute("insert into ct2 using st tags(2) values('2021-04-19 00:00:01', '2', 2);") + + tdSql.execute("insert into ct1 using st tags(1) values('2021-04-19 00:00:02', '6', 6);") + + tdSql.execute("insert into ct1 using st tags(1) values('2021-04-19 00:00:02', '5', 5);") + + tdSql.execute("insert into ct2 using st tags(2) values('2021-04-19 00:00:02', '8', 8);") + + tdSql.execute("insert into ct2 using st tags(2) values('2021-04-19 00:00:02', '7', 7);") + + tdSql.query('select first(*) from d2.st partition by tbname order by tbname;') + tdSql.checkRows(2) + tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0)) + tdSql.checkData(0, 1, '1') + tdSql.checkData(0, 2, 1) + tdSql.checkData(1, 0, datetime.datetime(2021, 4, 19, 0, 0)) + tdSql.checkData(1, 1, '3') + tdSql.checkData(1, 2, 3) + + tdSql.query('select last(*) from d2.st partition by tbname order by tbname;') + tdSql.checkRows(2) + tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(0, 1, '6') + tdSql.checkData(0, 2, 6) + tdSql.checkData(1, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(1, 1, '8') + tdSql.checkData(1, 2, 8) + + tdSql.query('select last_row(*) from d2.st partition by tbname order by tbname;') + tdSql.checkRows(2) + tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(0, 1, '6') + tdSql.checkData(0, 2, 6) + tdSql.checkData(1, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(1, 1, '8') + tdSql.checkData(1, 2, 8) + + tdSql.query('select ts,diff(f) from d2.st partition by tbname order by tbname;') + tdSql.checkRows(4) + tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0, 1)) + tdSql.checkData(0, 1, 0) + tdSql.checkData(1, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(1, 1, 4) + tdSql.checkData(2, 0, datetime.datetime(2021, 4, 19, 0, 0, 1)) + tdSql.checkData(2, 1, -1) + tdSql.checkData(3, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(3, 1, 5) + + tdSql.query('select irate(f) from d2.st partition by tbname order by tbname;') + tdSql.checkRows(2) + tdSql.checkData(0, 0, 4.0) + tdSql.checkData(1, 0, 5.0) + + tdSql.query('select ts,derivative(f, 1s, 0) from d2.st partition by tbname order by tbname;') + tdSql.checkRows(4) + tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0, 1)) + tdSql.checkData(0, 1, 0.0) + tdSql.checkData(1, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(1, 1, 4.0) + tdSql.checkData(2, 0, datetime.datetime(2021, 4, 19, 0, 0, 1)) + tdSql.checkData(2, 1, -1.0) + tdSql.checkData(3, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(3, 1, 5.0) + + tdSql.query('select twa(f) from d2.st partition by tbname order by tbname;') + tdSql.checkRows(2) + tdSql.checkData(0, 0, 2.0) + tdSql.checkData(1, 0, 3.5) + + tdSql.query('select ts,pk,unique(f) from d2.st partition by tbname order by tbname,ts,pk;') + tdSql.checkRows(10) + tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0)) + tdSql.checkData(0, 1, '1') + tdSql.checkData(0, 2, 1) + tdSql.checkData(1, 0, datetime.datetime(2021, 4, 19, 0, 0)) + tdSql.checkData(1, 1, '2') + tdSql.checkData(1, 2, 2) + tdSql.checkData(2, 0, datetime.datetime(2021, 4, 19, 0, 0, 1)) + tdSql.checkData(2, 1, '4') + tdSql.checkData(2, 2, 4) + tdSql.checkData(3, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(3, 1, '5') + tdSql.checkData(3, 2, 5) + tdSql.checkData(4, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(4, 1, '6') + tdSql.checkData(4, 2, 6) + tdSql.checkData(5, 0, datetime.datetime(2021, 4, 19, 0, 0)) + tdSql.checkData(5, 1, '3') + tdSql.checkData(5, 2, 3) + tdSql.checkData(6, 0, datetime.datetime(2021, 4, 19, 0, 0)) + tdSql.checkData(6, 1, '4') + tdSql.checkData(6, 2, 4) + tdSql.checkData(7, 0, datetime.datetime(2021, 4, 19, 0, 0, 1)) + tdSql.checkData(7, 1, '2') + tdSql.checkData(7, 2, 2) + tdSql.checkData(8, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(8, 1, '7') + tdSql.checkData(8, 2, 7) + tdSql.checkData(9, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(9, 1, '8') + tdSql.checkData(9, 2, 8) + + tdSql.query('select * from d2.st order by ts limit 2;') + tdSql.checkRows(2) + tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0)) + tdSql.checkData(0, 1, '1') + tdSql.checkData(0, 2, 1) + tdSql.checkData(0, 3, 1) + tdSql.checkData(1, 0, datetime.datetime(2021, 4, 19, 0, 0)) + tdSql.checkData(1, 1, '2') + tdSql.checkData(1, 2, 2) + tdSql.checkData(1, 3, 1) + + tdSql.execute('drop database pk_varchar') + def stop(self): + tdSql.close() + tdLog.success("%s successfully executed" % __file__) + +tdCases.addWindows(__file__, TDTestCase()) +tdCases.addLinux(__file__, TDTestCase()) From 51dfa20cf48ab4e83a661faa9d500bd3ab25d109 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Tue, 16 Apr 2024 10:13:15 +0800 Subject: [PATCH 5/5] fix(tsdb): set correct initial value for compare. --- source/dnode/vnode/src/inc/tsdb.h | 2 +- source/dnode/vnode/src/tsdb/tsdbRead2.c | 2 +- source/dnode/vnode/src/tsdb/tsdbReadUtil.c | 45 ++++++++++++++++++---- 3 files changed, 40 insertions(+), 9 deletions(-) diff --git a/source/dnode/vnode/src/inc/tsdb.h b/source/dnode/vnode/src/inc/tsdb.h index 33cce621d5..aa750a291b 100644 --- a/source/dnode/vnode/src/inc/tsdb.h +++ b/source/dnode/vnode/src/inc/tsdb.h @@ -126,7 +126,7 @@ int32_t tsdbRowCompareWithoutVersion(const void *p1, const void *p2); int32_t tsdbRowKeyCmpr(const STsdbRowKey *key1, const STsdbRowKey *key2); void tsdbRowGetKey(TSDBROW *row, STsdbRowKey *key); void tColRowGetKey(SBlockData *pBlock, int32_t irow, SRowKey *key); -int32_t tRowKeyAssign(SRowKey *pDst, SRowKey *pSrc); + // STSDBRowIter int32_t tsdbRowIterOpen(STSDBRowIter *pIter, TSDBROW *pRow, STSchema *pTSchema); diff --git a/source/dnode/vnode/src/tsdb/tsdbRead2.c b/source/dnode/vnode/src/tsdb/tsdbRead2.c index 33a26ab3d5..8abdfaac6a 100644 --- a/source/dnode/vnode/src/tsdb/tsdbRead2.c +++ b/source/dnode/vnode/src/tsdb/tsdbRead2.c @@ -124,7 +124,7 @@ int32_t pkCompEx(SRowKey* p1, SRowKey* p2) { if (p1->pks[0].val == p2->pks[0].val) { return 0; } else { - return p1->pks[0].val > p2->pks[0].val? 1:-1; + return tValueCompare(&p1->pks[0], &p2->pks[0]); } } } diff --git a/source/dnode/vnode/src/tsdb/tsdbReadUtil.c b/source/dnode/vnode/src/tsdb/tsdbReadUtil.c index c805d2f93f..27b7f3edbe 100644 --- a/source/dnode/vnode/src/tsdb/tsdbReadUtil.c +++ b/source/dnode/vnode/src/tsdb/tsdbReadUtil.c @@ -136,20 +136,51 @@ 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)) { + + if (IS_NUMERIC_TYPE(type)) { 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; + switch(type) { + case TSDB_DATA_TYPE_BIGINT: { + pKey->pks[0].val = INT64_MIN; + break; + } + case TSDB_DATA_TYPE_INT:{ + int32_t min = INT32_MIN; + memcpy(&pKey->pks[0].val, &min, tDataTypes[type].bytes); + break; + } + case TSDB_DATA_TYPE_SMALLINT:{ + int16_t min = INT16_MIN; + memcpy(&pKey->pks[0].val, &min, tDataTypes[type].bytes); + break; + } + case TSDB_DATA_TYPE_TINYINT:{ + int8_t min = INT8_MIN; + memcpy(&pKey->pks[0].val, &min, tDataTypes[type].bytes); + break; + } + case TSDB_DATA_TYPE_UTINYINT: + case TSDB_DATA_TYPE_USMALLINT: + case TSDB_DATA_TYPE_UINT: + case TSDB_DATA_TYPE_UBIGINT: { + pKey->pks[0].val = 0; + break; + } + default: + ASSERT(0); } } else { - switch(pKey->pks[0].type) { + switch(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; + case TSDB_DATA_TYPE_UBIGINT:pKey->pks[0].val = UINT64_MAX;break; + case TSDB_DATA_TYPE_UINT:pKey->pks[0].val = UINT32_MAX;break; + case TSDB_DATA_TYPE_USMALLINT:pKey->pks[0].val = UINT16_MAX;break; + case TSDB_DATA_TYPE_UTINYINT:pKey->pks[0].val = UINT8_MAX;break; + default: + ASSERT(0); } } } else {