TDengine/tests/system-test/2-query/cols_function.py

1421 lines
71 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)
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)
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.query(f'select * 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(5)
tdSql.checkData(0, 1, 3)
tdSql.checkData(0, 3, 1)
tdSql.checkData(0, 4, 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)')
tdSql.query(f'select c11, _rowts 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.query(f'select c11, c21, _rowts 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(3)
tdSql.checkData(0, 0, 3)
tdSql.checkData(0, 1, 1)
tdSql.query(f'select c1, c21, _rowts 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(3)
tdSql.checkData(0, 0, 3)
tdSql.checkData(0, 1, 1)
tdSql.query(f'select *, _rowts 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(6)
tdSql.checkData(0, 1, 3)
tdSql.checkData(0, 3, 1)
tdSql.checkData(0, 4, 1)
tdSql.error(f'select c1, _rowts 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', col_name='c0', 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({col_name}),c2) {t1} from {from_table} group by tbname order by cols(last({col_name}), c2)')
tdSql.error(f'select count(1), cols(last({col_name}),c2) {t1} from {from_table} group by tbname order by cols(last({col_name}), c2) desc')
tdSql.error(f'select count(1), cols(last({col_name}),c2) {t1} from {from_table} group by tbname order by cols(last({col_name}), {col_name})')
tdSql.error(f'select count(1), cols(last({col_name}),c2) {t1} from {from_table} group by tbname order by cols(last({col_name}), {col_name}), cols(last({col_name}), c1)')
tdSql.error(f'select count(1), last(c2) {t1} from {from_table} group by tbname order by cols(last({col_name}), c2)')
tdSql.error(f'select count(1), last(c2) {t1} from {from_table} group by tbname order by cols(last({col_name}), c2) desc')
tdSql.error(f'select count(1), last(c2) {t1} from {from_table} group by tbname order by cols(last({col_name}), {col_name})')
tdSql.error(f'select count(1), last(c2) {t1} from {from_table} group by tbname order by cols(last({col_name}), {col_name}), cols(last({col_name}), c1)')
tdSql.error(f'select count(1), max(c2) {t1} from {from_table} group by tbname order by cols(last({col_name}), c2)')
tdSql.error(f'select count(1), max(c2) {t1} from {from_table} group by tbname order by cols(last({col_name}), c2) desc')
tdSql.error(f'select count(1), max(c2) {t1} from {from_table} group by tbname order by cols(last({col_name}), {col_name})')
tdSql.error(f'select count(1), max(c2) {t1} from {from_table} group by tbname order by cols(last({col_name}), {col_name}), cols(last({col_name}), c1)')
continue
tdSql.query(f'select count(1), cols(last({col_name}),c2) {t1} from {from_table} group by tbname order by cols(last({col_name}), 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.error(f'select count(1), cols(last({col_name}),*) {t1} from {from_table} group by tbname order by cols(last({col_name}), *)')
#tdSql.query(f'select count(1), cols(last({col_name}),c2) {t1} from {from_table} group by tbname order by cols(last({col_name}), *)')
tdSql.query(f'select count(1), cols(last({col_name}),c2) {t1} from {from_table} group by tbname order by cols(last({col_name}), 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({col_name}),c2) {t1} from {from_table} group by tbname order by cols(last({col_name}), {col_name})')
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({col_name}),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({col_name}),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({col_name}),c2) {t1} from {from_table} group by tbname order by cols(last({col_name}), {col_name}), cols(last({col_name}), 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({col_name}), 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({col_name}), 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({col_name}), {col_name})')
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({col_name}), {col_name}), cols(last({col_name}), 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({col_name}), 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({col_name}), 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({col_name}), {col_name})')
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({col_name}), {col_name}), cols(last({col_name}), 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')
tdSql.query(f'select _rowts, max(c2) {t1} from {from_table} group by tbname order by cols(last({col_name}), {col_name}), cols(last({col_name}), c1)')
tdSql.checkRows(2)
tdSql.checkCols(2 + tags_count)
tdSql.checkData(0, 1, 'c2')
self.condition_check(t1 != "", 0, 2, 'st2')
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(top(c0, 5), c1) from {self.dbname}.meters')
tdSql.error(f'select cols(tail(c0, 5),c1) from {self.dbname}.meters')
tdSql.error(f'select cols(BOTTOM(c0, 5),c1) from {self.dbname}.meters')
tdSql.error(f'select cols(tail(ts, 5),c1) from {self.dbname}.meters')
tdSql.error(f'select cols(UNIQUE(ts),c1) from {self.dbname}.meters')
tdSql.error(f'select cols(sample(ts, 5),c1) from {self.dbname}.meters')
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", "c0", False)
tdLog.info("subquery_test: orderby_test from (select *, tbname from meters)")
self.orderby_test("(select *, tbname from test.meters)", "c0", 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)
tdSql.query(f'select c0, cols(first(ts), c0, c1) from test.meters state_window(c0) order by c0')
tdSql.checkRows(4)
tdSql.checkCols(3)
tdSql.checkData(0, 0, 1)
tdSql.checkData(0, 1, 1)
tdSql.checkData(0, 2, 1)
tdSql.checkData(1, 0, 2)
tdSql.checkData(1, 1, 2)
tdSql.checkData(1, 2, 2)
tdSql.checkData(2, 0, 3)
tdSql.query(f'select c0, cols(first(ts), c0, c1), tbname from test.meters state_window(c0)')
tdSql.checkRows(4)
tdSql.checkCols(4)
tdSql.checkData(0, 0, 1)
tdSql.checkData(0, 1, 1)
tdSql.checkData(0, 2, 1)
tdSql.checkData(0, 3, 'd0')
tdSql.checkData(1, 0, 2)
tdSql.checkData(1, 1, 2)
tdSql.checkData(1, 2, 2)
tdSql.checkData(2, 0, 3)
tdSql.query(f'select c0, cols(first(ts), c0, c1), t1 from test.meters state_window(c0)')
tdSql.checkRows(4)
tdSql.checkCols(4)
tdSql.checkData(0, 0, 1)
tdSql.checkData(0, 1, 1)
tdSql.checkData(0, 2, 1)
tdSql.checkData(0, 3, 'st1')
tdSql.checkData(1, 0, 2)
tdSql.checkData(1, 1, 2)
tdSql.checkData(1, 2, 2)
tdSql.checkData(2, 0, 3)
tdSql.error(f'select tbname, c0, cols(first(ts), c0, c1), cols(last(ts), c0) from test.meters state_window(c0)')
def window_test2(self):
tdSql.query(f'select cols(first(ts), c0, c1), count(1) from test.meters session(ts, 3)')
tdSql.checkRows(2)
tdSql.checkCols(3)
tdSql.checkData(0, 0, 1)
tdSql.checkData(0, 1, 1)
tdSql.checkData(0, 2, 6)
tdSql.checkData(1, 0, 0)
tdSql.checkData(1, 1, None)
tdSql.checkData(1, 2, 5)
tdSql.query(f'select cols(max(c0), c1), count(1) from test.meters session(ts, 3)')
tdSql.checkRows(2)
tdSql.checkCols(2)
tdSql.checkData(0, 0, 4)
tdSql.checkData(0, 1, 6)
tdSql.checkData(1, 0, None)
tdSql.checkData(1, 1, 5)
tdSql.query(f'select cols(first(ts), c0, c1), first(ts), count(1) from test.meters session(ts, 3)')
tdSql.checkRows(2)
tdSql.checkCols(4)
tdSql.query(f'select cols(first(ts), c0, c1), first(ts), count(1) from test.meters event_window start with c3=true end with c3!=true')
tdSql.checkRows(2)
tdSql.checkCols(4)
tdSql.checkData(0, 0, 1)
tdSql.checkData(0, 1, 1)
tdSql.checkData(0, 2, 1734574929000)
tdSql.checkData(0, 3, 3)
tdSql.checkData(1, 0, 3)
tdSql.checkData(1, 1, 3)
tdSql.checkData(1, 2, 1734574929003)
tdSql.checkData(1, 3, 2)
tdSql.query(f'select first(ts), count(1) from test.meters event_window start with c3=true end with c3!=true')
tdSql.checkRows(2)
tdSql.checkCols(2)
tdSql.checkData(0, 0, 1734574929000)
tdSql.checkData(0, 1, 3)
tdSql.checkData(1, 0, 1734574929003)
tdSql.checkData(1, 1, 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.execute(f'CREATE STREAM last_col_s1 INTO {self.dbname}.last_col1 AS SELECT cols(last(ts), ts, c0) FROM {self.dbname}.meters PARTITION BY tbname INTERVAL(1s) SLIDING(1s);')
tdSql.execute(f'CREATE STREAM last_col_s2 INTO {self.dbname}.last_col2 AS SELECT last(ts), c0 FROM {self.dbname}.meters PARTITION BY tbname INTERVAL(1s) SLIDING(1s);')
tdSql.waitedQuery(f'show streams', 2, 10)
sleep(5)
tdSql.execute(f'insert into {self.dbname}.d0 values(1734574930000, 0, 1, NULL, NULL)')
tdSql.execute(f'insert into {self.dbname}.d0 values(1734574931000, 1, 1, NULL, NULL)')
tdSql.execute(f'insert into {self.dbname}.d0 values(1734574932000, 2, 2, NULL, NULL)')
tdSql.execute(f'insert into {self.dbname}.d0 values(1734574933000, 3, 3, NULL, NULL)')
tdSql.waitedQuery(f'select * from {self.dbname}.last_col2', 3, 10)
tdSql.waitedQuery(f'select * from {self.dbname}.last_col1', 3, 10)
tdSql.query(f'select * from {self.dbname}.last_col1')
tdSql.checkRows(3)
tdSql.checkData(0, 0, 1734574930000)
tdSql.checkData(0, 1, 1734574930000)
tdSql.checkData(0, 2, 0)
tdSql.checkData(1, 0, 1734574931000)
tdSql.checkData(1, 1, 1734574931000)
tdSql.checkData(1, 2, 1)
tdSql.checkData(2, 0, 1734574932000)
tdSql.checkData(2, 1, 1734574932000)
tdSql.checkData(2, 2, 2)
def stream_cols_test2(self):
db2 = "test2"
tdSql.execute(f'create database {db2}')
tdSql.execute(f'create table {db2}.st (ts timestamp, c0 int) tags (t1 int)')
tdSql.execute(f'create table {db2}.st_1 using {db2}.st tags(1)')
tdSql.execute(f'create table {db2}.st_2 using {db2}.st tags(2)')
tdSql.execute(f'CREATE STREAM col1 INTO {db2}.colt1 AS SELECT cols(min(c0), ts min_ts, c0 min_c0), cols(max(c0), ts max_ts, c0 max_c0) FROM {db2}.st PARTITION BY tbname INTERVAL(1s) SLIDING(1s);')
tdSql.execute(f'CREATE STREAM col2 INTO {db2}.colt2 AS SELECT min(c0), max(c0) FROM {db2}.st PARTITION BY tbname INTERVAL(1s) SLIDING(1s);')
tdSql.waitedQuery(f'show streams', 4, 10)
time.sleep(5)
tdSql.execute(f'insert into {db2}.st_1 values(1734574930000, 0), (1734574930100, 1), (1734574930200, 2), (1734574930300, 3)')
tdSql.execute(f'insert into {db2}.st_1 values(1734574931000, 1), (1734574931100, 2), (1734574931200, 3), (1734574931300, 4)')
tdSql.execute(f'insert into {db2}.st_1 values(1734574932000, 2), (1734574932100, 3), (1734574932200, 4), (1734574932300, 5)')
tdSql.execute(f'insert into {db2}.st_1 values(1734574933000, 3), (1734574933100, 4), (1734574933200, 5), (1734574933300, 6)')
tdSql.waitedQuery(f'select * from {db2}.colt2', 3, 10)
tdSql.query(f'select * from {db2}.colt2')
tdSql.checkRows(3)
tdSql.checkData(0, 1, 0)
tdSql.checkData(0, 2, 3)
tdSql.checkData(1, 1, 1)
tdSql.checkData(1, 2, 4)
tdSql.checkData(2, 1, 2)
tdSql.checkData(2, 2, 5)
tdSql.query(f"select * from {db2}.colt1")
tdSql.checkRows(3)
tdSql.checkData(0, 1, 1734574930000)
tdSql.checkData(0, 2, 0)
tdSql.checkData(0, 3, 1734574930300)
tdSql.checkData(0, 4, 3)
tdSql.checkData(1, 1, 1734574931000)
tdSql.checkData(1, 2, 1)
tdSql.checkData(1, 3, 1734574931300)
tdSql.checkData(1, 4, 4)
tdSql.checkData(2, 1, 1734574932000)
tdSql.checkData(2, 2, 2)
tdSql.checkData(2, 3, 1734574932300)
tdSql.checkData(2, 4, 5)
def include_null_test(self):
tdSql.execute(f'insert into {self.dbname}.d0 values(1734574929010, 0, NULL, NULL, NULL)')
tdSql.execute(f'insert into {self.dbname}.d0 values(1734574929011, NULL, 1, NULL, NULL)')
tdSql.execute(f'insert into {self.dbname}.d0 values(1734574929012, NULL, NULL, 2, NULL)')
tdSql.execute(f'insert into {self.dbname}.d0 values(1734574929013, NULL, NULL, NULL, false)')
tdSql.execute(f'insert into {self.dbname}.d0 values(1734574929014, NULL, NULL, NULL, NULL)')
tdSql.query(f'select cols(last(c0), ts), cols(last(c1), ts), cols(last(c2), ts), cols(last(c3), ts) from {self.dbname}.d0')
tdSql.checkRows(1)
tdSql.checkCols(4)
tdSql.checkData(0, 0, 1734574929010)
tdSql.checkData(0, 1, 1734574929011)
tdSql.checkData(0, 2, 1734574929012)
tdSql.checkData(0, 3, 1734574929013)
def long_column_name_test(self):
tdSql.execute(f'use {self.dbname}')
tdSql.execute(f'create table {self.dbname}.long_col_test (ts timestamp, longcolumntestlongcolumntestlongcolumntestlongcolumntest88888888 int, c1 float, c2 nchar(30), c3 bool) tags (t1 nchar(30))')
tdSql.execute(f'create table {self.dbname}.dl0 using {self.dbname}.long_col_test tags("st1")')
tdSql.execute(f'create table {self.dbname}.dl1 using {self.dbname}.long_col_test tags("st2")')
tdSql.execute(f'insert into {self.dbname}.dl0 values(1734574929000, 1, 1, "c2", true)')
tdSql.execute(f'insert into {self.dbname}.dl0 values(1734574929001, 2, 2, "bbbbbbbbb1", false)')
tdSql.execute(f'insert into {self.dbname}.dl0 values(1734574929002, 2, 2, "bbbbbbbbb1", false)')
tdSql.execute(f'insert into {self.dbname}.dl0 values(1734574929003, 3, 3, "a2", true)')
tdSql.execute(f'insert into {self.dbname}.dl0 values(1734574929004, 4, 4, "bbbbbbbbb2", false)')
tdSql.execute(f'insert into {self.dbname}.dl1 values(1734574929000, 1, 1, "c2", true)')
tdSql.query(f'select cols(last(longcolumntestlongcolumntestlongcolumntestlongcolumntest88888888),ts lts, c1 lc1), cols(first(longcolumntestlongcolumntestlongcolumntestlongcolumntest88888888), ts fts, c1 as fc1), count(1) from test.long_col_test')
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)
tdLog.info("long_column_name_test subquery_test: orderby_test from meters")
self.orderby_test("test.long_col_test", "longcolumntestlongcolumntestlongcolumntestlongcolumntest88888888", False)
tdLog.info("long_column_name_test subquery_test: orderby_test from (select *, tbname from meters)")
self.orderby_test("(select *, tbname from test.long_col_test)", "longcolumntestlongcolumntestlongcolumntestlongcolumntest88888888", True)
tdLog.info("long_column_name_test subquery_test: one_cols_multi_output_with_group_test from meters")
def test_in_interval(self):
dbname = "db1"
tdSql.execute(f"drop database if exists {dbname} ")
tdSql.execute(f"create database {dbname} vgroups 6")
tdSql.execute(f"use {dbname}")
tdSql.execute(f" create stable {dbname}.sta (ts timestamp, f1 int, f2 binary(10), f3 bool) tags(t1 int, t2 bool, t3 binary(10));")
tdSql.execute(f" create table {dbname}.tba1 using sta tags(0, false, '0');")
tdSql.execute(f" create table {dbname}.tba2 using sta tags(1, true, '1');")
tdSql.execute(f" create table {dbname}.tba3 using sta tags(null, null, '');")
tdSql.execute(f" create table {dbname}.tba4 using sta tags(1, false, null);")
tdSql.execute(f" create table {dbname}.tba5 using sta tags(3, true, 'aa');")
tdSql.execute(f"insert into {dbname}.tba1 values ('2022-09-26 15:15:01', 0, 'a', false);")
tdSql.execute(f"insert into {dbname}.tba1 values ('2022-09-26 15:15:02', 1, '0', true);")
tdSql.execute(f"insert into {dbname}.tba1 values ('2022-09-26 15:15:03', 5, '5', false);")
tdSql.execute(f"insert into {dbname}.tba1 values ('2022-09-26 15:15:04', null, null, null);")
tdSql.execute(f"insert into {dbname}.tba2 values ('2022-09-27 15:15:01', 0, 'a', false);")
tdSql.execute(f"insert into {dbname}.tba2 values ('2022-09-27 15:15:02', 1, '0', true);")
tdSql.execute(f"insert into {dbname}.tba2 values ('2022-09-27 15:15:03', 5, '5', false);")
tdSql.execute(f"insert into {dbname}.tba2 values ('2022-09-27 15:15:04', null, null, null);")
tdSql.execute(f"insert into {dbname}.tba3 values ('2022-09-28 15:15:01', 0, 'a', false);")
tdSql.execute(f"insert into {dbname}.tba3 values ('2022-09-28 15:15:02', 1, '0', true);")
tdSql.execute(f"insert into {dbname}.tba3 values ('2022-09-28 15:15:03', 5, '5', false);")
tdSql.execute(f"insert into {dbname}.tba3 values ('2022-09-28 15:15:04', null, null, null);")
tdSql.execute(f"insert into {dbname}.tba4 values ('2022-09-29 15:15:01', 0, 'a', false);")
tdSql.execute(f"insert into {dbname}.tba4 values ('2022-09-29 15:15:02', 1, '0', true);")
tdSql.execute(f"insert into {dbname}.tba4 values ('2022-09-29 15:15:03', 5, '5', false);")
tdSql.execute(f"insert into {dbname}.tba4 values ('2022-09-29 15:15:04', null, null, null);")
tdSql.execute(f"insert into {dbname}.tba5 values ('2022-09-30 15:15:01', 0, 'a', false);")
tdSql.execute(f"insert into {dbname}.tba5 values ('2022-09-30 15:15:02', 1, '0', true);")
tdSql.execute(f"insert into {dbname}.tba5 values ('2022-09-30 15:15:03', 5, '5', false);")
tdSql.execute(f"insert into {dbname}.tba5 values ('2022-09-30 15:15:04', null, null, null);")
tdSql.query(f'select tbname, cols(last(ts), ts as ts1), cols(last(f1), ts as ts2) from tba5 interval(1s);')
tdSql.checkRows(4)
tdSql.checkCols(3)
tdSql.checkData(0, 1, "2022-09-30 15:15:01")
tdSql.checkData(0, 2, "2022-09-30 15:15:01")
tdSql.checkData(1, 1, "2022-09-30 15:15:02")
tdSql.checkData(1, 2, "2022-09-30 15:15:02")
tdSql.checkData(2, 1, "2022-09-30 15:15:03")
tdSql.checkData(2, 2, "2022-09-30 15:15:03")
tdSql.checkData(3, 1, "2022-09-30 15:15:04")
tdSql.checkData(3, 2, None)
tdSql.query(f'select tbname, last(f1), ts from tba5 interval(1s)')
tdSql.checkRows(3)
tdSql.checkCols(3)
tdSql.checkData(0, 1, 0)
tdSql.checkData(0, 2, "2022-09-30 15:15:01")
tdSql.checkData(1, 1, 1)
tdSql.checkData(1, 2, "2022-09-30 15:15:02")
tdSql.checkData(2, 1, 5)
tdSql.checkData(2, 2, "2022-09-30 15:15:03")
tdSql.query(f'select tbname, last(ts) from tba5 interval(1s)')
tdSql.checkData(0, 1, "2022-09-30 15:15:01")
tdSql.checkData(1, 1, "2022-09-30 15:15:02")
tdSql.checkData(2, 1, "2022-09-30 15:15:03")
tdSql.checkData(3, 1, "2022-09-30 15:15:04")
tdSql.query(f'select tbname, cols(last(ts), ts as ts1), cols(last(f1), ts as ts2) from {dbname}.sta group by tbname;')
tdSql.checkRows(5)
tdSql.checkCols(3)
tdSql.query(f'select tbname, cols(last(ts), ts as ts1), cols(last(f1), ts as ts2) from {dbname}.sta group by tbname order by ts1;')
tdSql.checkRows(5)
tdSql.checkCols(3)
tdSql.checkData(0, 1, "2022-09-26 15:15:04")
tdSql.checkData(0, 2, "2022-09-26 15:15:03")
tdSql.checkData(1, 1, "2022-09-27 15:15:04")
tdSql.checkData(1, 2, "2022-09-27 15:15:03")
tdSql.checkData(2, 1, "2022-09-28 15:15:04")
tdSql.checkData(2, 2, "2022-09-28 15:15:03")
tdSql.checkData(3, 1, "2022-09-29 15:15:04")
tdSql.checkData(3, 2, "2022-09-29 15:15:03")
tdSql.checkData(4, 1, "2022-09-30 15:15:04")
tdSql.checkData(4, 2, "2022-09-30 15:15:03")
tdSql.query(f'select t1, cols(last(ts), ts as ts1), cols(last(f1), ts as ts2) from {dbname}.sta group by t1;')
tdSql.checkRows(4)
tdSql.checkCols(3)
tdSql.query(f'select t1, cols(last(ts), ts as ts1), cols(last(f1), ts as ts2) from {dbname}.sta group by t1 order by ts1;')
tdSql.checkRows(4)
tdSql.checkCols(3)
tdSql.checkData(0, 1, "2022-09-26 15:15:04")
tdSql.checkData(0, 2, "2022-09-26 15:15:03")
tdSql.checkData(1, 1, "2022-09-28 15:15:04")
tdSql.checkData(1, 2, "2022-09-28 15:15:03")
tdSql.checkData(2, 1, "2022-09-29 15:15:04")
tdSql.checkData(2, 2, "2022-09-29 15:15:03")
tdSql.checkData(3, 1, "2022-09-30 15:15:04")
tdSql.checkData(3, 2, "2022-09-30 15:15:03")
def having_test(self, table_name, is_subquery):
tdLog.info("having_test")
t1 = f"from {table_name} "
tdSql.query(f'select tbname, cols(last(ts), ts) {t1} group by tbname having cols(last(ts), ts) > 1734574929000')
tdSql.checkRows(1)
tdSql.checkCols(2)
tdSql.checkData(0, 0, 'd0')
tdSql.checkData(0, 1, 1734574929014)
tdSql.query(f'select tbname, cols(last(ts), ts) {t1} group by tbname having cols(last(ts), ts) = 1734574929000')
tdSql.checkRows(1)
tdSql.checkCols(2)
tdSql.checkData(0, 0, 'd1')
tdSql.checkData(0, 1, 1734574929000)
tdSql.query(f'select tbname, cols(last(ts), ts) {t1} group by tbname having cols(last(ts), ts) < 1734574929000')
tdSql.checkRows(0)
tdSql.query(f'select tbname, cols(last(ts), ts) {t1} group by tbname having cols(last(ts), ts) != 1734574929000')
tdSql.checkRows(1)
tdSql.checkCols(2)
tdSql.checkData(0, 0, 'd0')
tdSql.checkData(0, 1, 1734574929014)
tdSql.query(f'select tbname, cols(last(ts), ts) {t1} group by tbname having cols(last(ts), ts) >= 1734574929000')
tdSql.checkRows(2)
tdSql.checkCols(2)
tdSql.checkData(0, 0, 'd1')
tdSql.checkData(0, 1, 1734574929000)
tdSql.checkData(1, 0, 'd0')
tdSql.checkData(1, 1, 1734574929014)
tdSql.query(f'select tbname, cols(last(ts), ts) {t1} group by tbname having cols(last(ts), ts) <= 1734574929000')
tdSql.checkRows(1)
tdSql.checkCols(2)
tdSql.checkData(0, 0, 'd1')
tdSql.checkData(0, 1, 1734574929000)
tdSql.query(f'select tbname, cols(last(ts), ts) {t1} group by tbname having cols(last(c0), ts) between 1734574929000 and 1734574929014')
tdSql.checkRows(2)
tdSql.checkCols(2)
tdSql.checkData(0, 0, 'd1')
tdSql.checkData(0, 1, 1734574929000)
tdSql.checkData(1, 0, 'd0')
tdSql.checkData(1, 1, 1734574929014)
def star_test(self):
tdLog.info("star_test")
tdSql.query(f'select tbname, cols(last(ts), *) from test.meters group by tbname having cols(last(ts), ts) > 1734574929000')
tdSql.checkRows(1)
tdSql.checkCols(7)
tdSql.checkData(0, 0, 'd0')
tdSql.checkData(0, 1, 1734574929014)
tdSql.query(f'select tbname, cols(last(ts), *) from test.meters group by tbname having cols(last(ts), ts) = 1734574929000')
tdSql.checkRows(1)
tdSql.checkCols(7)
tdSql.checkData(0, 0, 'd1')
tdSql.checkData(0, 1, 1734574929000)
tdSql.checkData(0, 2, 1)
tdSql.checkData(0, 3, 1)
tdSql.checkData(0, 4, 'c2')
tdSql.checkData(0, 5, True)
tdSql.error(f'select tbname, cols(last(ts), *) from test.meters group by tbname having cols(last(ts), *) = 1734574929000')
def test_null2(self):
dbname = "test_null2"
tdSql.execute(f"drop database if exists {dbname}")
tdSql.execute(f"create database test_null2 vgroups 5")
tdSql.execute(f"use test_null2")
tdSql.execute(f"create stable {dbname}.stb_null1 (ts timestamp, c0 int, c1 int, c2 nchar(30), c3 bool) tags (t1 nchar(30))")
tdSql.execute(f"create table {dbname}.sub_null_1 using {dbname}.stb_null1 tags('st1')")
tdSql.execute(f"create table {dbname}.sub_null_2 using {dbname}.stb_null1 tags('st2')")
tdSql.execute(f"insert into {dbname}.sub_null_1 values(1734574929000, 1, null, null, null)")
tdSql.execute(f"insert into {dbname}.sub_null_1 values(1734574929001, 2, null, null, null)")
tdSql.execute(f"insert into {dbname}.sub_null_2 values(1734574929000, 21, null, null, null)")
tdSql.execute(f"insert into {dbname}.sub_null_2 values(1734574929001, 22, null, null, null)")
tdSql.query(f'select cols(last(ts), ts), cols(last(c2), ts) from {dbname}.stb_null1')
tdSql.checkRows(1)
tdSql.checkCols(2)
tdSql.checkData(0, 0, 1734574929001)
tdSql.checkData(0, 1, None)
tdSql.query(f'select tbname, cols(last(ts), c0), cols(last(c2), c0) from {dbname}.stb_null1 group by tbname order by tbname')
tdSql.checkRows(2)
tdSql.checkCols(3)
tdSql.checkData(0, 0, 'sub_null_1')
tdSql.checkData(0, 1, 2)
tdSql.checkData(0, 2, None)
tdSql.checkData(1, 0, 'sub_null_2')
tdSql.checkData(1, 1, 22)
tdSql.checkData(1, 2, None)
tdSql.query(f'select tbname, t1, cols(last(ts), c0), cols(last(c2), c0) from {dbname}.sub_null_1')
tdSql.checkRows(1)
tdSql.checkCols(4)
tdSql.checkData(0, 0, 'sub_null_1')
tdSql.checkData(0, 1, "st1")
tdSql.checkData(0, 2, 2)
tdSql.checkData(0, 3, None)
tdSql.query(f'select tbname, t1, cols(last(ts), c0), cols(last(c2), ts) from {dbname}.sub_null_2')
tdSql.checkRows(1)
tdSql.checkCols(4)
tdSql.checkData(0, 0, 'sub_null_2')
tdSql.checkData(0, 1, "st2")
tdSql.checkData(0, 2, 22)
tdSql.checkData(0, 3, None)
tdSql.query(f'select tbname, cols(last(ts), c0), cols(last(c2), c0) from {dbname}.sub_null_1')
tdSql.checkRows(1)
tdSql.checkCols(3)
tdSql.checkData(0, 0, 'sub_null_1')
tdSql.checkData(0, 1, 2)
tdSql.checkData(0, 2, None)
tdSql.error(f'select tbname, cols(last(ts), c0), cols(last(c2), c0) from {dbname}.stb_null1')
tdSql.error(f'select t1, cols(last(ts), c0), cols(last(c2), c0) from {dbname}.stb_null1')
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.test_in_interval()
self.include_null_test()
self.long_column_name_test()
self.having_test("test.meters", False)
self.having_test("(select tbname, * from test.meters)", True)
self.star_test()
self.test_null2()
self.window_test2()
self.stream_cols_test()
self.stream_cols_test2()
def stop(self):
tdSql.close()
tdLog.success("%s successfully executed" % __file__)
tdCases.addWindows(__file__, TDTestCase())
tdCases.addLinux(__file__, TDTestCase())