last_row.py 40.3 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
import taos
import sys
import datetime
import inspect

from util.log import *
from util.sql import *
from util.cases import *
import random


class TDTestCase:

    def init(self, conn, logSql):
        tdLog.debug(f"start to excute {__file__}")
C
cpwu 已提交
16
        tdSql.init(conn.cursor(), False)
17 18 19 20 21
        self.tb_nums = 10
        self.row_nums = 20
        self.ts = 1434938400000
        self.time_step = 1000

C
cpwu 已提交
22 23 24
    def insert_datas_and_check_abs(self, tbnums, rownums, time_step, cache_value, dbname="test"):
        tdSql.execute(f"drop database if exists {dbname} ")
        tdLog.info("prepare datas for auto check abs function ")
25

C
cpwu 已提交
26 27 28
        tdSql.execute(f"create database {dbname} cachemodel {cache_value} ")
        tdSql.execute(f"use {dbname} ")
        tdSql.execute(f"create stable {dbname}.stb (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint,\
29 30
             c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp) tags (t1 int)")
        for tbnum in range(tbnums):
C
cpwu 已提交
31 32
            tbname = f"{dbname}.sub_tb_{tbnum}"
            tdSql.execute(f"create table {tbname} using {dbname}.stb tags({tbnum}) ")
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47

            ts = self.ts
            for row in range(rownums):
                ts = self.ts + time_step*row
                c1 = random.randint(0,10000)
                c2 = random.randint(0,100000)
                c3 = random.randint(0,125)
                c4 = random.randint(0,125)
                c5 = random.random()/1.0
                c6 = random.random()/1.0
                c7 = "'true'"
                c8 = "'binary_val'"
                c9 = "'nchar_val'"
                c10 = ts
                tdSql.execute(f" insert into  {tbname} values ({ts},{c1},{c2},{c3},{c4},{c5},{c6},{c7},{c8},{c9},{c10})")
G
Ganlin Zhao 已提交
48

49 50 51
        tbnames = ["stb", "sub_tb_1"]
        support_types = ["BIGINT", "SMALLINT", "TINYINT", "FLOAT", "DOUBLE", "INT"]
        for tbname in tbnames:
C
cpwu 已提交
52
            tdSql.query(f"desc {dbname}.{tbname}")
53 54 55
            coltypes = tdSql.queryResult
            for coltype in coltypes:
                colname = coltype[0]
C
cpwu 已提交
56 57
                abs_sql = f"select abs({colname}) from {dbname}.{tbname} order by tbname "
                origin_sql = f"select {colname} from {dbname}.{tbname} order by tbname"
58 59
                if coltype[1] in support_types:
                    self.check_result_auto(origin_sql , abs_sql)
G
Ganlin Zhao 已提交
60

C
cpwu 已提交
61 62 63
    def prepare_datas(self ,cache_value, dbname="db"):
        tdSql.execute(f"drop database if exists {dbname} ")
        create_db_sql = f"create database if not exists {dbname} keep 3650 duration 1000 cachemodel {cache_value}"
W
wenzhouwww@live.cn 已提交
64
        tdSql.execute(create_db_sql)
65

C
cpwu 已提交
66
        tdSql.execute(f"use {dbname}")
67
        tdSql.execute(
C
cpwu 已提交
68
            f'''create table {dbname}.stb1
69 70 71 72 73 74
            (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
            tags (t1 int)
            '''
        )

        tdSql.execute(
C
cpwu 已提交
75 76
            f'''
            create table {dbname}.t1
77 78 79 80
            (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
            '''
        )
        for i in range(4):
C
cpwu 已提交
81
            tdSql.execute(f'create table {dbname}.ct{i+1} using {dbname}.stb1 tags ( {i+1} )')
82 83 84

        for i in range(9):
            tdSql.execute(
C
cpwu 已提交
85
                f"insert into {dbname}.ct1 values ( now()-{i*10}s, {1*i}, {11111*i}, {111*i}, {11*i}, {1.11*i}, {11.11*i}, {i%2}, 'binary{i}', 'nchar{i}', now()+{1*i}a )"
86 87
            )
            tdSql.execute(
C
cpwu 已提交
88
                f"insert into {dbname}.ct4 values ( now()-{i*90}d, {1*i}, {11111*i}, {111*i}, {11*i}, {1.11*i}, {11.11*i}, {i%2}, 'binary{i}', 'nchar{i}', now()+{1*i}a )"
89 90
            )
        tdSql.execute(
C
cpwu 已提交
91
            f"insert into {dbname}.ct1 values (now()-45s, 0, 0, 0, 0, 0, 0, 0, 'binary0', 'nchar0', now()+8a )")
92
        tdSql.execute(
C
cpwu 已提交
93
            f"insert into {dbname}.ct1 values (now()+10s, 9, -99999, -999, -99, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a )")
94
        tdSql.execute(
C
cpwu 已提交
95
            f"insert into {dbname}.ct1 values (now()+15s, 9, -99999, -999, -99, -9.99, NULL, 1, 'binary9', 'nchar9', now()+9a )")
96
        tdSql.execute(
C
cpwu 已提交
97
            f"insert into {dbname}.ct1 values (now()+20s, 9, -99999, -999, NULL, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a )")
98 99

        tdSql.execute(
C
cpwu 已提交
100
            f"insert into {dbname}.ct4 values (now()-810d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) ")
101
        tdSql.execute(
C
cpwu 已提交
102
            f"insert into {dbname}.ct4 values (now()-400d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) ")
103
        tdSql.execute(
C
cpwu 已提交
104
            f"insert into {dbname}.ct4 values (now()+90d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL  ) ")
105 106

        tdSql.execute(
C
cpwu 已提交
107
            f'''insert into {dbname}.t1 values
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
            ( '2020-04-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
            ( '2020-10-21 01:01:01.000', 1, 11111, 111, 11, 1.11, 11.11, 1, "binary1", "nchar1", now()+1a )
            ( '2020-12-31 01:01:01.000', 2, 22222, 222, 22, 2.22, 22.22, 0, "binary2", "nchar2", now()+2a )
            ( '2021-01-01 01:01:06.000', 3, 33333, 333, 33, 3.33, 33.33, 0, "binary3", "nchar3", now()+3a )
            ( '2021-05-07 01:01:10.000', 4, 44444, 444, 44, 4.44, 44.44, 1, "binary4", "nchar4", now()+4a )
            ( '2021-07-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
            ( '2021-09-30 01:01:16.000', 5, 55555, 555, 55, 5.55, 55.55, 0, "binary5", "nchar5", now()+5a )
            ( '2022-02-01 01:01:20.000', 6, 66666, 666, 66, 6.66, 66.66, 1, "binary6", "nchar6", now()+6a )
            ( '2022-10-28 01:01:26.000', 7, 00000, 000, 00, 0.00, 00.00, 1, "binary7", "nchar7", "1970-01-01 08:00:00.000" )
            ( '2022-12-01 01:01:30.000', 8, -88888, -888, -88, -8.88, -88.88, 0, "binary8", "nchar8", "1969-01-01 01:00:00.000" )
            ( '2022-12-31 01:01:36.000', 9, -99999999999999999, -999, -99, -9.99, -999999999999999999999.99, 1, "binary9", "nchar9", "1900-01-01 00:00:00.000" )
            ( '2023-02-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
            '''
        )

C
cpwu 已提交
123
    def prepare_tag_datas(self,cache_value, dbname="testdb"):
W
wenzhouwww@live.cn 已提交
124

C
cpwu 已提交
125
        tdSql.execute(f"drop database if exists {dbname} ")
126
        # prepare datas
C
cpwu 已提交
127
        tdSql.execute(f"create database if not exists {dbname} keep 3650 duration 1000 cachemodel {cache_value}")
W
update  
wenzhouwww@live.cn 已提交
128

C
cpwu 已提交
129
        tdSql.execute(f"use {dbname} ")
130

C
cpwu 已提交
131
        tdSql.execute(f"create stable {dbname}.stb1 (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp , uc1 int unsigned,\
132 133 134 135
             uc2 bigint unsigned ,uc3 smallint unsigned , uc4 tinyint unsigned ) tags( t1 int , t2 bigint , t3 smallint , t4 tinyint , t5 float , t6 double , t7 bool , t8 binary(36)\
                 , t9 nchar(36) , t10 int unsigned , t11 bigint unsigned ,t12 smallint unsigned , t13 tinyint unsigned ,t14 timestamp  ) ")

        tdSql.execute(
C
cpwu 已提交
136 137
            f'''
            create table {dbname}.t1
138 139 140 141 142
            (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
            '''
        )
        for i in range(4):
            tdSql.execute(
C
cpwu 已提交
143
                f'create table {dbname}.ct{i+1} using {dbname}.stb1 tags ( {1*i}, {11111*i}, {111*i}, {1*i}, {1.11*i}, {11.11*i}, {i%2}, "binary{i}", "nchar{i}" ,{111*i}, {1*i},{1*i},{1*i},now())')
144 145 146

        for i in range(9):
            tdSql.execute(
C
cpwu 已提交
147
                f"insert into {dbname}.ct1 values ( now()-{i*10}s, {1*i}, {11111*i}, {111*i}, {11*i}, {1.11*i}, {11.11*i}, {i%2}, 'binary{i}', 'nchar{i}', now()+{1*i}a ,{111*i},{1111*i},{i},{i} )"
148 149
            )
            tdSql.execute(
C
cpwu 已提交
150
                f"insert into {dbname}.ct4 values ( now()-{i*90}d, {1*i}, {11111*i}, {111*i}, {11*i}, {1.11*i}, {11.11*i}, {i%2}, 'binary{i}', 'nchar{i}', now()+{1*i}a ,{111*i},{1111*i},{i},{i})"
151 152
            )
        tdSql.execute(
C
cpwu 已提交
153
            f"insert into {dbname}.ct1 values (now()-45s, 0, 0, 0, 0, 0, 0, 0, 'binary0', 'nchar0', now()+8a ,0,0,0,0)")
154
        tdSql.execute(
C
cpwu 已提交
155
            f"insert into {dbname}.ct1 values (now()+10s, 9, -99999, -999, -99, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a , 999 , 9999 , 9 , 9)")
156
        tdSql.execute(
C
cpwu 已提交
157
            f"insert into {dbname}.ct1 values (now()+15s, 9, -99999, -999, -99, -9.99, NULL, 1, 'binary9', 'nchar9', now()+9a , 999 , 99999 , 9 , 9)")
158
        tdSql.execute(
C
cpwu 已提交
159
            f"insert into {dbname}.ct1 values (now()+20s, 9, -99999, -999, NULL, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a ,999 , 99999 , 9 , 9)")
160 161

        tdSql.execute(
C
cpwu 已提交
162
            f"insert into {dbname}.ct4 values (now()-810d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL , NULL, NULL, NULL, NULL) ")
163
        tdSql.execute(
C
cpwu 已提交
164
            f"insert into {dbname}.ct4 values (now()-400d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL , NULL, NULL, NULL, NULL) ")
165
        tdSql.execute(
C
cpwu 已提交
166
            f"insert into {dbname}.ct4 values (now()+90d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL , NULL, NULL, NULL, NULL ) ")
167 168

        tdSql.execute(
C
cpwu 已提交
169
            f'''insert into {dbname}.t1 values
170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215
            ( '2020-04-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
            ( '2020-10-21 01:01:01.000', 1, 11111, 111, 11, 1.11, 11.11, 1, "binary1", "nchar1", now()+1a )
            ( '2020-12-31 01:01:01.000', 2, 22222, 222, 22, 2.22, 22.22, 0, "binary2", "nchar2", now()+2a )
            ( '2021-01-01 01:01:06.000', 3, 33333, 333, 33, 3.33, 33.33, 0, "binary3", "nchar3", now()+3a )
            ( '2021-05-07 01:01:10.000', 4, 44444, 444, 44, 4.44, 44.44, 1, "binary4", "nchar4", now()+4a )
            ( '2021-07-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
            ( '2021-09-30 01:01:16.000', 5, 55555, 555, 55, 5.55, 55.55, 0, "binary5", "nchar5", now()+5a )
            ( '2022-02-01 01:01:20.000', 6, 66666, 666, 66, 6.66, 66.66, 1, "binary6", "nchar6", now()+6a )
            ( '2022-10-28 01:01:26.000', 7, 00000, 000, 00, 0.00, 00.00, 1, "binary7", "nchar7", "1970-01-01 08:00:00.000" )
            ( '2022-12-01 01:01:30.000', 8, -88888, -888, -88, -8.88, -88.88, 0, "binary8", "nchar8", "1969-01-01 01:00:00.000" )
            ( '2022-12-31 01:01:36.000', 9, -99999999999999999, -999, -99, -9.99, -999999999999999999999.99, 1, "binary9", "nchar9", "1900-01-01 00:00:00.000" )
            ( '2023-02-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
            '''
        )

    def check_result_auto(self, origin_query, abs_query):
        abs_result = tdSql.getResult(abs_query)
        origin_result = tdSql.getResult(origin_query)

        auto_result = []

        for row in origin_result:
            row_check = []
            for elem in row:
                if elem == None:
                    elem = None
                elif elem >= 0:
                    elem = elem
                else:
                    elem = -elem
                row_check.append(elem)
            auto_result.append(row_check)

        check_status = True
        for row_index, row in enumerate(abs_result):
            for col_index, elem in enumerate(row):
                if auto_result[row_index][col_index] != elem:
                    check_status = False
        if not check_status:
            tdLog.notice(
                "abs function value has not as expected , sql is \"%s\" " % abs_query)
            sys.exit(1)
        else:
            tdLog.info(
                "abs value check pass , it work as expected ,sql is \"%s\"   " % abs_query)

C
cpwu 已提交
216
    def test_errors(self, dbname="testdb"):
G
Ganlin Zhao 已提交
217
        # bug need fix
C
cpwu 已提交
218
        tdSql.error(f"select last_row(c1 ,NULL) from {dbname}.t1")
219 220

        error_sql_lists = [
C
cpwu 已提交
221 222 223 224 225 226 227 228 229 230 231 232 233 234 235
            f"select last_row from {dbname}.t1",
            f"select last_row(-+--+c1) from {dbname}.t1",
            f"select last_row(123--123)==1 from {dbname}.t1",
            f"select last_row(c1) as 'd1' from {dbname}.t1",
            #f"select last_row(c1 ,NULL) from {dbname}.t1",
            f"select last_row(,) from {dbname}.t1;",
            f"select last_row(abs(c1) ab from {dbname}.t1)",
            f"select last_row(c1) as int from {dbname}.t1",
            f"select last_row from {dbname}.stb1",
            f"select last_row(123--123)==1 from {dbname}.stb1",
            f"select last_row(c1) as 'd1' from {dbname}.stb1",
            #f"select last_row(c1 ,NULL) from {dbname}.stb1",
            f"select last_row(,) from {dbname}.stb1;",
            f"select last_row(abs(c1) ab from {dbname}.stb1)",
            f"select last_row(c1) as int from {dbname}.stb1"
236 237 238 239
        ]
        for error_sql in error_sql_lists:
            tdSql.error(error_sql)

C
cpwu 已提交
240 241
    def support_types(self, dbname="testdb"):
        tdSql.execute(f"use {dbname}")
242
        tbnames = ["stb1", "t1", "ct1", "ct2"]
G
Ganlin Zhao 已提交
243

244
        for tbname in tbnames:
C
cpwu 已提交
245
            tdSql.query(f"desc {dbname}.{tbname}")
246 247 248 249 250
            coltypes = tdSql.queryResult
            for coltype in coltypes:
                colname = coltype[0]
                col_note = coltype[-1]
                if col_note != "TAG":
C
cpwu 已提交
251
                    abs_sql = f"select last_row({colname}) from {dbname}.{tbname}"
252
                    tdSql.query(abs_sql)
G
Ganlin Zhao 已提交
253

254

C
cpwu 已提交
255
    def basic_abs_function(self, dbname="testdb"):
256 257

        # basic query
C
cpwu 已提交
258
        tdSql.query(f"select c1 from {dbname}.ct3")
259
        tdSql.checkRows(0)
C
cpwu 已提交
260
        tdSql.query(f"select c1 from {dbname}.t1")
261
        tdSql.checkRows(12)
C
cpwu 已提交
262
        tdSql.query(f"select c1 from {dbname}.stb1")
263 264 265
        tdSql.checkRows(25)

        # used for empty table  , ct3 is empty
C
cpwu 已提交
266
        tdSql.query(f"select last_row(c1) from {dbname}.ct3")
267
        tdSql.checkRows(0)
C
cpwu 已提交
268
        tdSql.query(f"select last_row(c2) from {dbname}.ct3")
269
        tdSql.checkRows(0)
C
cpwu 已提交
270
        tdSql.query(f"select last_row(c3) from {dbname}.ct3")
271
        tdSql.checkRows(0)
C
cpwu 已提交
272
        tdSql.query(f"select last_row(c4) from {dbname}.ct3")
273
        tdSql.checkRows(0)
C
cpwu 已提交
274
        tdSql.query(f"select last_row(c5) from {dbname}.ct3")
275
        tdSql.checkRows(0)
C
cpwu 已提交
276
        tdSql.query(f"select last_row(c6) from {dbname}.ct3")
277 278 279

        # used for regular table

G
Ganlin Zhao 已提交
280
        # bug need fix
C
cpwu 已提交
281
        tdSql.query(f"select last_row(c1) from {dbname}.t1")
282
        tdSql.checkData(0, 0, None)
C
cpwu 已提交
283
        tdSql.query(f"select last_row(c1) from {dbname}.ct4")
284
        tdSql.checkData(0, 0, None)
C
cpwu 已提交
285
        tdSql.query(f"select last_row(c1) from {dbname}.stb1")
286
        tdSql.checkData(0, 0, None)
C
cpwu 已提交
287 288 289 290 291 292 293 294

        # support regular query about last ,first ,last_row
        tdSql.error(f"select last_row(c1,NULL) from {dbname}.t1")
        tdSql.error(f"select last_row(NULL) from {dbname}.t1")
        tdSql.error(f"select last(NULL) from {dbname}.t1")
        tdSql.error(f"select first(NULL) from {dbname}.t1")

        tdSql.query(f"select last_row(c1,123) from {dbname}.t1")
295 296 297
        tdSql.checkData(0,0,None)
        tdSql.checkData(0,1,123)

C
cpwu 已提交
298
        tdSql.query(f"select last_row(123) from {dbname}.t1")
299 300
        tdSql.checkData(0,0,123)

C
cpwu 已提交
301
        tdSql.error(f"select last(c1,NULL) from {dbname}.t1")
302

C
cpwu 已提交
303
        tdSql.query(f"select last(c1,123) from {dbname}.t1")
304 305 306
        tdSql.checkData(0,0,9)
        tdSql.checkData(0,1,123)

C
cpwu 已提交
307
        tdSql.error(f"select first(c1,NULL) from {dbname}.t1")
308

C
cpwu 已提交
309
        tdSql.query(f"select first(c1,123) from {dbname}.t1")
310 311 312
        tdSql.checkData(0,0,1)
        tdSql.checkData(0,1,123)

C
cpwu 已提交
313
        tdSql.error(f"select last_row(c1,c2,c3,NULL,c4) from {dbname}.t1")
314

C
cpwu 已提交
315
        tdSql.query(f"select last_row(c1,c2,c3,123,c4) from {dbname}.t1")
316 317 318 319 320
        tdSql.checkData(0,0,None)
        tdSql.checkData(0,1,None)
        tdSql.checkData(0,2,None)
        tdSql.checkData(0,3,123)
        tdSql.checkData(0,4,None)
321 322


C
cpwu 已提交
323 324 325
        tdSql.error(f"select last_row(c1,c2,c3,NULL,c4,t1,t2) from {dbname}.ct1")

        tdSql.query(f"select last_row(c1,c2,c3,123,c4,t1,t2) from {dbname}.ct1")
326 327 328 329 330 331 332
        tdSql.checkData(0,0,9)
        tdSql.checkData(0,1,-99999)
        tdSql.checkData(0,2,-999)
        tdSql.checkData(0,3,123)
        tdSql.checkData(0,4,None)
        tdSql.checkData(0,5,0)
        tdSql.checkData(0,5,0)
333

G
Ganlin Zhao 已提交
334
        # # bug need fix
C
cpwu 已提交
335
        tdSql.query(f"select last_row(c1), c2, c3 , c4, c5 from {dbname}.t1")
336 337 338 339
        tdSql.checkData(0, 0, None)
        tdSql.checkData(0, 1, None)
        tdSql.checkData(0, 2, None)

G
Ganlin Zhao 已提交
340
        # # bug need fix
C
cpwu 已提交
341
        tdSql.query(f"select last_row(c1), c2, c3 , c4, c5 from {dbname}.ct1")
342 343 344 345 346
        tdSql.checkData(0, 0, 9)
        tdSql.checkData(0, 1, -99999)
        tdSql.checkData(0, 2, -999)
        tdSql.checkData(0, 3, None)
        tdSql.checkData(0, 4,-9.99000)
G
Ganlin Zhao 已提交
347 348

        # bug need fix
C
cpwu 已提交
349
        tdSql.query(f"select last_row(c1), c2, c3 , c4, c5 from {dbname}.stb1 where tbname='ct1'")
W
wenzhouwww@live.cn 已提交
350 351 352 353 354
        tdSql.checkData(0, 0, 9)
        tdSql.checkData(0, 1, -99999)
        tdSql.checkData(0, 2, -999)
        tdSql.checkData(0, 3, None)
        tdSql.checkData(0, 4,-9.99000)
355

G
Ganlin Zhao 已提交
356
        # bug fix
C
cpwu 已提交
357
        tdSql.query(f"select last_row(abs(c1)) from {dbname}.ct1")
358 359
        tdSql.checkData(0,0,9)

G
Ganlin Zhao 已提交
360
        # # bug fix
C
cpwu 已提交
361 362 363
        tdSql.query(f"select last_row(c1+1) from {dbname}.ct1")
        tdSql.query(f"select last_row(c1+1) from {dbname}.stb1")
        tdSql.query(f"select last_row(c1+1) from {dbname}.t1")
364 365

        # used for stable table
C
cpwu 已提交
366
        tdSql.query(f"select last_row(c1 ,c2 ,c3) ,last_row(c4) from {dbname}.ct1")
367 368 369 370 371
        tdSql.checkData(0,0,9)
        tdSql.checkData(0,1,-99999)
        tdSql.checkData(0,2,-999)
        tdSql.checkData(0,3,None)

G
Ganlin Zhao 已提交
372
        # bug need fix
C
cpwu 已提交
373
        tdSql.query(f"select last_row(c1 ,c2 ,c3) from {dbname}.stb1 ")
374 375 376 377 378
        tdSql.checkData(0,0,None)
        tdSql.checkData(0,1,None)
        tdSql.checkData(0,2,None)


C
cpwu 已提交
379
        tdSql.query(f'select last_row(c1) from {dbname}.t1 where ts <"2022-12-31 01:01:36.000"')
W
update  
wenzhouwww@live.cn 已提交
380
        tdSql.checkData(0,0,8)
G
Ganlin Zhao 已提交
381
        # bug need fix
C
cpwu 已提交
382
        tdSql.query(f"select abs(last_row(c1)-2)+max(c1),ceil(last_row(c4)-2) from {dbname}.stb1 where c4 is not null")
W
wenzhouwww@live.cn 已提交
383 384
        tdSql.checkData(0,0,16.000000000)
        tdSql.checkData(0,1,-101.000000000)
385

C
cpwu 已提交
386
        tdSql.query(f"select abs(last_row(c1)-2)+max(c1),ceil(last_row(c4)-2) from {dbname}.ct1 where c4<0")
W
wenzhouwww@live.cn 已提交
387 388
        tdSql.checkData(0,0,16.000000000)
        tdSql.checkData(0,1,-101.000000000)
389

C
cpwu 已提交
390
        tdSql.query(f"select last_row(ceil(c1+2)+floor(c1)-10) from {dbname}.stb1")
391 392
        tdSql.checkData(0,0,None)

C
cpwu 已提交
393
        tdSql.query(f"select last_row(ceil(c1+2)+floor(c1)-10) from {dbname}.ct1")
394 395 396 397 398 399
        tdSql.checkData(0,0,10.000000000)

        # filter for last_row

        # bug need fix for all function

C
cpwu 已提交
400
        tdSql.query(f"select last_row(ts ,c1 ) from {dbname}.ct4 where t1 = 1 ")
W
wenzhouwww@live.cn 已提交
401
        tdSql.checkRows(0)
402

C
cpwu 已提交
403
        tdSql.query(f"select count(c1) from {dbname}.ct4 where t1 = 1 ")
404 405
        tdSql.checkRows(0)

C
cpwu 已提交
406
        tdSql.query(f"select last_row(c1) ,last(c1)  from {dbname}.stb1 where  c1 is null")
W
wenzhouwww@live.cn 已提交
407 408 409 410
        tdSql.checkRows(1)
        tdSql.checkData(0,0,None)
        tdSql.checkData(0,1,None)

C
cpwu 已提交
411
        tdSql.query(f"select last_row(c1) ,count(*)  from {dbname}.stb1 where  c1 is null")
W
wenzhouwww@live.cn 已提交
412 413
        tdSql.checkData(0,0,None)
        tdSql.checkData(0,1,3)
G
Ganlin Zhao 已提交
414

C
cpwu 已提交
415
        tdSql.query(f"select last_row(c1) ,count(c1)  from {dbname}.stb1 where  c1 is null")
W
wenzhouwww@live.cn 已提交
416 417 418
        tdSql.checkData(0,0,None)
        tdSql.checkData(0,1,0)

419
        # bug need fix
C
cpwu 已提交
420
        tdSql.query(f"select tbname ,last_row(c1) from {dbname}.stb1")
W
wenzhouwww@live.cn 已提交
421 422
        tdSql.checkData(0,0,'ct4')
        tdSql.checkData(0,1,None)
G
Ganlin Zhao 已提交
423

C
cpwu 已提交
424
        tdSql.query(f"select tbname ,last_row(c1) from {dbname}.stb1 partition by tbname order by tbname ")
W
wenzhouwww@live.cn 已提交
425 426 427 428
        tdSql.checkData(0,0,'ct1')
        tdSql.checkData(0,1,9)
        tdSql.checkData(1,0,'ct4')
        tdSql.checkData(1,1,None)
429

C
cpwu 已提交
430
        tdSql.query(f"select tbname ,last_row(c1) from {dbname}.stb1 group by tbname order by tbname ")
431 432 433 434 435
        tdSql.checkData(0,0,'ct1')
        tdSql.checkData(0,1,9)
        tdSql.checkData(1,0,'ct4')
        tdSql.checkData(1,1,None)

C
cpwu 已提交
436
        tdSql.query(f"select t1 ,count(c1) from {dbname}.stb1 partition by t1 ")
437 438
        tdSql.checkRows(2)

G
Ganlin Zhao 已提交
439
        # filter by tbname
C
cpwu 已提交
440
        tdSql.query(f"select last_row(c1) from {dbname}.stb1 where tbname = 'ct1' ")
W
wenzhouwww@live.cn 已提交
441
        tdSql.checkData(0,0,9)
442

G
Ganlin Zhao 已提交
443
        # bug need fix
C
cpwu 已提交
444
        tdSql.query(f"select tbname ,last_row(c1) from {dbname}.stb1 where tbname = 'ct1' ")
W
wenzhouwww@live.cn 已提交
445
        tdSql.checkData(0,1,9)
C
cpwu 已提交
446
        tdSql.query(f"select tbname ,last_row(c1) from {dbname}.stb1 partition by tbname order by tbname")
W
wenzhouwww@live.cn 已提交
447 448 449 450
        tdSql.checkData(0, 0, 'ct1')
        tdSql.checkData(0, 1, 9)
        tdSql.checkData(1, 0, 'ct4')
        tdSql.checkData(1, 1, None)
451

C
cpwu 已提交
452
        tdSql.query(f"select tbname ,last_row(c1) from {dbname}.stb1 group by tbname order by tbname")
453 454 455 456 457 458
        tdSql.checkData(0, 0, 'ct1')
        tdSql.checkData(0, 1, 9)
        tdSql.checkData(1, 0, 'ct4')
        tdSql.checkData(1, 1, None)

        # last_row for only tag
C
cpwu 已提交
459
        tdSql.query(f"select last_row(t1 ,t2 ,t3 , t4 ) from {dbname}.stb1")
460 461 462 463 464
        tdSql.checkData(0,0,3)
        tdSql.checkData(0,1,33333)
        tdSql.checkData(0,2,333)
        tdSql.checkData(0,3,3)

C
cpwu 已提交
465
        tdSql.query(f"select last_row(abs(floor(t1)) ,t2 ,ceil(abs(t3)) , abs(ceil(t4)) ) from {dbname}.stb1")
466 467 468 469 470
        tdSql.checkData(0,0,3)
        tdSql.checkData(0,1,33333)
        tdSql.checkData(0,2,333)
        tdSql.checkData(0,3,3)

G
Ganlin Zhao 已提交
471
        # filter by tag
C
cpwu 已提交
472
        tdSql.query(f"select tbname ,last_row(c1) from {dbname}.stb1 where t1 =0 ")
W
wenzhouwww@live.cn 已提交
473
        tdSql.checkData(0,1,9)
C
cpwu 已提交
474
        tdSql.query(f"select tbname ,last_row(c1) ,t1 from {dbname}.stb1 partition by t1 order by t1")
W
wenzhouwww@live.cn 已提交
475 476 477 478
        tdSql.checkData(0, 0, 'ct1')
        tdSql.checkData(0, 1, 9)
        tdSql.checkData(1, 0, 'ct4')
        tdSql.checkData(1, 1, None)
479

G
Ganlin Zhao 已提交
480
        # filter by col
481

C
cpwu 已提交
482
        tdSql.query(f"select tbname ,last_row(c1),abs(c1)from {dbname}.stb1 where c1 =1;")
W
wenzhouwww@live.cn 已提交
483 484 485
        tdSql.checkData(0, 0, 'ct1')
        tdSql.checkData(0, 1, 1)
        tdSql.checkData(0, 2, 1)
C
cpwu 已提交
486
        tdSql.query(f"select last_row(c1) from {dbname}.stb1 where abs(ceil(c1))*c1==1")
487
        tdSql.checkData(0,0,1)
G
Ganlin Zhao 已提交
488

489
        # mix with common functions
C
cpwu 已提交
490
        tdSql.query(f"select last_row(*) ,last(*) from {dbname}.stb1  ")
491 492
        tdSql.checkRows(1)

C
cpwu 已提交
493
        tdSql.query(f"select last_row(*) ,last(*) from {dbname}.stb1  ")
494 495 496
        tdSql.checkRows(1)


C
cpwu 已提交
497 498
        tdSql.query(f"select last_row(c1+abs(c1)) from {dbname}.stb1 partition by tbname order by tbname")
        tdSql.query(f"select last(c1), max(c1+abs(c1)),last_row(c1+abs(c1)) from {dbname}.stb1 partition by tbname order by tbname")
499

G
Ganlin Zhao 已提交
500
        # # bug need fix ,taosd crash
C
cpwu 已提交
501 502
        tdSql.error(f"select last_row(*) ,last(*) from {dbname}.stb1 partition by tbname order by last(*)")
        tdSql.error(f"select last_row(*) ,last(*) from {dbname}.stb1 partition by tbname order by last_row(*)")
503

G
Ganlin Zhao 已提交
504
        # mix with agg functions
C
cpwu 已提交
505 506 507 508 509 510
        tdSql.query(f"select last(*), last_row(*),last(c1), last_row(c1) from {dbname}.stb1 ")
        tdSql.query(f"select last(*), last_row(*),last(c1), last_row(c1) from {dbname}.ct1 ")
        tdSql.query(f"select last(*), last_row(*),last(c1+1)*max(c1), last_row(c1+2)/2 from {dbname}.t1 ")
        tdSql.query(f"select last_row(*) ,abs(c1/2)+100 from {dbname}.stb1 where tbname =\"ct1\" ")
        tdSql.query(f"select c1, last_row(c5) from {dbname}.ct1 ")
        tdSql.error(f"select c1, last_row(c5) ,last(c1) from {dbname}.stb1 ")
511 512 513

        # agg functions mix with agg functions

C
cpwu 已提交
514 515
        tdSql.query(f"select last(c1) , max(c5), count(c5) from {dbname}.stb1")
        tdSql.query(f"select last_row(c1) , max(c5), count(c5) from {dbname}.ct1")
516 517

        # bug fix for compute
C
cpwu 已提交
518
        tdSql.query(f"select  last_row(c1) -0 ,last(c1)-0 ,last(c1)+last_row(c1) from {dbname}.ct4 ")
W
wenzhouwww@live.cn 已提交
519
        tdSql.checkData(0,0,None)
W
wenzhouwww@live.cn 已提交
520
        tdSql.checkData(0,1,0.000000000)
W
wenzhouwww@live.cn 已提交
521 522
        tdSql.checkData(0,2,None)

C
cpwu 已提交
523
        tdSql.query(f"select c1, abs(c1) -0 ,last_row(c1-0.1)-0.1 from {dbname}.ct1")
W
wenzhouwww@live.cn 已提交
524 525 526
        tdSql.checkData(0,0,9)
        tdSql.checkData(0,1,9.000000000)
        tdSql.checkData(0,2,8.800000000)
527

C
cpwu 已提交
528
    def abs_func_filter(self, dbname="db"):
529
        tdSql.query(
C
cpwu 已提交
530
            f"select c1, abs(c1) -0 ,ceil(c1-0.1)-0 ,floor(c1+0.1)-0.1 ,last_row(log(c1,2)-0.5) from {dbname}.ct4 where c1>5 ")
531 532 533 534 535 536 537
        tdSql.checkData(0, 0, 6)
        tdSql.checkData(0, 1, 6.000000000)
        tdSql.checkData(0, 2, 6.000000000)
        tdSql.checkData(0, 3, 5.900000000)
        tdSql.checkData(0, 4, 2.084962501)

        tdSql.query(
C
cpwu 已提交
538
            f"select last_row(c1,c2,c1+5) from {dbname}.ct4 where c1=5 ")
539 540 541 542 543
        tdSql.checkData(0, 0, 5)
        tdSql.checkData(0, 1, 55555)
        tdSql.checkData(0, 2, 10.000000000)

        tdSql.query(
C
cpwu 已提交
544
            f"select last(c1,c2,c1+5) from {dbname}.ct4 where c1=5 ")
545 546 547 548 549
        tdSql.checkData(0, 0, 5)
        tdSql.checkData(0, 1, 55555)
        tdSql.checkData(0, 2, 10.000000000)

        tdSql.query(
C
cpwu 已提交
550
            f"select c1,c2 , abs(c1) -0 ,ceil(c1-0.1)-0 ,floor(c1+0.1)-0.1 ,ceil(log(c1,2)-0.5) from {dbname}.ct4 where c1>log(c1,2) limit 1 ")
551 552 553 554 555 556 557 558 559 560 561
        tdSql.checkRows(1)
        tdSql.checkData(0, 0, 8)
        tdSql.checkData(0, 1, 88888)
        tdSql.checkData(0, 2, 8.000000000)
        tdSql.checkData(0, 3, 8.000000000)
        tdSql.checkData(0, 4, 7.900000000)
        tdSql.checkData(0, 5, 3.000000000)

    def abs_Arithmetic(self):
        pass

C
cpwu 已提交
562
    def check_boundary_values(self, dbname="bound_test"):
563

C
cpwu 已提交
564 565
        tdSql.execute(f"drop database if exists {dbname}")
        tdSql.execute(f"create database if not exists {dbname} cachemodel 'LAST_ROW' ")
W
update  
wenzhouwww@live.cn 已提交
566

567
        time.sleep(3)
C
cpwu 已提交
568
        tdSql.execute(f"use {dbname}")
569
        tdSql.execute(
C
cpwu 已提交
570
            f"create table {dbname}.stb_bound (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(32),c9 nchar(32), c10 timestamp) tags (t1 int);"
571
        )
C
cpwu 已提交
572
        tdSql.execute(f'create table {dbname}.sub1_bound using {dbname}.stb_bound tags ( 1 )')
573
        tdSql.execute(
C
cpwu 已提交
574
            f"insert into {dbname}.sub1_bound values ( now()-1s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
575 576
        )
        tdSql.execute(
C
cpwu 已提交
577
            f"insert into {dbname}.sub1_bound values ( now()-1s, -2147483647, -9223372036854775807, -32767, -127, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
578 579
        )
        tdSql.execute(
C
cpwu 已提交
580
            f"insert into {dbname}.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
581 582
        )
        tdSql.execute(
C
cpwu 已提交
583
            f"insert into {dbname}.sub1_bound values ( now(), -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
584 585
        )
        tdSql.error(
C
cpwu 已提交
586
            f"insert into {dbname}.sub1_bound values ( now()+1s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
587 588 589 590
        )

        # check basic elem for table per row
        tdSql.query(
C
cpwu 已提交
591
            f"select last(c1) ,last_row(c2), last_row(c3)+1 , last(c4)+1  from {dbname}.sub1_bound ")
592 593 594 595 596 597
        tdSql.checkData(0, 0, -2147483646)
        tdSql.checkData(0, 1, -9223372036854775806)
        tdSql.checkData(0, 2, -32765.000000000)
        tdSql.checkData(0, 3, -125.000000000)
        # check  + - * / in functions
        tdSql.query(
C
cpwu 已提交
598
            f"select last_row(c1+1) ,last_row(c2) , last(c3*1) , last(c4/2)  from {dbname}.sub1_bound ")
599

C
cpwu 已提交
600
    def test_tag_compute_for_scalar_function(self, dbname="testdb"):
601 602
        # bug need fix

C
cpwu 已提交
603 604
        tdSql.query(f"select sum(c1) from {dbname}.stb1 where t1+10 >1; ")
        tdSql.query(f"select c1 ,t1 from {dbname}.stb1 where t1 =0 ")
605
        tdSql.checkRows(13)
C
cpwu 已提交
606
        tdSql.query(f"select last_row(c1,t1) from {dbname}.stb1 ")
607 608
        tdSql.checkData(0,0,None)
        tdSql.checkData(0,1,3)
C
cpwu 已提交
609
        tdSql.query(f"select last_row(c1),t1 from {dbname}.stb1 ")
W
wenzhouwww@live.cn 已提交
610 611
        tdSql.checkData(0,0,None)
        tdSql.checkData(0,1,3)
C
cpwu 已提交
612
        tdSql.query(f"select last_row(c1,t1),last(t1) from {dbname}.stb1 ")
613 614 615 616
        tdSql.checkData(0,0,None)
        tdSql.checkData(0,1,3)
        tdSql.checkData(0,2,3)

C
cpwu 已提交
617
        tdSql.query(f"select last_row(t1) from {dbname}.stb1 where t1 >0 ")
618 619
        tdSql.checkRows(1)
        tdSql.checkData(0,0,3)
C
cpwu 已提交
620
        tdSql.query(f"select last_row(t1) from {dbname}.stb1 where t1 =3 ")
621 622 623
        tdSql.checkRows(1)
        tdSql.checkData(0,0,3)

C
cpwu 已提交
624
        tdSql.query(f"select last_row(t1) from {dbname}.stb1 where t1 =2")
625 626 627
        tdSql.checkRows(0)

        # nest query for last_row
C
cpwu 已提交
628
        tdSql.query(f"select last_row(t1) from (select ts , c1 ,t1 from {dbname}.stb1)")
W
update  
wenzhouwww@live.cn 已提交
629
        tdSql.checkData(0,0,3)
C
cpwu 已提交
630
        tdSql.query(f"select distinct(c1) ,t1 from {dbname}.stb1")
W
wenzhouwww@live.cn 已提交
631
        tdSql.checkRows(20)
C
cpwu 已提交
632
        tdSql.query(f"select last_row(c1) from (select _rowts , c1 ,t1 from {dbname}.stb1)")
633 634
        tdSql.checkData(0,0,None)

C
cpwu 已提交
635
        tdSql.query(f"select last_row(c1) from (select ts , c1 ,t1 from {dbname}.stb1)")
636 637
        tdSql.checkData(0,0,None)

C
cpwu 已提交
638
        tdSql.query(f"select ts , last_row(c1) ,c1  from (select ts , c1 ,t1 from {dbname}.stb1)")
W
wenzhouwww@live.cn 已提交
639
        tdSql.checkData(0,1,None)
640

X
Xiaoyu Wang 已提交
641
        tdSql.query(f"select ts , last_row(c1) ,c1  from (select ts , max(c1) c1  ,t1 from {dbname}.stb1 where ts >now -1h and ts <now+1h interval(10s) fill(value ,10, 10, 10))")
642 643 644
        tdSql.checkData(0,1,10)
        tdSql.checkData(0,1,10)

X
Xiaoyu Wang 已提交
645
        tdSql.error(f"select ts , last_row(c1) ,c1  from (select count(c1) c1 from {dbname}.stb1 where ts >now -1h and ts <now+1h interval(10s) fill(value ,10, 10, 10))")
646

X
Xiaoyu Wang 已提交
647
        tdSql.error(f"select  last_row(c1) ,c1  from (select  count(c1) c1 from {dbname}.stb1 where ts >now -1h and ts <now+1h interval(10s) fill(value ,10, 10))")
648

W
wenzhouwww@live.cn 已提交
649
        # tag filter with last_row function
C
cpwu 已提交
650
        tdSql.query(f"select last_row(t1) from {dbname}.stb1 where abs(t1)=1")
W
wenzhouwww@live.cn 已提交
651
        tdSql.checkRows(0)
C
cpwu 已提交
652
        tdSql.query(f"select last_row(t1) from {dbname}.stb1 where abs(t1)=0")
653
        tdSql.checkRows(1)
C
cpwu 已提交
654
        tdSql.query(f"select last_row(t1),last_row(c1) from db.ct1 where abs(c1+t1)=1")
655 656
        tdSql.checkRows(1)
        tdSql.checkData(0,0,1)
W
wenzhouwww@live.cn 已提交
657
        tdSql.checkData(0,1,0)
658 659

        tdSql.query(
C
cpwu 已提交
660
            f"select last_row(c1+t1)*t1 from {dbname}.stb1 where abs(c1)/floor(abs(ceil(t1))) ==1")
661

C
cpwu 已提交
662 663
    def group_test(self, dbname="testdb"):
        tdSql.query(f"select last_row(c1) from {dbname}.stb1 group by t1 order by t1 ")
664
        tdSql.checkRows(2)
G
Ganlin Zhao 已提交
665 666

        # bug need fix
C
cpwu 已提交
667
        tdSql.query(f"select last_row(c1) from {dbname}.stb1 group by c1 order by c1,t1 ")
W
wenzhouwww@live.cn 已提交
668 669
        tdSql.checkRows(10)
        tdSql.checkData(9,0,8)
C
cpwu 已提交
670
        tdSql.query(f"select last_row(c1) from {dbname}.stb1 group by c1 order by t1 ")
W
wenzhouwww@live.cn 已提交
671 672 673
        tdSql.checkRows(10)
        tdSql.checkData(0,0,4)

C
cpwu 已提交
674
        tdSql.query(f"select last_row(c1) from {dbname}.stb1 group by c1 order by t1")
W
wenzhouwww@live.cn 已提交
675 676
        tdSql.checkRows(11)

C
cpwu 已提交
677
        tdSql.query(f"select last_row(c1) from {dbname}.stb1 group by c1 order by c1,t1;")
W
wenzhouwww@live.cn 已提交
678 679
        tdSql.checkRows(11)
        tdSql.checkData(10,0,9)
680

G
Ganlin Zhao 已提交
681
        # bug need fix , result is error
C
cpwu 已提交
682 683
        tdSql.query(f"select last_row(c1) from {dbname}.ct4 group by c1 order by t1 ")
        tdSql.query(f"select last_row(t1) from {dbname}.ct4 group by c1 order by t1 ")
684

C
cpwu 已提交
685
        tdSql.query(f"select last_row(t1) from {dbname}.stb1 group by t1 order by t1 ")
686
        tdSql.checkRows(2)
C
cpwu 已提交
687
        tdSql.query(f"select last_row(c1) from {dbname}.stb1 group by c1 order by c1 ")
688 689 690 691
        tdSql.checkRows(11)
        tdSql.checkData(0,0,None)
        tdSql.checkData(10,0,9)

C
cpwu 已提交
692
        tdSql.query(f"select ceil(abs(last_row(abs(c1)))) from {dbname}.stb1 group by abs(c1) order by abs(c1);")
693 694 695
        tdSql.checkRows(11)
        tdSql.checkData(0,0,None)
        tdSql.checkData(10,0,9)
C
cpwu 已提交
696
        tdSql.query(f"select last_row(c1+c3) from {dbname}.stb1 group by abs(c1+c3) order by abs(c1+c3)")
697 698
        tdSql.checkRows(11)

G
Ganlin Zhao 已提交
699
        # bug need fix , taosd crash
C
cpwu 已提交
700
        tdSql.query(f"select last_row(c1+c3)+c2 from {dbname}.stb1 group by abs(c1+c3)+c2 order by abs(c1+c3)+c2")
701
        tdSql.checkRows(11)
C
cpwu 已提交
702
        tdSql.query(f"select last_row(c1+c3)+last_row(c2) from {dbname}.stb1 group by abs(c1+c3)+abs(c2) order by abs(c1+c3)+abs(c2)")
703
        tdSql.checkRows(11)
W
wenzhouwww@live.cn 已提交
704 705
        tdSql.checkData(0,0,None)
        tdSql.checkData(2,0,11223.000000000)
G
Ganlin Zhao 已提交
706

C
cpwu 已提交
707
        tdSql.query(f"select last_row(t1) from {dbname}.stb1 where abs(c1+t1)=1 partition by tbname")
W
wenzhouwww@live.cn 已提交
708
        tdSql.checkData(0,0,1)
G
Ganlin Zhao 已提交
709

C
cpwu 已提交
710
        tdSql.query(f"select tbname , last_row(c1) from {dbname}.stb1 partition by tbname order by tbname")
W
wenzhouwww@live.cn 已提交
711 712 713 714 715
        tdSql.checkRows(2)
        tdSql.checkData(0, 0, 'ct1')
        tdSql.checkData(0, 1,  9)
        tdSql.checkData(0, 2, 'ct4')
        tdSql.checkData(0, 3, None)
G
Ganlin Zhao 已提交
716

C
cpwu 已提交
717
        tdSql.query(f"select tbname , last_row(c1) from {dbname}.stb1 partition by t1 order by t1")
W
wenzhouwww@live.cn 已提交
718 719 720 721 722
        tdSql.checkRows(2)
        tdSql.checkData(0, 0, 'ct1')
        tdSql.checkData(0, 1,  9)
        tdSql.checkData(0, 2, 'ct4')
        tdSql.checkData(0, 3, None)
723

G
Ganlin Zhao 已提交
724
        # bug need fix
C
cpwu 已提交
725
        tdSql.query(f"select tbname , last_row(c1) from {dbname}.stb1 partition by c2 order by c1")
W
wenzhouwww@live.cn 已提交
726 727
        tdSql.checkRows(11)
        tdSql.checkData(10,1,9)
728

C
cpwu 已提交
729
        tdSql.query(f"select tbname , last_row(c1) from {dbname}.stb1 partition by c2 order by c2")
W
wenzhouwww@live.cn 已提交
730 731
        tdSql.checkRows(11)
        tdSql.checkData(10,1,88888)
732

C
cpwu 已提交
733
        tdSql.query(f"select tbname , last_row(t1) from {dbname}.stb1 partition by c2 order by t1")
W
wenzhouwww@live.cn 已提交
734
        tdSql.checkRows(11)
735

C
cpwu 已提交
736
        tdSql.query(f"select abs(c1) ,c2 ,t1, last_row(t1) from {dbname}.stb1 partition by c2 order by t1")
W
wenzhouwww@live.cn 已提交
737
        tdSql.checkRows(11)
G
Ganlin Zhao 已提交
738

C
cpwu 已提交
739
        tdSql.query(f"select t1 ,last_row(t1) ,c2 from {dbname}.stb1 partition by c2 order by t1")
W
wenzhouwww@live.cn 已提交
740
        tdSql.checkRows(11)
741

C
cpwu 已提交
742
        tdSql.query(f"select last_row(t1) ,last_row(t1) ,last_row(c2) from {dbname}.stb1 partition by c2 order by c2")
W
wenzhouwww@live.cn 已提交
743
        tdSql.checkRows(11)
744

C
cpwu 已提交
745
        tdSql.query(f"select abs(c1) , last_row(t1) ,c2 from {dbname}.stb1 partition by tbname order by tbname")
W
wenzhouwww@live.cn 已提交
746
        tdSql.checkRows(2)
747

C
cpwu 已提交
748
        tdSql.query(f"select last_row(c1) , ceil(t1) ,c2 from {dbname}.stb1 partition by t1 order by t1")
W
wenzhouwww@live.cn 已提交
749
        tdSql.checkRows(2)
750

C
cpwu 已提交
751
        tdSql.query(f"select last_row(c1) , abs(t1) ,c2 from {dbname}.stb1 partition by abs(c1) order by abs(c1)")
W
wenzhouwww@live.cn 已提交
752
        tdSql.checkRows(11)
753

C
cpwu 已提交
754
        tdSql.query(f"select abs(last_row(c1)) , abs(floor(t1)) ,floor(c2) from {dbname}.stb1 partition by abs(floor(c1)) order by abs(c1)")
W
wenzhouwww@live.cn 已提交
755
        tdSql.checkRows(11)
756

C
cpwu 已提交
757
        tdSql.query(f"select last_row(ceil(c1-2)) , abs(floor(t1+1)) ,floor(c2-c1) from {dbname}.stb1 partition by abs(floor(c1)) order by abs(c1)")
W
wenzhouwww@live.cn 已提交
758
        tdSql.checkRows(11)
759

760

C
cpwu 已提交
761
        tdSql.query(f"select max(c1) from {dbname}.stb1 interval(50s) sliding(30s)")
762 763
        tdSql.checkRows(13)

C
cpwu 已提交
764
        tdSql.query(f"select unique(c1) from {dbname}.stb1 partition by tbname")
W
wenzhouwww@live.cn 已提交
765

G
Ganlin Zhao 已提交
766
        # interval
767

C
cpwu 已提交
768
        tdSql.query(f"select last_row(c1) from {dbname}.stb1 interval(50s) sliding(30s)")
W
wenzhouwww@live.cn 已提交
769
        tdSql.checkRows(27)
770 771


C
cpwu 已提交
772
        tdSql.query(f"select last_row(c1) from {dbname}.ct1 interval(50s) sliding(30s)")
773
        tdSql.checkRows(5)
W
wenzhouwww@live.cn 已提交
774
        last_row_result = tdSql.queryResult
C
cpwu 已提交
775
        tdSql.query(f"select last(c1) from {dbname}.ct1 interval(50s) sliding(30s)")
W
wenzhouwww@live.cn 已提交
776 777
        for ind , row in enumerate(last_row_result):
            tdSql.checkData(ind , 0 , row[0])
778

W
wenzhouwww@live.cn 已提交
779
        # bug need fix
C
cpwu 已提交
780
        tdSql.query(f'select max(c1) from {dbname}.t1 where ts>="2021-01-01 01:01:06.000" and ts < "2021-07-21 01:01:01.000" interval(50d) sliding(30d) fill(NULL)')
W
wenzhouwww@live.cn 已提交
781 782 783
        tdSql.checkRows(8)
        tdSql.checkData(7,0,None)

C
cpwu 已提交
784
        tdSql.query(f'select last_row(c1) from {dbname}.t1 where ts>="2021-01-01 01:01:06.000" and ts < "2021-07-21 01:01:01.000" interval(50d) sliding(30d) fill(value ,2 )')
W
wenzhouwww@live.cn 已提交
785 786 787
        tdSql.checkRows(8)
        tdSql.checkData(7,0,2)

C
cpwu 已提交
788 789
        tdSql.query(f'select last_row(c1) from {dbname}.stb1 where ts>="2022-07-06 16:00:00.000 " and ts < "2022-07-06 17:00:00.000 " interval(50s) sliding(30s)')
        tdSql.query(f'select last_row(c1) from (select ts ,  c1  from {dbname}.t1 where ts>="2021-01-01 01:01:06.000" and ts < "2021-07-21 01:01:01.000" ) interval(10s) sliding(5s)')
W
wenzhouwww@live.cn 已提交
790

G
Ganlin Zhao 已提交
791
        # join
C
cpwu 已提交
792 793 794
        db1 = "test"
        tdSql.query(f"use {db1}")
        tdSql.query(f"select last(sub_tb_1.c1), last(sub_tb_2.c2) from {db1}.sub_tb_1 sub_tb_1, {db1}.sub_tb_2 sub_tb_2 where sub_tb_1.ts=sub_tb_2.ts")
W
wenzhouwww@live.cn 已提交
795 796
        tdSql.checkCols(2)
        last_row_result = tdSql.queryResult
C
cpwu 已提交
797
        tdSql.query(f"select last_row(sub_tb_1.c1), last_row(sub_tb_2.c2) from {db1}.sub_tb_1 sub_tb_1, {db1}.sub_tb_2 sub_tb_2 where sub_tb_1.ts=sub_tb_2.ts")
G
Ganlin Zhao 已提交
798

W
wenzhouwww@live.cn 已提交
799 800
        for ind , row in enumerate(last_row_result):
            tdSql.checkData(ind , 0 , row[0])
801

C
cpwu 已提交
802
        tdSql.query(f"select last(*), last(*) from {db1}.sub_tb_1 sub_tb_1, {db1}.sub_tb_2 where sub_tb_1.ts=sub_tb_2.ts")
803

W
wenzhouwww@live.cn 已提交
804
        last_row_result = tdSql.queryResult
C
cpwu 已提交
805
        tdSql.query(f"select last_row(*), last_row(*) from {db1}.sub_tb_1 sub_tb_1, {db1}.sub_tb_2 where sub_tb_1.ts=sub_tb_2.ts")
W
wenzhouwww@live.cn 已提交
806 807
        for ind , row in enumerate(last_row_result):
            tdSql.checkData(ind , 0 , row[0])
808

C
cpwu 已提交
809
        tdSql.query(f"select last(*), last_row(*) from {db1}.sub_tb_1 sub_tb_1, {db1}.sub_tb_2 where sub_tb_1.ts=sub_tb_2.ts")
W
update  
wenzhouwww@live.cn 已提交
810 811
        for ind , row in enumerate(last_row_result):
            tdSql.checkData(ind , 0 , row[0])
812

C
cpwu 已提交
813
        tdSql.query(f"select last_row(*), last(*) from {db1}.sub_tb_1 sub_tb_1, {db1}.sub_tb_2 where sub_tb_1.ts=sub_tb_2.ts")
W
update  
wenzhouwww@live.cn 已提交
814 815
        for ind , row in enumerate(last_row_result):
            tdSql.checkData(ind , 0 , row[0])
G
Ganlin Zhao 已提交
816

817

C
cpwu 已提交
818 819 820 821 822
    def support_super_table_test(self, dbname="testdb"):
        self.check_result_auto( f"select c1 from {dbname}.stb1 order by ts " , f"select abs(c1) from {dbname}.stb1 order by ts" )
        self.check_result_auto( f"select c1 from {dbname}.stb1 order by tbname " , f"select abs(c1) from {dbname}.stb1 order by tbname" )
        self.check_result_auto( f"select c1 from {dbname}.stb1 where c1 > 0 order by tbname  " , f"select abs(c1) from {dbname}.stb1 where c1 > 0 order by tbname" )
        self.check_result_auto( f"select c1 from {dbname}.stb1 where c1 > 0 order by tbname  " , f"select abs(c1) from {dbname}.stb1 where c1 > 0 order by tbname" )
W
update  
wenzhouwww@live.cn 已提交
823

C
cpwu 已提交
824 825 826 827
        self.check_result_auto( f"select t1,c1 from {dbname}.stb1 order by ts " , f"select t1, abs(c1) from {dbname}.stb1 order by ts" )
        self.check_result_auto( f"select t2,c1 from {dbname}.stb1 order by tbname " , f"select t2 ,abs(c1) from {dbname}.stb1 order by tbname" )
        self.check_result_auto( f"select t3,c1 from {dbname}.stb1 where c1 > 0 order by tbname  " , f"select t3 ,abs(c1) from {dbname}.stb1 where c1 > 0 order by tbname" )
        self.check_result_auto( f"select t4,c1 from {dbname}.stb1 where c1 > 0 order by tbname  " , f"select t4 , abs(c1) from {dbname}.stb1 where c1 > 0 order by tbname" )
G
Ganlin Zhao 已提交
828

W
wenzhouwww@live.cn 已提交
829
    def basic_query(self):
G
Ganlin Zhao 已提交
830

831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861
        tdLog.printNoPrefix("==========step2:test errors ==============")

        self.test_errors()

        tdLog.printNoPrefix("==========step3:support types ============")

        self.support_types()

        tdLog.printNoPrefix("==========step4: abs basic query ============")

        self.basic_abs_function()

        tdLog.printNoPrefix("==========step5: abs boundary query ============")

        self.check_boundary_values()

        tdLog.printNoPrefix("==========step6: abs filter query ============")

        self.abs_func_filter()

        tdLog.printNoPrefix("==========step6: tag coumpute query ============")

        self.test_tag_compute_for_scalar_function()

        tdLog.printNoPrefix("==========step7: check result of query ============")


        tdLog.printNoPrefix("==========step8: check abs result of  stable query ============")

        self.support_super_table_test()

W
wenzhouwww@live.cn 已提交
862 863 864 865 866 867
    def run(self):  # sourcery skip: extract-duplicate-method, remove-redundant-fstring
        # tdSql.prepare()

        tdLog.printNoPrefix("==========step1:create table ==============")

        # cache_last 0
W
wenzhouwww@live.cn 已提交
868 869 870
        self.prepare_datas("'NONE' ")
        self.prepare_tag_datas("'NONE'")
        self.insert_datas_and_check_abs(self.tb_nums,self.row_nums,self.time_step,"'NONE'")
W
wenzhouwww@live.cn 已提交
871 872
        self.basic_query()

G
Ganlin Zhao 已提交
873
        # cache_last 1
W
wenzhouwww@live.cn 已提交
874 875 876
        self.prepare_datas("'LAST_ROW'")
        self.prepare_tag_datas("'LAST_ROW'")
        self.insert_datas_and_check_abs(self.tb_nums,self.row_nums,self.time_step,"'LAST_ROW'")
W
wenzhouwww@live.cn 已提交
877 878
        self.basic_query()

G
Ganlin Zhao 已提交
879
        # cache_last 2
W
wenzhouwww@live.cn 已提交
880 881 882
        self.prepare_datas("'LAST_VALUE'")
        self.prepare_tag_datas("'LAST_VALUE'")
        self.insert_datas_and_check_abs(self.tb_nums,self.row_nums,self.time_step,"'LAST_VALUE'")
W
wenzhouwww@live.cn 已提交
883 884
        self.basic_query()

G
Ganlin Zhao 已提交
885
        # cache_last 3
W
wenzhouwww@live.cn 已提交
886 887 888
        self.prepare_datas("'BOTH'")
        self.prepare_tag_datas("'BOTH'")
        self.insert_datas_and_check_abs(self.tb_nums,self.row_nums,self.time_step,"'BOTH'")
W
wenzhouwww@live.cn 已提交
889 890 891
        self.basic_query()


892 893 894 895 896 897 898
    def stop(self):
        tdSql.close()
        tdLog.success(f"{__file__} successfully executed")


tdCases.addLinux(__file__, TDTestCase())
tdCases.addWindows(__file__, TDTestCase())