From 6e8bc410054b977f6029f8059db590e8975c3087 Mon Sep 17 00:00:00 2001 From: slzhou Date: Wed, 27 Mar 2024 09:43:41 +0800 Subject: [PATCH 1/3] feat: add test case pk func --- tests/parallel_test/cases.task | 1 + tests/system-test/2-query/pk_func.py | 652 +++++++++++++++++++++++++++ 2 files changed, 653 insertions(+) create mode 100644 tests/system-test/2-query/pk_func.py diff --git a/tests/parallel_test/cases.task b/tests/parallel_test/cases.task index 2402f6a94a..b33f0050d1 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_func.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 ,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tbname_vgroup.py diff --git a/tests/system-test/2-query/pk_func.py b/tests/system-test/2-query/pk_func.py new file mode 100644 index 0000000000..30b6671f98 --- /dev/null +++ b/tests/system-test/2-query/pk_func.py @@ -0,0 +1,652 @@ +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_func") + + def run(self): + print("running {}".format(__file__)) + tdSql.execute("drop database if exists pk_func") + tdSql.execute("create database if not exists pk_func") + tdSql.execute('use pk_func') + 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 * from d1.ct1 order by ts,pk;') + tdSql.checkRows(6) + 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, 1) + tdSql.checkData(2, 2, 1) + tdSql.checkData(3, 0, datetime.datetime(2021, 4, 19, 0, 0, 1)) + 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.query('select * from d1.ct2 order by ts,pk;') + tdSql.checkRows(6) + tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0)) + tdSql.checkData(0, 1, 3) + tdSql.checkData(0, 2, 3) + tdSql.checkData(1, 0, datetime.datetime(2021, 4, 19, 0, 0)) + tdSql.checkData(1, 1, 4) + tdSql.checkData(1, 2, 4) + tdSql.checkData(2, 0, datetime.datetime(2021, 4, 19, 0, 0, 1)) + tdSql.checkData(2, 1, 2) + tdSql.checkData(2, 2, 2) + tdSql.checkData(3, 0, datetime.datetime(2021, 4, 19, 0, 0, 1)) + tdSql.checkData(3, 1, 3) + tdSql.checkData(3, 2, 3) + tdSql.checkData(4, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(4, 1, 7) + tdSql.checkData(4, 2, 7) + tdSql.checkData(5, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(5, 1, 8) + tdSql.checkData(5, 2, 8) + + tdSql.query('select * from d1.st order by ts,pk;') + tdSql.checkRows(12) + 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.checkData(2, 0, datetime.datetime(2021, 4, 19, 0, 0)) + tdSql.checkData(2, 1, 3) + tdSql.checkData(2, 2, 3) + tdSql.checkData(2, 3, 2) + tdSql.checkData(3, 0, datetime.datetime(2021, 4, 19, 0, 0)) + tdSql.checkData(3, 1, 4) + tdSql.checkData(3, 2, 4) + tdSql.checkData(3, 3, 2) + tdSql.checkData(4, 0, datetime.datetime(2021, 4, 19, 0, 0, 1)) + tdSql.checkData(4, 1, 1) + tdSql.checkData(4, 2, 1) + tdSql.checkData(4, 3, 1) + tdSql.checkData(5, 0, datetime.datetime(2021, 4, 19, 0, 0, 1)) + tdSql.checkData(5, 1, 2) + tdSql.checkData(5, 2, 2) + tdSql.checkData(5, 3, 2) + tdSql.checkData(6, 0, datetime.datetime(2021, 4, 19, 0, 0, 1)) + tdSql.checkData(6, 1, 3) + tdSql.checkData(6, 2, 3) + tdSql.checkData(6, 3, 2) + tdSql.checkData(7, 0, datetime.datetime(2021, 4, 19, 0, 0, 1)) + tdSql.checkData(7, 1, 4) + tdSql.checkData(7, 2, 4) + tdSql.checkData(7, 3, 1) + tdSql.checkData(8, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(8, 1, 5) + tdSql.checkData(8, 2, 5) + tdSql.checkData(8, 3, 1) + tdSql.checkData(9, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(9, 1, 6) + tdSql.checkData(9, 2, 6) + tdSql.checkData(9, 3, 1) + tdSql.checkData(10, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(10, 1, 7) + tdSql.checkData(10, 2, 7) + tdSql.checkData(10, 3, 2) + tdSql.checkData(11, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(11, 1, 8) + tdSql.checkData(11, 2, 8) + tdSql.checkData(11, 3, 2) + + tdSql.query('select first(*) from d1.ct1;') + 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 first(*) from d1.ct2;') + tdSql.checkRows(1) + tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0)) + tdSql.checkData(0, 1, 3) + tdSql.checkData(0, 2, 3) + + tdSql.query('select first(*) from d1.st;') + 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.ct1;') + tdSql.checkRows(1) + tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(0, 1, 6) + tdSql.checkData(0, 2, 6) + + tdSql.query('select last(*) from d1.ct2;') + 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(*) from d1.st;') + 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.ct1;') + tdSql.checkRows(1) + tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(0, 1, 6) + tdSql.checkData(0, 2, 6) + + tdSql.query('select last_row(*) from d1.ct2;') + 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.st;') + 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.ct1;') + 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 ts,diff(f) from d1.ct2;') + tdSql.checkRows(2) + tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0, 1)) + tdSql.checkData(0, 1, -1) + tdSql.checkData(1, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(1, 1, 5) + + tdSql.query('select ts,diff(f) from d1.st;') + 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.ct1;') + tdSql.checkRows(1) + tdSql.checkData(0, 0, 4.0) + + tdSql.query('select irate(f) from d1.ct2;') + tdSql.checkRows(1) + tdSql.checkData(0, 0, 5.0) + + tdSql.query('select irate(f) from d1.st;') + tdSql.checkRows(1) + tdSql.checkData(0, 0, 4.0) + + tdSql.query('select ts,derivative(f, 1s, 0) from d1.ct1;') + 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 ts,derivative(f, 1s, 0) from d1.ct2;') + tdSql.checkRows(2) + tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0, 1)) + tdSql.checkData(0, 1, -1.0) + tdSql.checkData(1, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(1, 1, 5.0) + + tdSql.query('select ts,derivative(f, 1s, 0) from d1.st;') + 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.ct1;') + tdSql.checkRows(1) + tdSql.checkData(0, 0, 2.0) + + tdSql.query('select twa(f) from d1.ct2;') + tdSql.checkRows(1) + tdSql.checkData(0, 0, 3.5) + + tdSql.query('select twa(f) from d1.st;') + tdSql.checkRows(1) + tdSql.checkData(0, 0, 2.0) + + tdSql.query('select ts,pk,unique(f) from d1.ct1 order by ts,pk;') + tdSql.checkRows(5) + 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.query('select ts,pk,unique(f) from d1.ct2 order by ts,pk;') + tdSql.checkRows(5) + tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0)) + tdSql.checkData(0, 1, 3) + tdSql.checkData(0, 2, 3) + tdSql.checkData(1, 0, datetime.datetime(2021, 4, 19, 0, 0)) + tdSql.checkData(1, 1, 4) + tdSql.checkData(1, 2, 4) + tdSql.checkData(2, 0, datetime.datetime(2021, 4, 19, 0, 0, 1)) + tdSql.checkData(2, 1, 2) + tdSql.checkData(2, 2, 2) + tdSql.checkData(3, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(3, 1, 7) + tdSql.checkData(3, 2, 7) + tdSql.checkData(4, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(4, 1, 8) + tdSql.checkData(4, 2, 8) + + tdSql.query('select ts,pk,unique(f) from d1.st 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 database d2 vgroups 2') + + tdSql.execute('use d2;') + + 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 * from d2.ct1 order by ts,pk;') + tdSql.checkRows(6) + 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, 1) + tdSql.checkData(2, 2, 1) + tdSql.checkData(3, 0, datetime.datetime(2021, 4, 19, 0, 0, 1)) + 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.query('select * from d2.ct2 order by ts,pk;') + tdSql.checkRows(6) + tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0)) + tdSql.checkData(0, 1, 3) + tdSql.checkData(0, 2, 3) + tdSql.checkData(1, 0, datetime.datetime(2021, 4, 19, 0, 0)) + tdSql.checkData(1, 1, 4) + tdSql.checkData(1, 2, 4) + tdSql.checkData(2, 0, datetime.datetime(2021, 4, 19, 0, 0, 1)) + tdSql.checkData(2, 1, 2) + tdSql.checkData(2, 2, 2) + tdSql.checkData(3, 0, datetime.datetime(2021, 4, 19, 0, 0, 1)) + tdSql.checkData(3, 1, 3) + tdSql.checkData(3, 2, 3) + tdSql.checkData(4, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(4, 1, 7) + tdSql.checkData(4, 2, 7) + tdSql.checkData(5, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(5, 1, 8) + tdSql.checkData(5, 2, 8) + + tdSql.query('select * from d2.st order by ts,pk;') + tdSql.checkRows(12) + 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.checkData(2, 0, datetime.datetime(2021, 4, 19, 0, 0)) + tdSql.checkData(2, 1, 3) + tdSql.checkData(2, 2, 3) + tdSql.checkData(2, 3, 2) + tdSql.checkData(3, 0, datetime.datetime(2021, 4, 19, 0, 0)) + tdSql.checkData(3, 1, 4) + tdSql.checkData(3, 2, 4) + tdSql.checkData(3, 3, 2) + tdSql.checkData(4, 0, datetime.datetime(2021, 4, 19, 0, 0, 1)) + tdSql.checkData(4, 1, 1) + tdSql.checkData(4, 2, 1) + tdSql.checkData(4, 3, 1) + tdSql.checkData(5, 0, datetime.datetime(2021, 4, 19, 0, 0, 1)) + tdSql.checkData(5, 1, 2) + tdSql.checkData(5, 2, 2) + tdSql.checkData(5, 3, 2) + tdSql.checkData(6, 0, datetime.datetime(2021, 4, 19, 0, 0, 1)) + tdSql.checkData(6, 1, 3) + tdSql.checkData(6, 2, 3) + tdSql.checkData(6, 3, 2) + tdSql.checkData(7, 0, datetime.datetime(2021, 4, 19, 0, 0, 1)) + tdSql.checkData(7, 1, 4) + tdSql.checkData(7, 2, 4) + tdSql.checkData(7, 3, 1) + tdSql.checkData(8, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(8, 1, 5) + tdSql.checkData(8, 2, 5) + tdSql.checkData(8, 3, 1) + tdSql.checkData(9, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(9, 1, 6) + tdSql.checkData(9, 2, 6) + tdSql.checkData(9, 3, 1) + tdSql.checkData(10, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(10, 1, 7) + tdSql.checkData(10, 2, 7) + tdSql.checkData(10, 3, 2) + tdSql.checkData(11, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(11, 1, 8) + tdSql.checkData(11, 2, 8) + tdSql.checkData(11, 3, 2) + + tdSql.query('select first(*) from d2.ct1;') + 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 first(*) from d2.ct2;') + tdSql.checkRows(1) + tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0)) + tdSql.checkData(0, 1, 3) + tdSql.checkData(0, 2, 3) + + tdSql.query('select first(*) from d2.st;') + 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 d2.ct1;') + tdSql.checkRows(1) + tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(0, 1, 6) + tdSql.checkData(0, 2, 6) + + tdSql.query('select last(*) from d2.ct2;') + 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(*) from d2.st;') + 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 d2.ct1;') + tdSql.checkRows(1) + tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(0, 1, 6) + tdSql.checkData(0, 2, 6) + + tdSql.query('select last_row(*) from d2.ct2;') + 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 d2.st;') + 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 d2.ct1;') + 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 ts,diff(f) from d2.ct2;') + tdSql.checkRows(2) + tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0, 1)) + tdSql.checkData(0, 1, -1) + tdSql.checkData(1, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(1, 1, 5) + + tdSql.query('select ts,diff(f) from d2.st;') + 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 d2.ct1;') + tdSql.checkRows(1) + tdSql.checkData(0, 0, 4.0) + + tdSql.query('select irate(f) from d2.ct2;') + tdSql.checkRows(1) + tdSql.checkData(0, 0, 5.0) + + tdSql.query('select irate(f) from d2.st;') + tdSql.checkRows(1) + tdSql.checkData(0, 0, 4.0) + + tdSql.query('select ts,derivative(f, 1s, 0) from d2.ct1;') + 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 ts,derivative(f, 1s, 0) from d2.ct2;') + tdSql.checkRows(2) + tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0, 1)) + tdSql.checkData(0, 1, -1.0) + tdSql.checkData(1, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(1, 1, 5.0) + + tdSql.query('select ts,derivative(f, 1s, 0) from d2.st;') + 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 d2.ct1;') + tdSql.checkRows(1) + tdSql.checkData(0, 0, 2.0) + + tdSql.query('select twa(f) from d2.ct2;') + tdSql.checkRows(1) + tdSql.checkData(0, 0, 3.5) + + tdSql.query('select twa(f) from d2.st;') + tdSql.checkRows(1) + tdSql.checkData(0, 0, 2.0) + + tdSql.query('select ts,pk,unique(f) from d2.ct1 order by ts,pk;') + tdSql.checkRows(5) + 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.query('select ts,pk,unique(f) from d2.ct2 order by ts,pk;') + tdSql.checkRows(5) + tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0)) + tdSql.checkData(0, 1, 3) + tdSql.checkData(0, 2, 3) + tdSql.checkData(1, 0, datetime.datetime(2021, 4, 19, 0, 0)) + tdSql.checkData(1, 1, 4) + tdSql.checkData(1, 2, 4) + tdSql.checkData(2, 0, datetime.datetime(2021, 4, 19, 0, 0, 1)) + tdSql.checkData(2, 1, 2) + tdSql.checkData(2, 2, 2) + tdSql.checkData(3, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(3, 1, 7) + tdSql.checkData(3, 2, 7) + tdSql.checkData(4, 0, datetime.datetime(2021, 4, 19, 0, 0, 2)) + tdSql.checkData(4, 1, 8) + tdSql.checkData(4, 2, 8) + + tdSql.query('select ts,pk,unique(f) from d2.st 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('drop database pk_func') + def stop(self): + tdSql.close() + tdLog.success("%s successfully executed" % __file__) + +tdCases.addWindows(__file__, TDTestCase()) +tdCases.addLinux(__file__, TDTestCase()) From a2112625f9b62b18943e5a56ba79b3173d4df4fc Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Wed, 27 Mar 2024 15:06:51 +0800 Subject: [PATCH 2/3] fix(tsdb): set correct uid list. --- source/dnode/vnode/src/tsdb/tsdbMergeTree.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbMergeTree.c b/source/dnode/vnode/src/tsdb/tsdbMergeTree.c index 97194acb00..b3dd1dec0e 100644 --- a/source/dnode/vnode/src/tsdb/tsdbMergeTree.c +++ b/source/dnode/vnode/src/tsdb/tsdbMergeTree.c @@ -365,7 +365,7 @@ static int32_t loadSttStatisticsBlockData(SSttFileReader *pSttFileReader, SSttBl } if (pStatisBlkArray->data[k].maxTbid.suid == suid) { - taosArrayAddBatch(pBlockLoadInfo->info.pUid, tBufferGetDataAt(&block.suids, i * sizeof(int64_t)), rows - i); + taosArrayAddBatch(pBlockLoadInfo->info.pUid, tBufferGetDataAt(&block.uids, i * sizeof(int64_t)), rows - i); taosArrayAddBatch(pBlockLoadInfo->info.pFirstKey, tBufferGetDataAt(&block.firstKeyTimestamps, i * sizeof(int64_t)), rows - i); taosArrayAddBatch(pBlockLoadInfo->info.pLastKey, From 43cefb9d55bd615b0fbcecf40f79dafc1b60bd65 Mon Sep 17 00:00:00 2001 From: slzhou Date: Wed, 27 Mar 2024 16:26:33 +0800 Subject: [PATCH 3/3] feat: find pk col from interp func node for interp operator --- source/libs/executor/src/timesliceoperator.c | 22 ++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/source/libs/executor/src/timesliceoperator.c b/source/libs/executor/src/timesliceoperator.c index abaebb1543..4b86f85d53 100644 --- a/source/libs/executor/src/timesliceoperator.c +++ b/source/libs/executor/src/timesliceoperator.c @@ -46,6 +46,8 @@ typedef struct STimeSliceOperatorInfo { SSDataBlock* pNextGroupRes; SSDataBlock* pRemainRes; // save block unfinished processing int32_t remainIndex; // the remaining index in the block to be processed + bool hasPk; + SColumn pkCol; } STimeSliceOperatorInfo; static void destroyTimeSliceOperatorInfo(void* param); @@ -953,6 +955,25 @@ _finished: return pResBlock->info.rows == 0 ? NULL : pResBlock; } +static int32_t extractPkColumnFromFuncs(SNodeList* pFuncs, bool* pHasPk, SColumn* pPkColumn) { + SNode* pNode; + FOREACH(pNode, pFuncs) { + if ((nodeType(pNode) == QUERY_NODE_TARGET) && + (nodeType(((STargetNode*)pNode)->pExpr) == QUERY_NODE_FUNCTION)) { + SFunctionNode* pFunc = (SFunctionNode*)((STargetNode*)pNode)->pExpr; + if (fmIsInterpFunc(pFunc->funcId) && pFunc->hasPk) { + SNode* pNode2 = (pFunc->pParameterList->pTail->pNode); + if ((nodeType(pNode2) == QUERY_NODE_COLUMN) && ((SColumnNode*)pNode2)->isPk) { + *pHasPk = true; + *pPkColumn = extractColumnFromColumnNode((SColumnNode*)pNode2); + break; + } + } + } + } + return TSDB_CODE_SUCCESS; +} + SOperatorInfo* createTimeSliceOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo) { STimeSliceOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(STimeSliceOperatorInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); @@ -985,6 +1006,7 @@ SOperatorInfo* createTimeSliceOperatorInfo(SOperatorInfo* downstream, SPhysiNode } pInfo->tsCol = extractColumnFromColumnNode((SColumnNode*)pInterpPhyNode->pTimeSeries); + extractPkColumnFromFuncs(pInterpPhyNode->pFuncs, &pInfo->hasPk, &pInfo->pkCol); pInfo->fillType = convertFillType(pInterpPhyNode->fillMode); initResultSizeInfo(&pOperator->resultInfo, 4096);