From 719b8439f073d538888d2e6eab5f440f054ec00c Mon Sep 17 00:00:00 2001 From: slzhou Date: Mon, 1 Apr 2024 08:58:43 +0800 Subject: [PATCH 1/3] feat: add test for pk modification --- tests/parallel_test/cases.task | 1 + tests/system-test/2-query/pk_error.py | 267 ++++++++++++++++++++++++++ 2 files changed, 268 insertions(+) create mode 100644 tests/system-test/2-query/pk_error.py diff --git a/tests/parallel_test/cases.task b/tests/parallel_test/cases.task index d15b12cfe6..0cdac26a3a 100644 --- a/tests/parallel_test/cases.task +++ b/tests/parallel_test/cases.task @@ -45,6 +45,7 @@ #,,n,system-test,python3 ./test.py -f 8-stream/snode_restart.py -N 4 ,,n,system-test,python3 ./test.py -f 8-stream/snode_restart_with_checkpoint.py -N 4 +,,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_func_group.py ,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/partition_expr.py diff --git a/tests/system-test/2-query/pk_error.py b/tests/system-test/2-query/pk_error.py new file mode 100644 index 0000000000..7aa1d81942 --- /dev/null +++ b/tests/system-test/2-query/pk_error.py @@ -0,0 +1,267 @@ +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_error") + + def run(self): + print("running {}".format(__file__)) + tdSql.execute("drop database if exists pk_error") + tdSql.execute("create database if not exists pk_error") + tdSql.execute('use pk_error') + 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 int 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 t order by t;') + 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 t order by t;') + 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 t order by t;') + 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 t order by t;') + 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 t order by t;') + 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 t order by t;') + 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 t order by t;') + 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 t order by t,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.execute('create table nt(ts timestamp, pk int primary key, f int);') + + tdSql.execute("insert into nt values('2021-04-19 00:00:00', 1, 1);") + + tdSql.execute("insert into nt values('2021-04-19 00:00:00', 2, 2);") + + tdSql.execute("insert into nt values('2021-04-19 00:00:00', 3, 3);") + + tdSql.execute("insert into nt values('2021-04-19 00:00:00', 4, 4);") + + tdSql.execute("insert into nt values('2021-04-19 00:00:01', 1, 1);") + + tdSql.execute("insert into nt values('2021-04-19 00:00:01', 4, 4);") + + tdSql.execute("insert into nt values('2021-04-19 00:00:01', 3, 3);") + + tdSql.execute("insert into nt values('2021-04-19 00:00:01', 2, 2);") + + tdSql.execute("insert into nt values('2021-04-19 00:00:02', 6, 6);") + + tdSql.execute("insert into nt values('2021-04-19 00:00:02', 5, 5);") + + tdSql.execute("insert into nt values('2021-04-19 00:00:02', 8, 8);") + + tdSql.execute("insert into nt values('2021-04-19 00:00:02', 7, 7);") + + tdSql.query('select first(*) from d1.nt;') + tdSql.checkRows(1) + tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0)) + tdSql.checkData(0, 1, 1) + tdSql.checkData(0, 2, 1) + + tdSql.query('select last(*) from d1.nt;') + tdSql.checkRows(1) + tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(0, 1, 8) + tdSql.checkData(0, 2, 8) + + tdSql.query('select last_row(*) from d1.nt;') + tdSql.checkRows(1) + tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(0, 1, 8) + tdSql.checkData(0, 2, 8) + + tdSql.query('select ts,diff(f) from d1.nt;') + tdSql.checkRows(2) + 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.query('select irate(f) from d1.nt;') + tdSql.checkRows(1) + tdSql.checkData(0, 0, 4.0) + + tdSql.query('select ts,derivative(f, 1s, 0) from d1.nt;') + tdSql.checkRows(2) + 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.query('select twa(f) from d1.nt;') + tdSql.checkRows(1) + tdSql.checkData(0, 0, 2.0) + + tdSql.query('select ts,pk,unique(f) from d1.nt order by ts,pk;') + tdSql.checkRows(8) + 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)) + tdSql.checkData(2, 1, 3) + tdSql.checkData(2, 2, 3) + tdSql.checkData(3, 0, datetime.datetime(2021, 4, 19, 0, 0)) + tdSql.checkData(3, 1, 4) + tdSql.checkData(3, 2, 4) + tdSql.checkData(4, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(4, 1, 5) + tdSql.checkData(4, 2, 5) + tdSql.checkData(5, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(5, 1, 6) + tdSql.checkData(5, 2, 6) + tdSql.checkData(6, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(6, 1, 7) + tdSql.checkData(6, 2, 7) + tdSql.checkData(7, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(7, 1, 8) + tdSql.checkData(7, 2, 8) + + tdSql.execute('create table st2(ts timestamp, vcpk varchar(64) primary key, f int);') + + tdSql.error('alter table st drop column pk;') + + tdSql.error('alter table nt drop column pk;') + + tdSql.error('alter table st modify column pk bigint;') + + tdSql.error('alter table nt modify column pk bigint;') + + tdSql.error('alter table st2 modify column vcpk varchar(32)') + + tdSql.execute('drop database pk_error') + def stop(self): + tdSql.close() + tdLog.success("%s successfully executed" % __file__) + +tdCases.addWindows(__file__, TDTestCase()) +tdCases.addLinux(__file__, TDTestCase()) From 5369448bda920ae6876270fdc05fcf39411d8ca0 Mon Sep 17 00:00:00 2001 From: 54liuyao <54liuyao> Date: Mon, 1 Apr 2024 16:43:36 +0800 Subject: [PATCH 2/3] adj log --- source/libs/executor/src/projectoperator.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/libs/executor/src/projectoperator.c b/source/libs/executor/src/projectoperator.c index c6ebb04446..aa2a73f09f 100644 --- a/source/libs/executor/src/projectoperator.c +++ b/source/libs/executor/src/projectoperator.c @@ -387,14 +387,14 @@ SSDataBlock* doProjectOperation(SOperatorInfo* pOperator) { pOperator->cost.openCost = (taosGetTimestampUs() - st) / 1000.0; } - if (pTaskInfo->execModel == OPTR_EXEC_MODEL_STREAM) { - printDataBlock(p, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); - } - if (pProjectInfo->outputIgnoreGroup) { p->info.id.groupId = 0; } + if (pTaskInfo->execModel == OPTR_EXEC_MODEL_STREAM) { + printDataBlock(p, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); + } + return (p->info.rows > 0) ? p : NULL; } From bc56d1196a9b17177df804b47be4cc3e753731d9 Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Mon, 1 Apr 2024 18:06:07 +0800 Subject: [PATCH 3/3] more code --- source/common/src/tdataformat.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/common/src/tdataformat.c b/source/common/src/tdataformat.c index 991c17c5cc..7de685d9b1 100644 --- a/source/common/src/tdataformat.c +++ b/source/common/src/tdataformat.c @@ -1238,7 +1238,8 @@ int32_t tValueCompare(const SValue *tv1, const SValue *tv2) { T_COMPARE_SCALAR_VALUE(uint64_t, &tv1->val, &tv2->val); case TSDB_DATA_TYPE_GEOMETRY: case TSDB_DATA_TYPE_BINARY: { - return strcmp((const char *)tv1->pData, (const char *)tv2->pData); + int32_t ret = strncmp((const char *)tv1->pData, (const char *)tv2->pData, TMIN(tv1->nData, tv2->nData)); + return ret ? ret : (tv1->nData < tv2->nData ? -1 : (tv1->nData > tv2->nData ? 1 : 0)); } case TSDB_DATA_TYPE_NCHAR: { int32_t ret = tasoUcs4Compare((TdUcs4 *)tv1->pData, (TdUcs4 *)tv2->pData, @@ -1286,7 +1287,7 @@ int32_t tRowKeyCompare(const void *p1, const void *p2) { return 0; } -int32_t tRowKeyAssign(SRowKey *pDst, SRowKey* pSrc) { +int32_t tRowKeyAssign(SRowKey *pDst, SRowKey *pSrc) { pDst->ts = pSrc->ts; pDst->numOfPKs = pSrc->numOfPKs;