mirror of
https://github.com/taosdata/TDengine
synced 2026-05-24 10:09:01 +00:00
963 lines
47 KiB
Python
963 lines
47 KiB
Python
import random
|
|
import string
|
|
from util.log import *
|
|
from util.cases import *
|
|
from util.sql import *
|
|
from util.common import *
|
|
from util.tserror import *
|
|
import numpy as np
|
|
|
|
|
|
class TDTestCase:
|
|
def init(self, conn, logSql, replicaVar=1):
|
|
self.replicaVar = int(replicaVar)
|
|
tdLog.debug("start to execute %s" % __file__)
|
|
tdSql.init(conn.cursor())
|
|
|
|
self.dbname = 'test'
|
|
|
|
def condition_check(self, condition, row, col, expected_value):
|
|
if condition:
|
|
tdSql.checkData(row, col, expected_value)
|
|
|
|
def create_test_data(self):
|
|
tdSql.execute(f'create database if not exists {self.dbname};')
|
|
tdSql.execute(f'use {self.dbname}')
|
|
tdSql.execute(f'drop table if exists {self.dbname}.meters')
|
|
|
|
# tdLog.info("create test data")
|
|
# tdLog.info("taosBenchmark -y -t 10 -n 100 -b INT,FLOAT,NCHAR,BOOL")
|
|
# os.system("taosBenchmark -y -t 10 -n 100 -b INT,FLOAT,NCHAR,BOOL")
|
|
|
|
tdSql.execute(f'create table {self.dbname}.meters (ts timestamp, c0 int, c1 float, c2 nchar(30), c3 bool) tags (t1 nchar(30))')
|
|
tdSql.execute(f'create table {self.dbname}.d0 using {self.dbname}.meters tags("st1")')
|
|
tdSql.execute(f'create table {self.dbname}.d1 using {self.dbname}.meters tags("st2")')
|
|
tdSql.execute(f'insert into {self.dbname}.d0 values(1734574929000, 1, 1, "c2", true)')
|
|
tdSql.execute(f'insert into {self.dbname}.d0 values(1734574929001, 2, 2, "bbbbbbbbb1", false)')
|
|
tdSql.execute(f'insert into {self.dbname}.d0 values(1734574929002, 2, 2, "bbbbbbbbb1", false)')
|
|
tdSql.execute(f'insert into {self.dbname}.d0 values(1734574929003, 3, 3, "a2", true)')
|
|
tdSql.execute(f'insert into {self.dbname}.d0 values(1734574929004, 4, 4, "bbbbbbbbb2", false)')
|
|
|
|
tdSql.execute(f'insert into {self.dbname}.d1 values(1734574929000, 1, 1, "c2", true)')
|
|
|
|
tdSql.execute(f'use {self.dbname}')
|
|
tdSql.execute(f'Create table {self.dbname}.normal_table (ts timestamp, c0 int, c1 float, c2 nchar(30), c3 bool)')
|
|
tdSql.execute(f'insert into {self.dbname}.normal_table (select * from {self.dbname}.d0)')
|
|
|
|
def one_cols_1output_test(self):
|
|
tdLog.info("one_cols_1output_test")
|
|
tdSql.query(f'select cols(last(ts), ts) from {self.dbname}.meters')
|
|
tdSql.checkResColNameList(['ts'])
|
|
tdSql.query(f'select cols(last(ts), ts) as t1 from {self.dbname}.meters')
|
|
tdSql.checkResColNameList(['t1'])
|
|
tdSql.query(f'select cols(last(ts), ts as t1) from {self.dbname}.meters')
|
|
tdSql.checkResColNameList(['t1'])
|
|
tdSql.query(f'select cols(last(ts), c0) from {self.dbname}.meters')
|
|
tdSql.checkResColNameList(['c0'])
|
|
tdSql.query(f'select cols(last(ts), c1) from {self.dbname}.meters group by tbname')
|
|
tdSql.checkResColNameList(['c1'])
|
|
|
|
|
|
tdSql.query(f'select cols(last(ts+1), ts) as t1 from {self.dbname}.meters')
|
|
tdSql.checkResColNameList(['t1'])
|
|
tdSql.query(f'select cols(last(ts+1), ts+2 as t1) from {self.dbname}.meters')
|
|
tdSql.checkResColNameList(['t1'])
|
|
tdSql.query(f'select cols(last(ts+1), c0+10) from {self.dbname}.meters')
|
|
tdSql.checkResColNameList(['c0+10'])
|
|
|
|
def one_cols_multi_output_with_group_test(self, from_table = 'test.meters', isTmpTable = False):
|
|
select_t1 = ["", ", t1", ", t1 as tag1"]
|
|
for t1 in select_t1:
|
|
tags_count = 0 if t1 == "" else 1
|
|
tdLog.info("one_cols_1output_test_with_group")
|
|
tdSql.query(f'select cols(last(c1), ts) {t1} from {from_table} group by tbname')
|
|
tdSql.checkRows(2)
|
|
tdSql.checkCols(1 + tags_count)
|
|
tdSql.query(f'select cols(last(c1), ts) {t1} from {from_table} group by tbname order by tbname')
|
|
tdSql.checkCols(1 + tags_count)
|
|
tdSql.checkData(0, 0, 1734574929004)
|
|
tdSql.checkData(1, 0, 1734574929000)
|
|
tdSql.query(f'select cols(last(c1), ts) {t1} from {from_table} group by tbname order by ts')
|
|
tdSql.checkCols(1 + tags_count)
|
|
tdSql.checkData(0, 0, 1734574929000)
|
|
tdSql.checkData(1, 0, 1734574929004)
|
|
tdSql.query(f'select cols(last(c1), ts), tbname {t1} from {from_table} group by tbname order by tbname')
|
|
tdSql.checkRows(2)
|
|
tdSql.checkCols(2 + tags_count)
|
|
tdSql.checkData(0, 0, 1734574929004)
|
|
tdSql.checkData(0, 1, 'd0')
|
|
tdSql.checkData(1, 0, 1734574929000)
|
|
tdSql.checkData(1, 1, 'd1')
|
|
tdSql.query(f'select cols(last(c1), ts), tbname, t1 from {from_table} group by tbname order by tbname')
|
|
tdSql.checkRows(2)
|
|
tdSql.checkCols(3)
|
|
tdSql.checkData(0, 0, 1734574929004)
|
|
tdSql.checkData(0, 1, 'd0')
|
|
tdSql.checkData(0, 2, 'st1')
|
|
tdSql.checkData(1, 0, 1734574929000)
|
|
tdSql.checkData(1, 1, 'd1')
|
|
tdSql.checkData(1, 2, 'st2')
|
|
tdSql.query(f'select cols(last(c1), ts), tbname, t1 from {from_table} group by tbname order by t1')
|
|
tdSql.checkResColNameList(['ts', 'tbname', 't1'])
|
|
tdSql.checkRows(2)
|
|
tdSql.checkCols(3)
|
|
tdSql.checkData(0, 0, 1734574929004)
|
|
tdSql.checkData(0, 1, 'd0')
|
|
tdSql.checkData(0, 2, 'st1')
|
|
tdSql.checkData(1, 0, 1734574929000)
|
|
tdSql.checkData(1, 1, 'd1')
|
|
tdSql.checkData(1, 2, 'st2')
|
|
tdSql.query(f'select cols(last(ts), ts, c0), count(1) {t1} from {from_table} group by t1 order by t1')
|
|
tdSql.checkRows(2)
|
|
tdSql.checkCols(3 + tags_count)
|
|
tdSql.checkData(0, 0, 1734574929004)
|
|
tdSql.checkData(0, 1, 4)
|
|
tdSql.checkData(0, 2, 5)
|
|
self.condition_check(t1!="", 0, 3, 'st1')
|
|
tdSql.checkData(1, 0, 1734574929000)
|
|
tdSql.checkData(1, 1, 1)
|
|
tdSql.checkData(1, 2, 1)
|
|
self.condition_check(t1!="", 1, 3, 'st2')
|
|
|
|
tdSql.query(f'select cols(last(ts), ts, c0), sum(c0) {t1} from {from_table} group by t1 order by t1')
|
|
tdSql.checkRows(2)
|
|
tdSql.checkCols(3 + tags_count)
|
|
tdSql.checkData(0, 0, 1734574929004)
|
|
tdSql.checkData(0, 1, 4)
|
|
tdSql.checkData(0, 2, 12)
|
|
self.condition_check(t1!="", 0, 3, 'st1')
|
|
tdSql.checkData(1, 0, 1734574929000)
|
|
tdSql.checkData(1, 1, 1)
|
|
tdSql.checkData(1, 2, 1)
|
|
self.condition_check(t1!="", 1, 3, 'st2')
|
|
|
|
tdSql.error(f'select cols(last(ts), ts, c0), count(1), t1 from {from_table} group by t1 order by tbname')
|
|
|
|
if t1 != "" and isTmpTable:
|
|
# Not a GROUP BY expression
|
|
tdSql.error(f'select cols(last(ts), ts, c0), count(1) {t1} from {from_table} group by tbname order by tbname')
|
|
tdSql.error(f'select cols(last(ts), ts, c0), count(1), tbname {t1} from {from_table} group by tbname order by tbname')
|
|
tdSql.error(f'select cols(max(c0), ts, c0), count(1), tbname {t1} from {from_table} group by tbname order by tbname')
|
|
tdSql.error(f'select cols(last(c1), ts), count(1) {t1} from {from_table} group by tbname')
|
|
continue
|
|
tdSql.query(f'select cols(last(ts), ts, c0), count(1) {t1} from {from_table} group by tbname order by tbname')
|
|
tdSql.checkRows(2)
|
|
tdSql.checkCols(3 + tags_count)
|
|
tdSql.checkData(0, 0, 1734574929004)
|
|
tdSql.checkData(0, 1, 4)
|
|
tdSql.checkData(0, 2, 5)
|
|
tdSql.checkData(1, 0, 1734574929000)
|
|
tdSql.checkData(1, 1, 1)
|
|
tdSql.checkData(1, 2, 1)
|
|
tdSql.query(f'select cols(last(ts), ts, c0), count(1), tbname {t1} from {from_table} group by tbname order by tbname')
|
|
tdSql.checkRows(2)
|
|
tdSql.checkCols(4 + tags_count)
|
|
tdSql.checkData(0, 0, 1734574929004)
|
|
tdSql.checkData(0, 1, 4)
|
|
tdSql.checkData(0, 2, 5)
|
|
tdSql.checkData(0, 3, 'd0')
|
|
tdSql.checkData(1, 0, 1734574929000)
|
|
tdSql.checkData(1, 1, 1)
|
|
tdSql.checkData(1, 2, 1)
|
|
tdSql.checkData(1, 3, 'd1')
|
|
tdSql.query(f'select cols(max(c0), ts, c0), count(1), tbname {t1} from {from_table} group by tbname order by tbname')
|
|
tdSql.checkRows(2)
|
|
tdSql.checkCols(4 + tags_count)
|
|
tdSql.checkData(0, 0, 1734574929004)
|
|
tdSql.checkData(0, 1, 4)
|
|
tdSql.checkData(0, 2, 5)
|
|
tdSql.checkData(0, 3, 'd0')
|
|
self.condition_check(t1!="", 0, 4, 'st1')
|
|
tdSql.checkData(1, 0, 1734574929000)
|
|
tdSql.checkData(1, 1, 1)
|
|
tdSql.checkData(1, 2, 1)
|
|
tdSql.checkData(1, 3, 'd1')
|
|
self.condition_check(t1!="", 1, 4, 'st2')
|
|
|
|
tdSql.query(f'select cols(last(c1), ts), count(1) {t1} from {from_table} group by tbname')
|
|
tdSql.checkRows(2)
|
|
tdSql.checkCols(2 + tags_count)
|
|
|
|
def one_cols_multi_output_test(self, from_table = 'test.meters'):
|
|
tdLog.info(f"one_cols_1output_test {from_table}")
|
|
tdSql.query(f'select cols(last(ts), ts, c0) from {from_table}')
|
|
tdSql.checkResColNameList(['ts', 'c0'])
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(2)
|
|
tdSql.checkData(0, 0, 1734574929004)
|
|
tdSql.checkData(0, 1, 4)
|
|
tdSql.query(f'select cols(last(ts), ts as time, c0 cc) from {from_table}')
|
|
tdSql.checkResColNameList(['time', 'cc'])
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(2)
|
|
tdSql.checkData(0, 0, 1734574929004)
|
|
tdSql.checkData(0, 1, 4)
|
|
tdSql.query(f'select cols(last(ts), ts as t123456789t123456789t123456789t123456789t123456789t123456789t123456789, c0 cc) from {from_table}')
|
|
tdSql.checkResColNameList(['t123456789t123456789t123456789t123456789t123456789t123456789t123', 'cc'])
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(2)
|
|
tdSql.checkData(0, 0, 1734574929004)
|
|
tdSql.checkData(0, 1, 4)
|
|
tdSql.query(f'select cols(last(ts), c0, c1, c2, c3) from {from_table}')
|
|
tdSql.checkResColNameList(['c0', 'c1', 'c2', 'c3'])
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(4)
|
|
tdSql.checkData(0, 0, 4)
|
|
tdSql.checkData(0, 1, 4)
|
|
tdSql.checkData(0, 2, 'bbbbbbbbb2')
|
|
tdSql.checkData(0, 3, False)
|
|
tdSql.query(f'select cols(last(ts), c0, t1) from {from_table}')
|
|
tdSql.checkResColNameList(['c0', 't1'])
|
|
tdSql.checkRows(1)
|
|
tdSql.checkData(0, 0, 4)
|
|
tdSql.checkData(0, 1, 'st1')
|
|
tdSql.query(f'select cols(max(c0), ts) from {from_table}')
|
|
tdSql.checkResColNameList(['ts'])
|
|
tdSql.checkCols(1)
|
|
tdSql.checkData(0, 0, 1734574929004)
|
|
tdSql.query(f'select cols(min(c1), ts, c0) from {from_table}')
|
|
tdSql.checkResColNameList(['ts', 'c0'])
|
|
tdSql.checkCols(2)
|
|
tdSql.checkData(0, 0, 1734574929000)
|
|
tdSql.checkData(0, 1, 1)
|
|
|
|
tdSql.query(f'select cols(max(c0), ts, c0), count(1) from {from_table}')
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(3)
|
|
tdSql.checkData(0, 0, 1734574929004)
|
|
tdSql.checkData(0, 1, 4)
|
|
tdSql.checkData(0, 2, 6)
|
|
tdSql.query(f'select cols(last(ts), ts, c0), count(1) from {self.dbname}.d0')
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(3)
|
|
tdSql.checkData(0, 0, 1734574929004)
|
|
tdSql.checkData(0, 1, 4)
|
|
tdSql.checkData(0, 2, 5)
|
|
tdSql.query(f'select cols(last(ts), ts, c0), count(1) from {self.dbname}.d1')
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(3)
|
|
tdSql.checkData(0, 0, 1734574929000)
|
|
tdSql.checkData(0, 1, 1)
|
|
tdSql.checkData(0, 2, 1)
|
|
tdSql.query(f'select cols(last(ts), ts, c0), count(1) from {self.dbname}.normal_table')
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(3)
|
|
tdSql.checkData(0, 0, 1734574929004)
|
|
tdSql.checkData(0, 1, 4)
|
|
tdSql.checkData(0, 2, 5)
|
|
tdSql.query(f'select cols(first(ts), ts, c0), count(1) from {self.dbname}.normal_table')
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(3)
|
|
tdSql.checkData(0, 0, 1734574929000)
|
|
tdSql.checkData(0, 1, 1)
|
|
tdSql.checkData(0, 2, 5)
|
|
tdSql.query(f'select cols(min(c0), ts, c0), count(1) from {self.dbname}.normal_table')
|
|
tdSql.checkResColNameList(['ts', 'c0', 'count(1)'])
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(3)
|
|
tdSql.checkData(0, 0, 1734574929000)
|
|
tdSql.checkData(0, 1, 1)
|
|
tdSql.checkData(0, 2, 5)
|
|
|
|
tdSql.query(f'select cols(last(ts), ts, c0), avg(c0) from {from_table}')
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(3)
|
|
tdSql.checkData(0, 0, 1734574929004)
|
|
tdSql.checkData(0, 1, 4)
|
|
tdSql.checkData(0, 2, 2.1666666666666665)
|
|
|
|
tdSql.query(f'select cols(last(ts), ts, c0), count(1) from {from_table}')
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(3)
|
|
tdSql.checkData(0, 0, 1734574929004)
|
|
tdSql.checkData(0, 1, 4)
|
|
tdSql.checkData(0, 2, 6)
|
|
|
|
tdSql.query(f'select cols(last(ts), ts, c0), sum(c0) from {from_table}')
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(3)
|
|
tdSql.checkData(0, 0, 1734574929004)
|
|
tdSql.checkData(0, 1, 4)
|
|
tdSql.checkData(0, 2, 13)
|
|
|
|
tdSql.query(f'select count(1), cols(last(ts), ts, c0), min(c0) from {from_table}')
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(4)
|
|
tdSql.checkData(0, 0, 6)
|
|
tdSql.checkData(0, 1, 1734574929004)
|
|
tdSql.checkData(0, 2, 4)
|
|
tdSql.checkData(0, 3, 1)
|
|
|
|
# there's some error on last_row func when using sub query.
|
|
tdSql.query(f'select count(1), cols(last_row(ts), ts, c0), min(c0) from test.meters')
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(4)
|
|
tdSql.checkData(0, 0, 6)
|
|
tdSql.checkData(0, 1, 1734574929004)
|
|
tdSql.checkData(0, 2, 4)
|
|
tdSql.checkData(0, 3, 1)
|
|
|
|
# there's some error on last_row func when using sub query.
|
|
tdSql.query(f'select count(1), cols(last_row(ts), ts, c0), last_row(c1), last_row(c3) from test.meters')
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(5)
|
|
tdSql.checkData(0, 0, 6)
|
|
tdSql.checkData(0, 1, 1734574929004)
|
|
tdSql.checkData(0, 2, 4)
|
|
tdSql.checkData(0, 3, 4)
|
|
tdSql.checkData(0, 4, False)
|
|
|
|
|
|
tdSql.query(f'select cols(last(ts), ts, c0), count(1) from {from_table}')
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(3)
|
|
tdSql.checkData(0, 0, 1734574929004)
|
|
tdSql.checkData(0, 1, 4)
|
|
tdSql.checkData(0, 2, 6)
|
|
|
|
tdSql.query(f'select cols(max(c0), ts, c0), count(1) from {from_table}')
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(3)
|
|
tdSql.checkData(0, 0, 1734574929004)
|
|
tdSql.checkData(0, 1, 4)
|
|
tdSql.checkData(0, 2, 6)
|
|
|
|
tdSql.query(f'select cols(last(ts), ts as time, c0 cc), count(1) from {from_table}')
|
|
tdSql.checkResColNameList(['time', 'cc', 'count(1)'])
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(3)
|
|
tdSql.checkData(0, 0, 1734574929004)
|
|
tdSql.checkData(0, 1, 4)
|
|
tdSql.checkData(0, 2, 6)
|
|
|
|
tdSql.query(f'select cols(max(c1), ts as time, c0 cc), count(1) from {from_table}')
|
|
tdSql.checkResColNameList(['time', 'cc', 'count(1)'])
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(3)
|
|
tdSql.checkData(0, 0, 1734574929004)
|
|
tdSql.checkData(0, 1, 4)
|
|
tdSql.checkData(0, 2, 6)
|
|
|
|
tdSql.query(f'select cols(last(ts), c0, c1, c2, c3), count(1) from {from_table}')
|
|
tdSql.checkResColNameList(['c0', 'c1', 'c2', 'c3', 'count(1)'])
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(5)
|
|
tdSql.checkData(0, 0, 4)
|
|
tdSql.checkData(0, 1, 4)
|
|
tdSql.checkData(0, 2, 'bbbbbbbbb2')
|
|
tdSql.checkData(0, 3, False)
|
|
tdSql.checkData(0, 4, 6)
|
|
|
|
tdSql.query(f'select cols(max(c0), ts), count(1) from {from_table}')
|
|
tdSql.query(f'select cols(min(c1), ts, c0), count(1) from {from_table}')
|
|
tdSql.query(f'select count(1), cols(max(c0), ts) from {from_table}')
|
|
tdSql.query(f'select max(c0), cols(max(c0), ts) from {from_table}')
|
|
tdSql.query(f'select max(c1), cols(max(c0), ts) from {from_table}')
|
|
|
|
def multi_cols_output_test(self, from_table = 'test.meters', isTmpTable = False):
|
|
tdLog.info("multi_cols_output_test")
|
|
tdSql.query(f'select cols(last(c0), ts, c1), cols(first(c0), ts, c1), count(1) from {self.dbname}.meters')
|
|
tdSql.checkResColNameList(['ts', 'c1', 'ts', 'c1', 'count(1)'])
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(5)
|
|
tdSql.checkData(0, 0, 1734574929004)
|
|
tdSql.checkData(0, 1, 4)
|
|
tdSql.checkData(0, 2, 1734574929000)
|
|
tdSql.checkData(0, 3, 1)
|
|
tdSql.checkData(0, 4, 6)
|
|
tdSql.query(f'select cols(last(c0),ts lts, c1 lc1), cols(first(c0), ts fts, c1 as fc1), count(1) from test.meters')
|
|
tdSql.checkResColNameList(['lts', 'lc1', 'fts', 'fc1', 'count(1)'])
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(5)
|
|
tdSql.checkData(0, 0, 1734574929004)
|
|
tdSql.checkData(0, 1, 4)
|
|
tdSql.checkData(0, 2, 1734574929000)
|
|
tdSql.checkData(0, 3, 1)
|
|
tdSql.checkData(0, 4, 6)
|
|
tdSql.query(f'select cols(max(c0), ts as t1, c1 as c11), cols(first(c0), ts as t2, c1 c21), count(1) from {self.dbname}.meters')
|
|
tdSql.checkResColNameList(['t1', 'c11', 't2', 'c21', 'count(1)'])
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(5)
|
|
tdSql.checkData(0, 0, 1734574929004)
|
|
tdSql.checkData(0, 1, 4)
|
|
tdSql.checkData(0, 2, 1734574929000)
|
|
tdSql.checkData(0, 3, 1)
|
|
tdSql.checkData(0, 4, 6)
|
|
tdSql.query(f'select cols(max(c0), ts as t1, c1 as c11), cols(first(c0), ts as t2, c1 c21), count(1) from {self.dbname}.meters where c0 < 4')
|
|
tdSql.checkResColNameList(['t1', 'c11', 't2', 'c21', 'count(1)'])
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(5)
|
|
tdSql.checkData(0, 0, 1734574929003)
|
|
tdSql.checkData(0, 1, 3)
|
|
tdSql.checkData(0, 2, 1734574929000)
|
|
tdSql.checkData(0, 3, 1)
|
|
tdSql.checkData(0, 4, 5)
|
|
tdSql.query(f'select cols(max(c0), ts as t123456789t123456789t123456789t123456789t123456789t123456789t123456789, c1 as c11), cols(first(c0), \
|
|
ts as t123456789t123456789t123456789t123456789t123456789t123456789t123456789, c1 c21), count(1) from {self.dbname}.meters')
|
|
tdSql.checkResColNameList(['t123456789t123456789t123456789t123456789t123456789t123456789t123', 'c11', \
|
|
't123456789t123456789t123456789t123456789t123456789t123456789t123', 'c21', 'count(1)'])
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(5)
|
|
tdSql.checkData(0, 0, 1734574929004)
|
|
tdSql.checkData(0, 1, 4)
|
|
tdSql.checkData(0, 2, 1734574929000)
|
|
tdSql.checkData(0, 3, 1)
|
|
tdSql.checkData(0, 4, 6)
|
|
tdSql.query(f'select cols(max(c0), ts as t123456789t123456789t123456789t123456789t123456789t123456789t123456789, c1 as c11), cols(first(c0), \
|
|
ts as t123456789t123456789t123456789t123456789t123456789t123456789t123456789, c1 c21), count(1) from {self.dbname}.meters where c0 < 4')
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(5)
|
|
tdSql.checkData(0, 0, 1734574929003)
|
|
tdSql.checkData(0, 1, 3)
|
|
tdSql.checkData(0, 2, 1734574929000)
|
|
tdSql.checkData(0, 3, 1)
|
|
tdSql.checkData(0, 4, 5)
|
|
tdSql.query(f'select cols(max(c0), ts as t1, c1 as c11), cols(first(c0), ts as t2, c1 c21), count(1) from test.meters where c0 < 4 group by tbname order by t1')
|
|
tdSql.checkResColNameList(['t1', 'c11', 't2', 'c21', 'count(1)'])
|
|
tdSql.checkRows(2)
|
|
tdSql.checkCols(5)
|
|
tdSql.checkData(0, 0, 1734574929000)
|
|
tdSql.checkData(0, 1, 1)
|
|
tdSql.checkData(0, 2, 1734574929000)
|
|
tdSql.checkData(0, 3, 1)
|
|
tdSql.checkData(0, 4, 1)
|
|
tdSql.checkData(1, 0, 1734574929003)
|
|
tdSql.checkData(1, 1, 3)
|
|
tdSql.checkData(1, 2, 1734574929000)
|
|
tdSql.checkData(1, 3, 1)
|
|
tdSql.checkData(1, 4, 4)
|
|
|
|
tdSql.query(f'select cols(last_row(c0), ts as t1, c1 as c11), cols(first(c0), ts as t2, c1 c21), count(1) from test.meters where c0 < 4 group by tbname order by t1')
|
|
tdSql.checkResColNameList(['t1', 'c11', 't2', 'c21', 'count(1)'])
|
|
tdSql.checkRows(2)
|
|
tdSql.checkCols(5)
|
|
tdSql.checkData(0, 0, 1734574929000)
|
|
tdSql.checkData(0, 1, 1)
|
|
tdSql.checkData(0, 2, 1734574929000)
|
|
tdSql.checkData(0, 3, 1)
|
|
tdSql.checkData(0, 4, 1)
|
|
tdSql.checkData(1, 0, 1734574929003)
|
|
tdSql.checkData(1, 1, 3)
|
|
tdSql.checkData(1, 2, 1734574929000)
|
|
tdSql.checkData(1, 3, 1)
|
|
tdSql.checkData(1, 4, 4)
|
|
|
|
tdSql.query(f'select cols(last_row(c0), ts as t1, c1 as c11), cols(min(c0), ts as t2, c1 c21), count(1) from test.meters where c0 < 4 group by tbname order by t1')
|
|
tdSql.checkResColNameList(['t1', 'c11', 't2', 'c21', 'count(1)'])
|
|
tdSql.checkRows(2)
|
|
tdSql.checkCols(5)
|
|
tdSql.checkData(0, 0, 1734574929000)
|
|
tdSql.checkData(0, 1, 1)
|
|
tdSql.checkData(0, 2, 1734574929000)
|
|
tdSql.checkData(0, 3, 1)
|
|
tdSql.checkData(0, 4, 1)
|
|
tdSql.checkData(1, 0, 1734574929003)
|
|
tdSql.checkData(1, 1, 3)
|
|
tdSql.checkData(1, 2, 1734574929000)
|
|
tdSql.checkData(1, 3, 1)
|
|
tdSql.checkData(1, 4, 4)
|
|
|
|
tdSql.query(f'select cols(last_row(c0), ts as t1, c1 as c11), cols(mode(c0), ts as t2, c1 c21), count(1) from test.meters where c0 < 4 group by tbname order by t1')
|
|
tdSql.checkResColNameList(['t1', 'c11', 't2', 'c21', 'count(1)'])
|
|
tdSql.checkRows(2)
|
|
tdSql.checkCols(5)
|
|
tdSql.checkData(0, 0, 1734574929000)
|
|
tdSql.checkData(0, 1, 1)
|
|
tdSql.checkData(0, 2, 1734574929000)
|
|
tdSql.checkData(0, 3, 1)
|
|
tdSql.checkData(0, 4, 1)
|
|
tdSql.checkData(1, 0, 1734574929003)
|
|
tdSql.checkData(1, 1, 3)
|
|
#tdSql.checkData(1, 2, 1734574929000) # mode(c0) is return a random ts of same c0
|
|
tdSql.checkData(1, 3, 2)
|
|
tdSql.checkData(1, 4, 4)
|
|
|
|
# fixed: has same select function outof cols func
|
|
tdSql.query(f'select cols(last_row(c0), ts as t1, c1 as c11), cols(first(c0), ts as t2, c1 c21), first(c0) from test.meters where c0 < 4 group by tbname order by t1')
|
|
tdSql.checkResColNameList(['t1', 'c11', 't2', 'c21', 'first(c0)'])
|
|
tdSql.checkRows(2)
|
|
tdSql.checkCols(5)
|
|
tdSql.checkData(0, 0, 1734574929000)
|
|
tdSql.checkData(0, 1, 1)
|
|
tdSql.checkData(0, 2, 1734574929000)
|
|
tdSql.checkData(0, 3, 1)
|
|
tdSql.checkData(0, 4, 1)
|
|
tdSql.checkData(1, 0, 1734574929003)
|
|
tdSql.checkData(1, 1, 3)
|
|
tdSql.checkData(1, 2, 1734574929000)
|
|
tdSql.checkData(1, 3, 1)
|
|
tdSql.checkData(1, 4, 1)
|
|
|
|
tdSql.query(f'select cols(last_row(c0), ts as t1, c1 as c11), cols(first(c0), ts as t2, c1 c21), first(c0), cols(last(c0), ts, c1) from test.meters where c0 < 4 group by tbname order by t1;')
|
|
tdSql.checkResColNameList(['t1', 'c11', 't2', 'c21', 'first(c0)', 'ts', 'c1'])
|
|
tdSql.checkRows(2)
|
|
tdSql.checkCols(7)
|
|
tdSql.checkData(0, 0, 1734574929000)
|
|
tdSql.checkData(0, 1, 1)
|
|
tdSql.checkData(0, 2, 1734574929000)
|
|
tdSql.checkData(0, 3, 1)
|
|
tdSql.checkData(0, 4, 1)
|
|
tdSql.checkData(0, 5, 1734574929000)
|
|
tdSql.checkData(0, 6, 1)
|
|
tdSql.checkData(1, 0, 1734574929003)
|
|
tdSql.checkData(1, 1, 3)
|
|
tdSql.checkData(1, 2, 1734574929000)
|
|
tdSql.checkData(1, 3, 1)
|
|
tdSql.checkData(1, 4, 1)
|
|
tdSql.checkData(1, 5, 1734574929003)
|
|
tdSql.checkData(1, 6, 3)
|
|
|
|
# sub query has cols func
|
|
tdSql.query(f'select c11 from (select cols(last_row(c0), ts as t1, c1 as c11), cols(first(c0), ts as t2, c1 c21), first(c0) from test.meters where c0 < 4)')
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(1)
|
|
tdSql.checkData(0, 0, 3)
|
|
tdSql.query(f'select c11, c21 from (select cols(last_row(c0), ts as t1, c1 as c11), cols(first(c0), ts as t2, c1 c21), first(c0) from test.meters where c0 < 4)')
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(2)
|
|
tdSql.checkData(0, 0, 3)
|
|
tdSql.checkData(0, 1, 1)
|
|
tdSql.query(f'select c1, c21 from (select cols(last_row(c0), ts as t1, c1), cols(first(c0), ts as t2, c1 c21), first(c0) from test.meters where c0 < 4)')
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(2)
|
|
tdSql.checkData(0, 0, 3)
|
|
tdSql.checkData(0, 1, 1)
|
|
tdSql.error(f'select c1 from (select cols(last_row(c0), ts as t1, c1), cols(first(c0), ts as t2, c1), first(c0) from test.meters where c0 < 4)')
|
|
|
|
# cols on system table
|
|
tdSql.query(f'select cols(max(vgroup_id), uid) from information_schema.ins_tables')
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(1)
|
|
tdSql.query(f'select cols(max(vgroup_id), uid, `ttl`, create_time) from information_schema.ins_tables')
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(3)
|
|
tdSql.query(f'select cols(max(vgroup_id), uid as uidname) from information_schema.ins_tables')
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(1)
|
|
tdSql.error(f'select cols(last(vgroup_id), uid, `ttl`, create_time) from information_schema.ins_tables')
|
|
tdSql.error(f'select cols(first(vgroup_id), uid, `ttl`, create_time) from information_schema.ins_tables')
|
|
|
|
def funcSupperTableTest(self):
|
|
tdSql.execute('create database if not exists db;')
|
|
tdSql.execute('use db')
|
|
tdSql.execute(f'drop table if exists db.st')
|
|
|
|
tdSql.execute('create table db.st (ts timestamp, c0 int, c1 float, c2 nchar(30), c3 bool) tags (t1 nchar(30))')
|
|
tdSql.execute('create table db.st_1 using db.st tags("st1")')
|
|
tdSql.execute('create table db.st_2 using db.st tags("st1")')
|
|
tdSql.execute('insert into db.st_1 values(1734574929000, 1, 1, "c2", true)')
|
|
tdSql.execute('insert into db.st_1 values(1734574929001, 2, 2, "bbbbbbbbb1", false)')
|
|
tdSql.execute('insert into db.st_1 values(1734574929002, 3, 3, "a2", true)')
|
|
tdSql.execute('insert into db.st_1 values(1734574929004, 4, 4, "bbbbbbbbb2", false)')
|
|
|
|
tdSql.query(f'select cols(last(c0), ts, c1, c2, c3), cols(first(c0), ts, c1, c2, c3) from db.st')
|
|
tdSql.checkRows(1)
|
|
tdSql.checkData(0, 0, 1734574929004)
|
|
tdSql.checkData(0, 1, '4.0')
|
|
tdSql.checkData(0, 2, 'bbbbbbbbb2')
|
|
tdSql.checkData(0, 3, False)
|
|
tdSql.checkData(0, 4, 1734574929000)
|
|
tdSql.checkData(0, 5, '1.0')
|
|
tdSql.checkData(0, 6, 'c2')
|
|
tdSql.checkData(0, 7, True)
|
|
|
|
tdSql.execute(f'drop table if exists db.st')
|
|
|
|
|
|
def funcNestTest(self):
|
|
tdSql.execute('create database db;')
|
|
tdSql.execute('use db')
|
|
tdSql.execute(f'drop table if exists db.d1')
|
|
|
|
tdSql.execute('create table db.d1 (ts timestamp, c0 int, c1 float, c2 nchar(30), c3 bool)')
|
|
tdSql.execute('insert into db.d1 values(1734574929000, 1, 1.1, "a", true)')
|
|
tdSql.execute('insert into db.d1 values(1734574930000, 2, 2.2, "bbbbbbbbb", false)')
|
|
|
|
groupby = ["", "group by tbname order ts", "group by tbname order t1", "group by tbname order ts"]
|
|
|
|
tdSql.query(f'select cols(last(c0), ts, c2), cols(first(c0), ts, c2) from db.d1')
|
|
tdSql.checkResColNameList(['ts', 'c2', 'ts', 'c2'])
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(4)
|
|
tdSql.checkData(0, 0, 1734574930000)
|
|
tdSql.checkData(0, 1, 'bbbbbbbbb')
|
|
tdSql.checkData(0, 2, 1734574929000)
|
|
tdSql.checkData(0, 3, 'a')
|
|
tdSql.query(f'select cols(last(c0), ts, c1, c2, c3), cols(first(c0), ts, c1, c2, c3) from db.d1')
|
|
tdSql.checkResColNameList(['ts', 'c1', 'c2', 'c3', 'ts', 'c1', 'c2', 'c3'])
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(8)
|
|
tdSql.checkData(0, 0, 1734574930000)
|
|
tdSql.checkData(0, 1, 2.2)
|
|
tdSql.checkData(0, 2, 'bbbbbbbbb')
|
|
tdSql.checkData(0, 3, False)
|
|
tdSql.checkData(0, 4, 1734574929000)
|
|
tdSql.checkData(0, 5, 1.1)
|
|
tdSql.checkData(0, 6, 'a')
|
|
tdSql.checkData(0, 7, True)
|
|
|
|
tdSql.query(f'select cols(last(ts), c1), cols(first(ts), c1) from db.d1')
|
|
tdSql.checkResColNameList(['c1', 'c1'])
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(2)
|
|
tdSql.checkData(0, 0, 2.2)
|
|
tdSql.checkData(0, 1, 1.1)
|
|
|
|
tdSql.query(f'select cols(first(ts), c0, c1), cols(first(ts), c0, c1) from db.d1')
|
|
tdSql.checkResColNameList(['c0', 'c1', 'c0', 'c1'])
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(4)
|
|
tdSql.checkData(0, 0, 1)
|
|
tdSql.checkData(0, 1, 1.1)
|
|
tdSql.checkData(0, 2, 1)
|
|
tdSql.checkData(0, 3, 1.1)
|
|
|
|
tdSql.query(f'select cols(first(ts), c0, c1), cols(first(ts+1), c0, c1) from db.d1')
|
|
tdSql.checkResColNameList(['c0', 'c1', 'c0', 'c1'])
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(4)
|
|
tdSql.checkData(0, 0, 1)
|
|
tdSql.checkData(0, 1, 1.1)
|
|
tdSql.checkData(0, 2, 1)
|
|
tdSql.checkData(0, 3, 1.1)
|
|
|
|
tdSql.query(f'select cols(first(ts), c0, c1), cols(first(ts), c0+1, c1+2) from db.d1')
|
|
tdSql.checkResColNameList(['c0', 'c1', 'c0+1', 'c1+2'])
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(4)
|
|
tdSql.checkData(0, 0, 1)
|
|
tdSql.checkData(0, 1, 1.1)
|
|
tdSql.checkData(0, 2, 2)
|
|
tdSql.checkData(0, 3, 3.1)
|
|
|
|
tdSql.query(f'select cols(first(c0), ts, length(c2)), cols(last(c0), ts, length(c2)) from db.d1')
|
|
tdSql.checkResColNameList(['ts', 'length(c2)', 'ts', 'length(c2)'])
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(4)
|
|
tdSql.checkData(0, 0, 1734574929000)
|
|
tdSql.checkData(0, 1, 4)
|
|
tdSql.checkData(0, 2, 1734574930000)
|
|
tdSql.checkData(0, 3, 36)
|
|
tdSql.query(f'select cols(first(c0), ts, length(c2)), cols(last(c0), ts, length(c2) + 2) from db.d1')
|
|
tdSql.checkResColNameList(['ts', 'length(c2)', 'ts', 'length(c2) + 2'])
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(4)
|
|
tdSql.checkData(0, 0, 1734574929000)
|
|
tdSql.checkData(0, 1, 4)
|
|
tdSql.checkData(0, 2, 1734574930000)
|
|
tdSql.checkData(0, 3, 38)
|
|
|
|
tdSql.query(f'select cols(first(c0), ts, c2), cols(last(c0), ts, length(c2) + 2) from db.d1')
|
|
tdSql.checkResColNameList(['ts', 'c2', 'ts', 'length(c2) + 2'])
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(4)
|
|
tdSql.checkData(0, 0, 1734574929000)
|
|
tdSql.checkData(0, 1, 'a')
|
|
tdSql.checkData(0, 2, 1734574930000)
|
|
tdSql.checkData(0, 3, 38)
|
|
|
|
tdSql.query(f'select cols(min(c0), ts, c2), cols(last(c0), ts, length(c2) + 2) from db.d1')
|
|
tdSql.checkResColNameList(['ts', 'c2', 'ts', 'length(c2) + 2'])
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(4)
|
|
tdSql.checkData(0, 0, 1734574929000)
|
|
tdSql.checkData(0, 1, 'a')
|
|
tdSql.checkData(0, 2, 1734574930000)
|
|
tdSql.checkData(0, 3, 38)
|
|
|
|
tdSql.query(f'select cols(min(c0), ts, c2), cols(first(c0), ts, length(c2) + 2) from db.d1')
|
|
tdSql.checkResColNameList(['ts', 'c2', 'ts', 'length(c2) + 2'])
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(4)
|
|
tdSql.checkData(0, 0, 1734574929000)
|
|
tdSql.checkData(0, 1, 'a')
|
|
tdSql.checkData(0, 2, 1734574929000)
|
|
tdSql.checkData(0, 3, 6)
|
|
|
|
def orderby_test(self, from_table = 'test.meters', isTmpTable = False):
|
|
select_t1 = ["", ", t1", ", t1 as tag1"]
|
|
for t1 in select_t1:
|
|
if t1 != "" and isTmpTable:
|
|
# Not a GROUP BY expression
|
|
tdSql.error(f'select count(1), cols(last(c0),c2) {t1} from {from_table} group by tbname order by cols(last(c0), c2)')
|
|
tdSql.error(f'select count(1), cols(last(c0),c2) {t1} from {from_table} group by tbname order by cols(last(c0), c2) desc')
|
|
tdSql.error(f'select count(1), cols(last(c0),c2) {t1} from {from_table} group by tbname order by cols(last(c0), c0)')
|
|
tdSql.error(f'select count(1), cols(last(c0),c2) {t1} from {from_table} group by tbname order by cols(last(c0), c0), cols(last(c0), c1)')
|
|
tdSql.error(f'select count(1), last(c2) {t1} from {from_table} group by tbname order by cols(last(c0), c2)')
|
|
tdSql.error(f'select count(1), last(c2) {t1} from {from_table} group by tbname order by cols(last(c0), c2) desc')
|
|
tdSql.error(f'select count(1), last(c2) {t1} from {from_table} group by tbname order by cols(last(c0), c0)')
|
|
tdSql.error(f'select count(1), last(c2) {t1} from {from_table} group by tbname order by cols(last(c0), c0), cols(last(c0), c1)')
|
|
tdSql.error(f'select count(1), max(c2) {t1} from {from_table} group by tbname order by cols(last(c0), c2)')
|
|
tdSql.error(f'select count(1), max(c2) {t1} from {from_table} group by tbname order by cols(last(c0), c2) desc')
|
|
tdSql.error(f'select count(1), max(c2) {t1} from {from_table} group by tbname order by cols(last(c0), c0)')
|
|
tdSql.error(f'select count(1), max(c2) {t1} from {from_table} group by tbname order by cols(last(c0), c0), cols(last(c0), c1)')
|
|
continue
|
|
tdSql.query(f'select count(1), cols(last(c0),c2) {t1} from {from_table} group by tbname order by cols(last(c0), c2)')
|
|
tdSql.checkRows(2)
|
|
tags_count = 0 if t1 == "" else 1
|
|
tdLog.debug(f'tags_count: {tags_count}')
|
|
tdSql.checkCols(2 + tags_count)
|
|
tdSql.checkData(0, 0, 5)
|
|
tdSql.checkData(0, 1, 'bbbbbbbbb2')
|
|
self.condition_check(t1 != "", 0, 2, 'st1')
|
|
tdSql.checkData(1, 0, 1)
|
|
tdSql.checkData(1, 1, 'c2')
|
|
self.condition_check(t1 != "", 1, 2, 'st2')
|
|
|
|
tdSql.query(f'select count(1), cols(last(c0),c2) {t1} from {from_table} group by tbname order by cols(last(c0), c2) desc')
|
|
tdSql.checkRows(2)
|
|
tdSql.checkCols(2 + tags_count)
|
|
tdSql.checkData(0, 0, 1)
|
|
tdSql.checkData(0, 1, 'c2')
|
|
self.condition_check(t1 != "", 0, 2, 'st2')
|
|
tdSql.checkData(1, 0, 5)
|
|
tdSql.checkData(1, 1, 'bbbbbbbbb2')
|
|
self.condition_check(t1 != "", 1, 2, 'st1')
|
|
|
|
tdSql.query(f'select count(1), cols(last(c0),c2) {t1} from {from_table} group by tbname order by cols(last(c0), c0)')
|
|
tdSql.checkRows(2)
|
|
tdSql.checkCols(2 + tags_count)
|
|
tdSql.checkData(0, 0, 1)
|
|
tdSql.checkData(0, 1, 'c2')
|
|
self.condition_check(t1 != "", 0, 2, 'st2')
|
|
tdSql.checkData(1, 0, 5)
|
|
tdSql.checkData(1, 1, 'bbbbbbbbb2')
|
|
self.condition_check(t1 != "", 1, 2, 'st1')
|
|
|
|
tdSql.query(f'select count(1), cols(last(c0),c2) {t1} from {from_table} group by tbname order by 1')
|
|
tdSql.checkRows(2)
|
|
tdSql.checkCols(2 + tags_count)
|
|
tdSql.checkData(0, 0, 1)
|
|
tdSql.checkData(0, 1, 'c2')
|
|
self.condition_check(t1 != "", 0, 2, 'st2')
|
|
tdSql.checkData(1, 0, 5)
|
|
tdSql.checkData(1, 1, 'bbbbbbbbb2')
|
|
self.condition_check(t1 != "", 1, 2, 'st1')
|
|
|
|
tdSql.query(f'select count(1), cols(last(c0),c2) {t1} from {from_table} group by tbname order by 2')
|
|
tdSql.checkRows(2)
|
|
tdSql.checkCols(2 + tags_count)
|
|
tdSql.checkData(0, 0, 5)
|
|
tdSql.checkData(0, 1, 'bbbbbbbbb2')
|
|
self.condition_check(t1 != "", 0, 2, 'st1')
|
|
tdSql.checkData(1, 0, 1)
|
|
tdSql.checkData(1, 1, 'c2')
|
|
self.condition_check(t1 != "", 1, 2, 'st2')
|
|
|
|
tdSql.query(f'select count(1), cols(last(c0),c2) {t1} from {from_table} group by tbname order by cols(last(c0), c0), cols(last(c0), c1)')
|
|
tdSql.checkRows(2)
|
|
tdSql.checkCols(2 + tags_count)
|
|
tdSql.checkData(0, 0, 1)
|
|
tdSql.checkData(0, 1, 'c2')
|
|
self.condition_check(t1 != "", 0, 2, 'st2')
|
|
tdSql.checkData(1, 0, 5)
|
|
tdSql.checkData(1, 1, 'bbbbbbbbb2')
|
|
self.condition_check(t1 != "", 1, 2, 'st1')
|
|
|
|
tdSql.query(f'select count(1), last(c2) {t1} from {from_table} group by tbname order by cols(last(c0), c2)')
|
|
tdSql.checkRows(2)
|
|
tdSql.checkCols(2 + tags_count)
|
|
tdSql.checkData(0, 0, 5)
|
|
tdSql.checkData(0, 1, 'bbbbbbbbb2')
|
|
self.condition_check(t1 != "", 0, 2, 'st1')
|
|
tdSql.checkData(1, 0, 1)
|
|
tdSql.checkData(1, 1, 'c2')
|
|
self.condition_check(t1 != "", 1, 2, 'st2')
|
|
|
|
tdSql.query(f'select count(1), last(c2) {t1} from {from_table} group by tbname order by cols(last(c0), c2) desc')
|
|
tdSql.checkRows(2)
|
|
tdSql.checkCols(2 + tags_count)
|
|
tdSql.checkData(0, 0, 1)
|
|
tdSql.checkData(0, 1, 'c2')
|
|
self.condition_check(t1 != "", 0, 2, 'st2')
|
|
tdSql.checkData(1, 0, 5)
|
|
tdSql.checkData(1, 1, 'bbbbbbbbb2')
|
|
self.condition_check(t1 != "", 1, 2, 'st1')
|
|
|
|
tdSql.query(f'select count(1), last(c2) {t1} from {from_table} group by tbname order by cols(last(c0), c0)')
|
|
tdSql.checkRows(2)
|
|
tdSql.checkCols(2 + tags_count)
|
|
tdSql.checkData(0, 0, 1)
|
|
tdSql.checkData(0, 1, 'c2')
|
|
self.condition_check(t1 != "", 0, 2, 'st2')
|
|
tdSql.checkData(1, 0, 5)
|
|
tdSql.checkData(1, 1, 'bbbbbbbbb2')
|
|
self.condition_check(t1 != "", 1, 2, 'st1')
|
|
|
|
tdSql.query(f'select count(1), last(c2) {t1} from {from_table} group by tbname order by cols(last(c0), c0), cols(last(c0), c1)')
|
|
tdSql.checkRows(2)
|
|
tdSql.checkCols(2 + tags_count)
|
|
tdSql.checkData(0, 0, 1)
|
|
tdSql.checkData(0, 1, 'c2')
|
|
self.condition_check(t1 != "", 0, 2, 'st2')
|
|
tdSql.checkData(1, 0, 5)
|
|
tdSql.checkData(1, 1, 'bbbbbbbbb2')
|
|
self.condition_check(t1 != "", 1, 2, 'st1')
|
|
|
|
tdSql.query(f'select count(1), max(c2) {t1} from {from_table} group by tbname order by cols(last(c0), c2)')
|
|
tdSql.checkRows(2)
|
|
tdSql.checkCols(2 + tags_count)
|
|
tdSql.checkData(0, 0, 5)
|
|
tdSql.checkData(0, 1, 'c2')
|
|
self.condition_check(t1 != "", 0, 2, 'st1')
|
|
tdSql.checkData(1, 0, 1)
|
|
tdSql.checkData(1, 1, 'c2')
|
|
self.condition_check(t1 != "", 1, 2, 'st2')
|
|
|
|
tdSql.query(f'select count(1), max(c2) {t1} from {from_table} group by tbname order by cols(last(c0), c2) desc')
|
|
tdSql.checkRows(2)
|
|
tdSql.checkCols(2 + tags_count)
|
|
tdSql.checkData(0, 0, 1)
|
|
tdSql.checkData(0, 1, 'c2')
|
|
self.condition_check(t1 != "", 0, 2, 'st2')
|
|
tdSql.checkData(1, 0, 5)
|
|
tdSql.checkData(1, 1, 'c2')
|
|
self.condition_check(t1 != "", 1, 2, 'st1')
|
|
|
|
tdSql.query(f'select count(1), max(c2) {t1} from {from_table} group by tbname order by cols(last(c0), c0)')
|
|
tdSql.checkRows(2)
|
|
tdSql.checkCols(2 + tags_count)
|
|
tdSql.checkData(0, 0, 1)
|
|
tdSql.checkData(0, 1, 'c2')
|
|
self.condition_check(t1 != "", 0, 2, 'st2')
|
|
tdSql.checkData(1, 0, 5)
|
|
tdSql.checkData(1, 1, 'c2')
|
|
self.condition_check(t1 != "", 1, 2, 'st1')
|
|
|
|
tdSql.query(f'select count(1), max(c2) {t1} from {from_table} group by tbname order by cols(last(c0), c0), cols(last(c0), c1)')
|
|
tdSql.checkRows(2)
|
|
tdSql.checkCols(2 + tags_count)
|
|
tdSql.checkData(0, 0, 1)
|
|
tdSql.checkData(0, 1, 'c2')
|
|
self.condition_check(t1 != "", 0, 2, 'st2')
|
|
tdSql.checkData(1, 0, 5)
|
|
tdSql.checkData(1, 1, 'c2')
|
|
self.condition_check(t1 != "", 1, 2, 'st1')
|
|
|
|
def parse_test(self):
|
|
tdLog.info("parse test")
|
|
|
|
#** error sql **#
|
|
tdSql.error(f'select cols(ts) from {self.dbname}.meters group by tbname')
|
|
tdSql.error(f'select cols(ts) from {self.dbname}.meters')
|
|
tdSql.error(f'select last(cols(ts)) from {self.dbname}.meters')
|
|
tdSql.error(f'select last(cols(ts, ts)) from {self.dbname}.meters')
|
|
tdSql.error(f'select last(cols(ts, ts), ts) from {self.dbname}.meters')
|
|
tdSql.error(f'select cols(last(ts), ts as t1) as t1 from {self.dbname}.meters')
|
|
tdSql.error(f'select cols(last(ts), ts, c0) t1 from {self.dbname}.meters')
|
|
tdSql.error(f'select cols(last(ts), ts t1) tt from {self.dbname}.meters')
|
|
tdSql.error(f'select cols(last(ts), c0 cc0, c1 cc1) cc from {self.dbname}.meters')
|
|
tdSql.error(f'select cols(last(ts), c0 as cc0) as cc from {self.dbname}.meters')
|
|
tdSql.error(f'select cols(ts) + 1 from {self.dbname}.meters group by tbname')
|
|
tdSql.error(f'select last(cols(ts)+1) from {self.dbname}.meters')
|
|
tdSql.error(f'select last(cols(ts+1, ts)) from {self.dbname}.meters')
|
|
tdSql.error(f'select last(cols(ts, ts), ts+1) from {self.dbname}.meters')
|
|
tdSql.error(f'select last(cols(last(ts+1), ts+1), ts) from {self.dbname}.meters')
|
|
tdSql.error(f'select cols(last(ts), ts+1 as t1) as t1 from {self.dbname}.meters')
|
|
tdSql.error(f'select cols(last(ts+1), ts, c0) t1 from {self.dbname}.meters')
|
|
tdSql.error(f'select cols(last(ts), ts t1) tt from {self.dbname}.meters')
|
|
tdSql.error(f'select cols(first(ts+1), c0+2 cc0, c1 cc1) cc from {self.dbname}.meters')
|
|
tdSql.error(f'select cols(last(ts)+1, c0+2 as cc0) as cc from {self.dbname}.meters')
|
|
tdSql.error(f'select cols(ABS(c0), c1) from {self.dbname}.meters group by tbname')
|
|
|
|
tdSql.error(f'select cols(last(ts)+1, ts) from {self.dbname}.meters')
|
|
tdSql.error(f'select cols(last(ts)+10, c1+10) from {self.dbname}.meters group by tbname')
|
|
|
|
tdSql.error(f'select cols(cols(last(ts), c0), c0) as cc from {self.dbname}.meters')
|
|
tdSql.error(f'select cols(last(ts), cols(last(ts), c0), c0) as cc from {self.dbname}.meters')
|
|
|
|
# Aggregate functions do not support nesting
|
|
tdSql.error(f'select count(1), cols(last_row(ts), ts, first(c0)), last_row(c1) from {self.dbname}.meters')
|
|
|
|
# Not a GROUP BY expression
|
|
tdSql.error(f'select count(1), cols(last(c0),c0) from test.meters group by tbname order by c3 desc')
|
|
|
|
def subquery_test(self):
|
|
tdSql.query(f'select count(1), cols(last(c0),c0) from (select * from test.d0)')
|
|
tdSql.query(f'select count(1), cols(last(c0),c0) from (select *, tbname from test.meters) group by tbname')
|
|
|
|
tdLog.info("subquery_test: orderby_test from meters")
|
|
self.orderby_test("test.meters", False)
|
|
tdLog.info("subquery_test: orderby_test from (select *, tbname from meters)")
|
|
self.orderby_test("(select *, tbname from test.meters)", True)
|
|
tdLog.info("subquery_test: one_cols_multi_output_with_group_test from meters")
|
|
self.one_cols_multi_output_with_group_test("test.meters", False)
|
|
tdLog.info("subquery_test: one_cols_multi_output_with_group_test from (select *, tbname from meters)")
|
|
self.one_cols_multi_output_with_group_test("(select *, tbname from test.meters)", True)
|
|
|
|
self.one_cols_multi_output_test("test.meters")
|
|
self.one_cols_multi_output_test("(select *, tbname from test.meters)")
|
|
|
|
|
|
def window_test(self):
|
|
tdSql.query(f'select tbname, _wstart,_wend, max(c0), max(c1), cols( max(c0), c1) from test.meters partition \
|
|
by tbname count_window(2) order by tbname')
|
|
tdSql.checkRows(4)
|
|
tdSql.checkCols(6)
|
|
tdSql.checkData(0, 0, 'd0')
|
|
tdSql.checkData(3, 0, 'd1')
|
|
tdSql.checkData(3, 5, 1)
|
|
tdSql.query(f'select _wstart,_wend, max(c0), max(c1), cols( max(c0), c1) from test.d1 count_window(2);')
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(5)
|
|
tdSql.checkData(0, 4, 1)
|
|
tdSql.query(f'select _wstart,_wend, max(c0), max(c1), cols( max(c0), c1) from test.normal_table count_window(2);')
|
|
tdSql.checkRows(3)
|
|
tdSql.checkCols(5)
|
|
tdSql.checkData(0, 4, 2)
|
|
|
|
|
|
def join_test(self):
|
|
tdSql.query(f'select cols(last(a.ts), a.c0) from test.d0 a join test.d1 b on a.ts = b.ts;')
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(1)
|
|
tdSql.checkData(0, 0, 1)
|
|
tdSql.query(f'select cols(last(a.ts), a.c0) from test.d0 a join test.d1 b on a.ts = b.ts and a.c0 = b.c0;')
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(1)
|
|
tdSql.checkData(0, 0, 1)
|
|
tdSql.query(f'select cols(last(a.ts), a.c0) from test.d0 a join test.d1 b on a.ts = b.ts and a.c0 > b.c0;')
|
|
tdSql.checkRows(0)
|
|
tdSql.query(f'select tbname, ts, c0 from (select cols(last(a.ts), a.tbname, a.ts, a.c0) from test.d0 a join test.d1 b on a.ts = b.ts and a.c0=b.c0)')
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(3)
|
|
tdSql.checkData(0, 0, 'd0')
|
|
tdSql.checkData(0, 1, 1734574929000)
|
|
tdSql.checkData(0, 2, 1)
|
|
tdSql.query(f'select tbname, ts, c0 from (select cols(first(a.ts), a.tbname, a.ts, a.c0) from test.d0 a join test.d1 b on a.ts = b.ts and a.c0=b.c0)')
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(3)
|
|
tdSql.checkData(0, 0, 'd0')
|
|
tdSql.checkData(0, 1, 1734574929000)
|
|
tdSql.checkData(0, 2, 1)
|
|
tdSql.error(f'select tbname, ts, c0 from (select cols(first(a.ts), a.tbname, a.ts, a.c0), cols(last(a.ts), b.tbname, b.ts, b.c0) from test.d0 a join test.d1 b on a.ts = b.ts and a.c0=b.c0)')
|
|
tdSql.query(f'select tbname, ts, c0 from (select cols(first(a.ts), a.tbname, a.ts, a.c0), cols(last(a.ts), b.tbname tbname1, b.ts ts2, b.c0 c02) from test.d0 a join test.d1 b on a.ts = b.ts and a.c0=b.c0)')
|
|
tdSql.checkRows(1)
|
|
tdSql.checkCols(3)
|
|
tdSql.checkData(0, 0, 'd0')
|
|
tdSql.checkData(0, 1, 1734574929000)
|
|
tdSql.checkData(0, 2, 1)
|
|
|
|
def stream_cols_test(self):
|
|
tdSql.error(f'CREATE STREAM last_col_s1 INTO last_col1 AS SELECT cols(last(ts), ts, c0) FROM meters PARTITION BY tbname INTERVAL(1s) SLIDING(1s);', TSDB_CODE_PAR_INVALID_COLS_FUNCTION)
|
|
tdSql.query(f'CREATE STREAM last_col_s INTO last_col AS SELECT last(ts), c0 FROM meters PARTITION BY tbname INTERVAL(1s) SLIDING(1s);')
|
|
|
|
def run(self):
|
|
self.funcNestTest()
|
|
self.funcSupperTableTest()
|
|
self.create_test_data()
|
|
self.parse_test()
|
|
self.one_cols_1output_test()
|
|
self.multi_cols_output_test()
|
|
self.subquery_test()
|
|
self.window_test()
|
|
self.join_test()
|
|
self.stream_cols_test()
|
|
|
|
def stop(self):
|
|
tdSql.close()
|
|
tdLog.success("%s successfully executed" % __file__)
|
|
|
|
|
|
tdCases.addWindows(__file__, TDTestCase())
|
|
tdCases.addLinux(__file__, TDTestCase())
|