last_row.py 40.4 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
import taos
import sys
import datetime
import inspect

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


class TDTestCase:
    updatecfgDict = {'debugFlag': 143, "cDebugFlag": 143, "uDebugFlag": 143, "rpcDebugFlag": 143, "tmrDebugFlag": 143,
                     "jniDebugFlag": 143, "simDebugFlag": 143, "dDebugFlag": 143, "dDebugFlag": 143, "vDebugFlag": 143, "mDebugFlag": 143, "qDebugFlag": 143,
                     "wDebugFlag": 143, "sDebugFlag": 143, "tsdbDebugFlag": 143, "tqDebugFlag": 143, "fsDebugFlag": 143, "fnDebugFlag": 143 ,"udf":0}

    def init(self, conn, logSql):
        tdLog.debug(f"start to excute {__file__}")
        tdSql.init(conn.cursor(), True)
        self.tb_nums = 10
        self.row_nums = 20
        self.ts = 1434938400000
        self.time_step = 1000

W
wenzhouwww@live.cn 已提交
25 26
    def insert_datas_and_check_abs(self ,tbnums , rownums , time_step ,cache_value ):
        tdSql.execute("drop database if exists test ")
27 28
        tdLog.info(" prepare datas for auto check abs function ")

W
wenzhouwww@live.cn 已提交
29
        tdSql.execute(f" create database test cachemodel {cache_value} ")
30
        tdSql.execute(" use test ")
W
update  
wenzhouwww@live.cn 已提交
31
        tdSql.execute(" create stable test.stb (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint,\
32 33
             c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp) tags (t1 int)")
        for tbnum in range(tbnums):
W
update  
wenzhouwww@live.cn 已提交
34
            tbname = "test.sub_tb_%d"%tbnum
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
            tdSql.execute(" create table %s using stb tags(%d) "%(tbname , tbnum))

            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 已提交
51

52 53 54 55 56 57 58 59
        tdSql.execute("use test")
        tbnames = ["stb", "sub_tb_1"]
        support_types = ["BIGINT", "SMALLINT", "TINYINT", "FLOAT", "DOUBLE", "INT"]
        for tbname in tbnames:
            tdSql.query("desc {}".format(tbname))
            coltypes = tdSql.queryResult
            for coltype in coltypes:
                colname = coltype[0]
W
update  
wenzhouwww@live.cn 已提交
60 61
                abs_sql = "select abs({}) from {} order by tbname ".format(colname, 'test.'+tbname)
                origin_sql = "select {} from {} order by tbname".format(colname, 'test.'+tbname)
62 63
                if coltype[1] in support_types:
                    self.check_result_auto(origin_sql , abs_sql)
G
Ganlin Zhao 已提交
64

W
wenzhouwww@live.cn 已提交
65 66
    def prepare_datas(self ,cache_value):
        tdSql.execute("drop database if exists db ")
W
wenzhouwww@live.cn 已提交
67
        create_db_sql = f"create database if not exists db keep 3650 duration 1000 cachemodel {cache_value}"
W
wenzhouwww@live.cn 已提交
68
        tdSql.execute(create_db_sql)
69 70 71

        tdSql.execute("use db")
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
72
            '''create table db.stb1
73 74 75 76 77 78 79
            (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(
            '''
W
update  
wenzhouwww@live.cn 已提交
80
            create table db.t1
81 82 83 84
            (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):
W
update  
wenzhouwww@live.cn 已提交
85
            tdSql.execute(f'create table db.ct{i+1} using stb1 tags ( {i+1} )')
86 87 88

        for i in range(9):
            tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
89
                f"insert into db.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 )"
90 91
            )
            tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
92
                f"insert into db.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 )"
93 94
            )
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
95
            "insert into db.ct1 values (now()-45s, 0, 0, 0, 0, 0, 0, 0, 'binary0', 'nchar0', now()+8a )")
96
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
97
            "insert into db.ct1 values (now()+10s, 9, -99999, -999, -99, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a )")
98
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
99
            "insert into db.ct1 values (now()+15s, 9, -99999, -999, -99, -9.99, NULL, 1, 'binary9', 'nchar9', now()+9a )")
100
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
101
            "insert into db.ct1 values (now()+20s, 9, -99999, -999, NULL, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a )")
102 103

        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
104
            "insert into db.ct4 values (now()-810d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) ")
105
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
106
            "insert into db.ct4 values (now()-400d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) ")
107
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
108
            "insert into db.ct4 values (now()+90d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL  ) ")
109 110

        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
111
            f'''insert into db.t1 values
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
            ( '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 )
            '''
        )

W
wenzhouwww@live.cn 已提交
127 128 129
    def prepare_tag_datas(self,cache_value):

        tdSql.execute("drop database if exists testdb ")
130
        # prepare datas
W
update  
wenzhouwww@live.cn 已提交
131 132
        tdSql.execute(f"create database if not exists testdb keep 3650 duration 1000 cachemodel {cache_value}")

133 134
        tdSql.execute(" use testdb ")

W
update  
wenzhouwww@live.cn 已提交
135
        tdSql.execute(f" create stable testdb.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,\
136 137 138 139 140
             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(
            '''
W
update  
wenzhouwww@live.cn 已提交
141
            create table testdb.t1
142 143 144 145 146
            (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(
W
update  
wenzhouwww@live.cn 已提交
147
                f'create table testdb.ct{i+1} using 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())')
148 149 150

        for i in range(9):
            tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
151
                f"insert into testdb.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} )"
152 153
            )
            tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
154
                f"insert into testdb.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})"
155 156
            )
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
157
            "insert into testdb.ct1 values (now()-45s, 0, 0, 0, 0, 0, 0, 0, 'binary0', 'nchar0', now()+8a ,0,0,0,0)")
158
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
159
            "insert into testdb.ct1 values (now()+10s, 9, -99999, -999, -99, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a , 999 , 9999 , 9 , 9)")
160
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
161
            "insert into testdb.ct1 values (now()+15s, 9, -99999, -999, -99, -9.99, NULL, 1, 'binary9', 'nchar9', now()+9a , 999 , 99999 , 9 , 9)")
162
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
163
            "insert into testdb.ct1 values (now()+20s, 9, -99999, -999, NULL, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a ,999 , 99999 , 9 , 9)")
164 165

        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
166
            "insert into testdb.ct4 values (now()-810d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL , NULL, NULL, NULL, NULL) ")
167
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
168
            "insert into testdb.ct4 values (now()-400d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL , NULL, NULL, NULL, NULL) ")
169
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
170
            "insert into testdb.ct4 values (now()+90d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL , NULL, NULL, NULL, NULL ) ")
171 172

        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
173
            f'''insert into testdb.t1 values
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 216 217 218 219 220 221 222
            ( '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)

    def test_errors(self):
        tdSql.execute("use testdb")

G
Ganlin Zhao 已提交
223
        # bug need fix
G
Ganlin Zhao 已提交
224
        tdSql.error("select last_row(c1 ,NULL) from testdb.t1")
225 226

        error_sql_lists = [
W
update  
wenzhouwww@live.cn 已提交
227 228 229 230
            "select last_row from testdb.t1",
            "select last_row(-+--+c1) from testdb.t1",
            "select last_row(123--123)==1 from testdb.t1",
            "select last_row(c1) as 'd1' from testdb.t1",
G
Ganlin Zhao 已提交
231
            #"select last_row(c1 ,NULL) from testdb.t1",
W
update  
wenzhouwww@live.cn 已提交
232 233 234 235 236 237
            "select last_row(,) from testdb.t1;",
            "select last_row(abs(c1) ab from testdb.t1)",
            "select last_row(c1) as int from testdb.t1",
            "select last_row from testdb.stb1",
            "select last_row(123--123)==1 from testdb.stb1",
            "select last_row(c1) as 'd1' from testdb.stb1",
G
Ganlin Zhao 已提交
238
            #"select last_row(c1 ,NULL) from testdb.stb1",
W
update  
wenzhouwww@live.cn 已提交
239 240 241
            "select last_row(,) from testdb.stb1;",
            "select last_row(abs(c1) ab from testdb.stb1)",
            "select last_row(c1) as int from testdb.stb1"
242 243 244 245 246 247 248
        ]
        for error_sql in error_sql_lists:
            tdSql.error(error_sql)

    def support_types(self):
        tdSql.execute("use testdb")
        tbnames = ["stb1", "t1", "ct1", "ct2"]
G
Ganlin Zhao 已提交
249

250 251 252 253 254 255 256
        for tbname in tbnames:
            tdSql.query("desc {}".format(tbname))
            coltypes = tdSql.queryResult
            for coltype in coltypes:
                colname = coltype[0]
                col_note = coltype[-1]
                if col_note != "TAG":
W
update  
wenzhouwww@live.cn 已提交
257
                    abs_sql = "select last_row({}) from {}".format(colname, "testdb."+tbname)
258
                    tdSql.query(abs_sql)
G
Ganlin Zhao 已提交
259

260 261 262 263

    def basic_abs_function(self):

        # basic query
W
update  
wenzhouwww@live.cn 已提交
264
        tdSql.query("select c1 from testdb.ct3")
265
        tdSql.checkRows(0)
W
update  
wenzhouwww@live.cn 已提交
266
        tdSql.query("select c1 from testdb.t1")
267
        tdSql.checkRows(12)
W
update  
wenzhouwww@live.cn 已提交
268
        tdSql.query("select c1 from testdb.stb1")
269 270 271
        tdSql.checkRows(25)

        # used for empty table  , ct3 is empty
W
update  
wenzhouwww@live.cn 已提交
272
        tdSql.query("select last_row(c1) from testdb.ct3")
273
        tdSql.checkRows(0)
W
update  
wenzhouwww@live.cn 已提交
274
        tdSql.query("select last_row(c2) from testdb.ct3")
275
        tdSql.checkRows(0)
W
update  
wenzhouwww@live.cn 已提交
276
        tdSql.query("select last_row(c3) from testdb.ct3")
277
        tdSql.checkRows(0)
W
update  
wenzhouwww@live.cn 已提交
278
        tdSql.query("select last_row(c4) from testdb.ct3")
279
        tdSql.checkRows(0)
W
update  
wenzhouwww@live.cn 已提交
280
        tdSql.query("select last_row(c5) from testdb.ct3")
281
        tdSql.checkRows(0)
W
update  
wenzhouwww@live.cn 已提交
282
        tdSql.query("select last_row(c6) from testdb.ct3")
283 284 285

        # used for regular table

G
Ganlin Zhao 已提交
286
        # bug need fix
W
update  
wenzhouwww@live.cn 已提交
287
        tdSql.query("select last_row(c1) from testdb.t1")
288
        tdSql.checkData(0, 0, None)
W
update  
wenzhouwww@live.cn 已提交
289
        tdSql.query("select last_row(c1) from testdb.ct4")
290
        tdSql.checkData(0, 0, None)
W
update  
wenzhouwww@live.cn 已提交
291
        tdSql.query("select last_row(c1) from testdb.stb1")
292
        tdSql.checkData(0, 0, None)
293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351
        
        # support regular query about last ,first ,last_row 
        # tdSql.query("select last_row(c1,NULL) from testdb.t1")
        # tdSql.checkData(0,0,None)
        # tdSql.checkData(0,1,None)

        # tdSql.query("select last_row(c1,123) from testdb.t1")
        # tdSql.checkData(0,0,None)
        # tdSql.checkData(0,1,123)

        # tdSql.query("select last(c1,NULL) from testdb.t1")
        # tdSql.checkData(0,0,9)
        # tdSql.checkData(0,1,None)

        # tdSql.query("select last(c1,123) from testdb.t1")
        # tdSql.checkData(0,0,9)
        # tdSql.checkData(0,1,123)

        # tdSql.query("select first(c1,NULL) from testdb.t1")
        # tdSql.checkData(0,0,1)
        # tdSql.checkData(0,1,None)

        # tdSql.query("select first(c1,123) from testdb.t1")
        # tdSql.checkData(0,0,1)
        # tdSql.checkData(0,1,123)

        # tdSql.query("select last_row(c1,c2,c3,NULL,c4) from testdb.t1")
        # tdSql.checkData(0,0,None)
        # tdSql.checkData(0,1,None)
        # tdSql.checkData(0,2,None)
        # tdSql.checkData(0,3,None)
        # tdSql.checkData(0,4,None)

        # tdSql.query("select last_row(c1,c2,c3,123,c4) from testdb.t1")
        # 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)
        

        # tdSql.query("select last_row(c1,c2,c3,NULL,c4,t1,t2) from testdb.ct1")
        # tdSql.checkData(0,0,9)
        # tdSql.checkData(0,1,-99999)
        # tdSql.checkData(0,2,-999)
        # tdSql.checkData(0,3,None)
        # tdSql.checkData(0,4,None)
        # tdSql.checkData(0,5,0)
        # tdSql.checkData(0,5,0)

        # tdSql.query("select last_row(c1,c2,c3,123,c4,t1,t2) from testdb.ct1")
        # 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)

352

G
Ganlin Zhao 已提交
353
        # # bug need fix
W
update  
wenzhouwww@live.cn 已提交
354
        tdSql.query("select last_row(c1), c2, c3 , c4, c5 from testdb.t1")
355 356 357 358
        tdSql.checkData(0, 0, None)
        tdSql.checkData(0, 1, None)
        tdSql.checkData(0, 2, None)

G
Ganlin Zhao 已提交
359
        # # bug need fix
W
update  
wenzhouwww@live.cn 已提交
360
        tdSql.query("select last_row(c1), c2, c3 , c4, c5 from testdb.ct1")
361 362 363 364 365
        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 已提交
366 367

        # bug need fix
W
update  
wenzhouwww@live.cn 已提交
368
        tdSql.query("select last_row(c1), c2, c3 , c4, c5 from testdb.stb1 where tbname='ct1'")
W
wenzhouwww@live.cn 已提交
369 370 371 372 373
        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)
374

G
Ganlin Zhao 已提交
375
        # bug fix
W
update  
wenzhouwww@live.cn 已提交
376
        tdSql.query("select last_row(abs(c1)) from testdb.ct1")
377 378
        tdSql.checkData(0,0,9)

G
Ganlin Zhao 已提交
379
        # # bug fix
W
update  
wenzhouwww@live.cn 已提交
380
        tdSql.query("select last_row(c1+1) from testdb.ct1")
G
Ganlin Zhao 已提交
381 382
        tdSql.query("select last_row(c1+1) from testdb.stb1")
        tdSql.query("select last_row(c1+1) from testdb.t1")
383 384

        # used for stable table
W
update  
wenzhouwww@live.cn 已提交
385
        tdSql.query("select last_row(c1 ,c2 ,c3) ,last_row(c4) from testdb.ct1")
386 387 388 389 390
        tdSql.checkData(0,0,9)
        tdSql.checkData(0,1,-99999)
        tdSql.checkData(0,2,-999)
        tdSql.checkData(0,3,None)

G
Ganlin Zhao 已提交
391
        # bug need fix
W
update  
wenzhouwww@live.cn 已提交
392
        tdSql.query("select last_row(c1 ,c2 ,c3) from testdb.stb1 ")
393 394 395 396 397
        tdSql.checkData(0,0,None)
        tdSql.checkData(0,1,None)
        tdSql.checkData(0,2,None)


W
update  
wenzhouwww@live.cn 已提交
398 399
        tdSql.query('select last_row(c1) from testdb.t1 where ts <"2022-12-31 01:01:36.000"')
        tdSql.checkData(0,0,8)
G
Ganlin Zhao 已提交
400
        # bug need fix
W
update  
wenzhouwww@live.cn 已提交
401
        tdSql.query("select abs(last_row(c1)-2)+max(c1),ceil(last_row(c4)-2) from testdb.stb1 where c4 is not null")
W
wenzhouwww@live.cn 已提交
402 403
        tdSql.checkData(0,0,16.000000000)
        tdSql.checkData(0,1,-101.000000000)
404

W
update  
wenzhouwww@live.cn 已提交
405
        tdSql.query("select abs(last_row(c1)-2)+max(c1),ceil(last_row(c4)-2) from testdb.ct1 where c4<0")
W
wenzhouwww@live.cn 已提交
406 407
        tdSql.checkData(0,0,16.000000000)
        tdSql.checkData(0,1,-101.000000000)
408

W
update  
wenzhouwww@live.cn 已提交
409
        tdSql.query("select last_row(ceil(c1+2)+floor(c1)-10) from testdb.stb1")
410 411
        tdSql.checkData(0,0,None)

W
update  
wenzhouwww@live.cn 已提交
412
        tdSql.query("select last_row(ceil(c1+2)+floor(c1)-10) from testdb.ct1")
413 414 415 416 417 418
        tdSql.checkData(0,0,10.000000000)

        # filter for last_row

        # bug need fix for all function

W
update  
wenzhouwww@live.cn 已提交
419
        tdSql.query("select last_row(ts ,c1 ) from testdb.ct4 where t1 = 1 ")
W
wenzhouwww@live.cn 已提交
420
        tdSql.checkRows(0)
421

W
update  
wenzhouwww@live.cn 已提交
422
        tdSql.query("select count(c1) from testdb.ct4 where t1 = 1 ")
423 424
        tdSql.checkRows(0)

W
update  
wenzhouwww@live.cn 已提交
425
        tdSql.query("select last_row(c1) ,last(c1)  from testdb.stb1 where  c1 is null")
W
wenzhouwww@live.cn 已提交
426 427 428 429
        tdSql.checkRows(1)
        tdSql.checkData(0,0,None)
        tdSql.checkData(0,1,None)

W
update  
wenzhouwww@live.cn 已提交
430
        tdSql.query("select last_row(c1) ,count(*)  from testdb.stb1 where  c1 is null")
W
wenzhouwww@live.cn 已提交
431 432
        tdSql.checkData(0,0,None)
        tdSql.checkData(0,1,3)
G
Ganlin Zhao 已提交
433

W
update  
wenzhouwww@live.cn 已提交
434
        tdSql.query("select last_row(c1) ,count(c1)  from testdb.stb1 where  c1 is null")
W
wenzhouwww@live.cn 已提交
435 436 437
        tdSql.checkData(0,0,None)
        tdSql.checkData(0,1,0)

438
        # bug need fix
W
update  
wenzhouwww@live.cn 已提交
439
        tdSql.query("select tbname ,last_row(c1) from testdb.stb1")
W
wenzhouwww@live.cn 已提交
440 441
        tdSql.checkData(0,0,'ct4')
        tdSql.checkData(0,1,None)
G
Ganlin Zhao 已提交
442

W
update  
wenzhouwww@live.cn 已提交
443
        tdSql.query(" select tbname ,last_row(c1) from testdb.stb1 partition by tbname order by tbname ")
W
wenzhouwww@live.cn 已提交
444 445 446 447
        tdSql.checkData(0,0,'ct1')
        tdSql.checkData(0,1,9)
        tdSql.checkData(1,0,'ct4')
        tdSql.checkData(1,1,None)
448

W
update  
wenzhouwww@live.cn 已提交
449
        tdSql.query(" select tbname ,last_row(c1) from testdb.stb1 group by tbname order by tbname ")
450 451 452 453 454
        tdSql.checkData(0,0,'ct1')
        tdSql.checkData(0,1,9)
        tdSql.checkData(1,0,'ct4')
        tdSql.checkData(1,1,None)

W
update  
wenzhouwww@live.cn 已提交
455
        tdSql.query(" select t1 ,count(c1) from testdb.stb1 partition by t1 ")
456 457
        tdSql.checkRows(2)

G
Ganlin Zhao 已提交
458
        # filter by tbname
W
update  
wenzhouwww@live.cn 已提交
459
        tdSql.query("select last_row(c1) from testdb.stb1 where tbname = 'ct1' ")
W
wenzhouwww@live.cn 已提交
460
        tdSql.checkData(0,0,9)
461

G
Ganlin Zhao 已提交
462
        # bug need fix
W
update  
wenzhouwww@live.cn 已提交
463
        tdSql.query("select tbname ,last_row(c1) from testdb.stb1 where tbname = 'ct1' ")
W
wenzhouwww@live.cn 已提交
464
        tdSql.checkData(0,1,9)
W
update  
wenzhouwww@live.cn 已提交
465
        tdSql.query("select tbname ,last_row(c1) from testdb.stb1 partition by tbname order by tbname")
W
wenzhouwww@live.cn 已提交
466 467 468 469
        tdSql.checkData(0, 0, 'ct1')
        tdSql.checkData(0, 1, 9)
        tdSql.checkData(1, 0, 'ct4')
        tdSql.checkData(1, 1, None)
470

W
update  
wenzhouwww@live.cn 已提交
471
        tdSql.query("select tbname ,last_row(c1) from testdb.stb1 group by tbname order by tbname")
472 473 474 475 476 477
        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
W
update  
wenzhouwww@live.cn 已提交
478
        tdSql.query("select last_row(t1 ,t2 ,t3 , t4 ) from testdb.stb1")
479 480 481 482 483
        tdSql.checkData(0,0,3)
        tdSql.checkData(0,1,33333)
        tdSql.checkData(0,2,333)
        tdSql.checkData(0,3,3)

W
update  
wenzhouwww@live.cn 已提交
484
        tdSql.query("select last_row(abs(floor(t1)) ,t2 ,ceil(abs(t3)) , abs(ceil(t4)) ) from testdb.stb1")
485 486 487 488 489
        tdSql.checkData(0,0,3)
        tdSql.checkData(0,1,33333)
        tdSql.checkData(0,2,333)
        tdSql.checkData(0,3,3)

G
Ganlin Zhao 已提交
490
        # filter by tag
W
wenzhouwww@live.cn 已提交
491 492
        tdSql.query("select tbname ,last_row(c1) from testdb.stb1 where t1 =0 ")
        tdSql.checkData(0,1,9)
W
update  
wenzhouwww@live.cn 已提交
493
        tdSql.query("select tbname ,last_row(c1) ,t1 from testdb.stb1 partition by t1 order by t1")
W
wenzhouwww@live.cn 已提交
494 495 496 497
        tdSql.checkData(0, 0, 'ct1')
        tdSql.checkData(0, 1, 9)
        tdSql.checkData(1, 0, 'ct4')
        tdSql.checkData(1, 1, None)
498

G
Ganlin Zhao 已提交
499
        # filter by col
500

W
update  
wenzhouwww@live.cn 已提交
501
        tdSql.query("select tbname ,last_row(c1),abs(c1)from testdb.stb1 where c1 =1;")
W
wenzhouwww@live.cn 已提交
502 503 504
        tdSql.checkData(0, 0, 'ct1')
        tdSql.checkData(0, 1, 1)
        tdSql.checkData(0, 2, 1)
W
update  
wenzhouwww@live.cn 已提交
505
        tdSql.query("select last_row(c1) from testdb.stb1 where abs(ceil(c1))*c1==1")
506
        tdSql.checkData(0,0,1)
G
Ganlin Zhao 已提交
507

508
        # mix with common functions
W
update  
wenzhouwww@live.cn 已提交
509
        tdSql.query("select last_row(*) ,last(*) from testdb.stb1  ")
510 511
        tdSql.checkRows(1)

W
update  
wenzhouwww@live.cn 已提交
512
        tdSql.query("select last_row(*) ,last(*) from testdb.stb1  ")
513 514 515
        tdSql.checkRows(1)


W
update  
wenzhouwww@live.cn 已提交
516 517
        tdSql.query("select last_row(c1+abs(c1)) from testdb.stb1 partition by tbname order by tbname")
        tdSql.query("select last(c1), max(c1+abs(c1)),last_row(c1+abs(c1)) from testdb.stb1 partition by tbname order by tbname")
518

G
Ganlin Zhao 已提交
519
        # # bug need fix ,taosd crash
W
update  
wenzhouwww@live.cn 已提交
520 521
        tdSql.error("select last_row(*) ,last(*) from testdb.stb1 partition by tbname order by last(*)")
        tdSql.error("select last_row(*) ,last(*) from testdb.stb1 partition by tbname order by last_row(*)")
522

G
Ganlin Zhao 已提交
523
        # mix with agg functions
W
update  
wenzhouwww@live.cn 已提交
524 525 526 527 528 529
        tdSql.query("select last(*), last_row(*),last(c1), last_row(c1) from testdb.stb1 ")
        tdSql.query("select last(*), last_row(*),last(c1), last_row(c1) from testdb.ct1 ")
        tdSql.query("select last(*), last_row(*),last(c1+1)*max(c1), last_row(c1+2)/2 from testdb.t1 ")
        tdSql.query("select last_row(*) ,abs(c1/2)+100 from testdb.stb1 where tbname =\"ct1\" ")
        tdSql.query("select c1, last_row(c5) from testdb.ct1 ")
        tdSql.error("select c1, last_row(c5) ,last(c1) from testdb.stb1 ")
530 531 532

        # agg functions mix with agg functions

W
update  
wenzhouwww@live.cn 已提交
533 534
        tdSql.query("select last(c1) , max(c5), count(c5) from testdb.stb1")
        tdSql.query("select last_row(c1) , max(c5), count(c5) from testdb.ct1")
535 536

        # bug fix for compute
W
update  
wenzhouwww@live.cn 已提交
537
        tdSql.query("select  last_row(c1) -0 ,last(c1)-0 ,last(c1)+last_row(c1) from testdb.ct4 ")
W
wenzhouwww@live.cn 已提交
538
        tdSql.checkData(0,0,None)
W
wenzhouwww@live.cn 已提交
539
        tdSql.checkData(0,1,0.000000000)
W
wenzhouwww@live.cn 已提交
540 541
        tdSql.checkData(0,2,None)

W
update  
wenzhouwww@live.cn 已提交
542
        tdSql.query(" select c1, abs(c1) -0 ,last_row(c1-0.1)-0.1 from testdb.ct1")
W
wenzhouwww@live.cn 已提交
543 544 545
        tdSql.checkData(0,0,9)
        tdSql.checkData(0,1,9.000000000)
        tdSql.checkData(0,2,8.800000000)
546 547 548 549

    def abs_func_filter(self):
        tdSql.execute("use db")
        tdSql.query(
W
update  
wenzhouwww@live.cn 已提交
550
            "select c1, abs(c1) -0 ,ceil(c1-0.1)-0 ,floor(c1+0.1)-0.1 ,last_row(log(c1,2)-0.5) from db.ct4 where c1>5 ")
551 552 553 554 555 556 557
        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(
W
update  
wenzhouwww@live.cn 已提交
558
            "select last_row(c1,c2,c1+5) from db.ct4 where c1=5 ")
559 560 561 562 563
        tdSql.checkData(0, 0, 5)
        tdSql.checkData(0, 1, 55555)
        tdSql.checkData(0, 2, 10.000000000)

        tdSql.query(
W
update  
wenzhouwww@live.cn 已提交
564
            "select last(c1,c2,c1+5) from db.ct4 where c1=5 ")
565 566 567 568 569
        tdSql.checkData(0, 0, 5)
        tdSql.checkData(0, 1, 55555)
        tdSql.checkData(0, 2, 10.000000000)

        tdSql.query(
W
update  
wenzhouwww@live.cn 已提交
570
            "select c1,c2 , abs(c1) -0 ,ceil(c1-0.1)-0 ,floor(c1+0.1)-0.1 ,ceil(log(c1,2)-0.5) from db.ct4 where c1>log(c1,2) limit 1 ")
571 572 573 574 575 576 577 578 579 580 581 582 583 584
        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

    def check_boundary_values(self):

        tdSql.execute("drop database if exists bound_test")
W
wenzhouwww@live.cn 已提交
585
        tdSql.execute("create database if not exists bound_test cachemodel 'LAST_ROW' ")
W
update  
wenzhouwww@live.cn 已提交
586

587 588 589
        time.sleep(3)
        tdSql.execute("use bound_test")
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
590
            "create table bound_test.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);"
591
        )
W
update  
wenzhouwww@live.cn 已提交
592
        tdSql.execute(f'create table bound_test.sub1_bound using stb_bound tags ( 1 )')
593
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
594
            f"insert into bound_test.sub1_bound values ( now()-1s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
595 596
        )
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
597
            f"insert into bound_test.sub1_bound values ( now()-1s, -2147483647, -9223372036854775807, -32767, -127, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
598 599
        )
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
600
            f"insert into bound_test.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
601 602
        )
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
603
            f"insert into bound_test.sub1_bound values ( now(), -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
604 605
        )
        tdSql.error(
W
update  
wenzhouwww@live.cn 已提交
606
            f"insert into bound_test.sub1_bound values ( now()+1s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
607 608 609 610
        )

        # check basic elem for table per row
        tdSql.query(
W
update  
wenzhouwww@live.cn 已提交
611
            "select last(c1) ,last_row(c2), last_row(c3)+1 , last(c4)+1  from bound_test.sub1_bound ")
612 613 614 615 616 617
        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(
W
update  
wenzhouwww@live.cn 已提交
618
            "select last_row(c1+1) ,last_row(c2) , last(c3*1) , last(c4/2)  from bound_test.sub1_bound ")
619 620 621 622 623 624 625

    def test_tag_compute_for_scalar_function(self):

        tdSql.execute("use testdb")

        # bug need fix

G
Ganlin Zhao 已提交
626
        tdSql.query(" select sum(c1) from testdb.stb1 where t1+10 >1; ")
W
update  
wenzhouwww@live.cn 已提交
627
        tdSql.query("select c1 ,t1 from testdb.stb1 where t1 =0 ")
628
        tdSql.checkRows(13)
W
update  
wenzhouwww@live.cn 已提交
629
        tdSql.query("select last_row(c1,t1) from testdb.stb1 ")
630 631
        tdSql.checkData(0,0,None)
        tdSql.checkData(0,1,3)
W
update  
wenzhouwww@live.cn 已提交
632
        tdSql.query("select last_row(c1),t1 from testdb.stb1 ")
W
wenzhouwww@live.cn 已提交
633 634
        tdSql.checkData(0,0,None)
        tdSql.checkData(0,1,3)
W
update  
wenzhouwww@live.cn 已提交
635
        tdSql.query("select last_row(c1,t1),last(t1) from testdb.stb1 ")
636 637 638 639
        tdSql.checkData(0,0,None)
        tdSql.checkData(0,1,3)
        tdSql.checkData(0,2,3)

W
update  
wenzhouwww@live.cn 已提交
640
        tdSql.query("select last_row(t1) from testdb.stb1 where t1 >0 ")
641 642
        tdSql.checkRows(1)
        tdSql.checkData(0,0,3)
W
update  
wenzhouwww@live.cn 已提交
643
        tdSql.query("select last_row(t1) from testdb.stb1 where t1 =3 ")
644 645 646
        tdSql.checkRows(1)
        tdSql.checkData(0,0,3)

W
update  
wenzhouwww@live.cn 已提交
647
        tdSql.query("select last_row(t1) from testdb.stb1 where t1 =2")
648 649 650
        tdSql.checkRows(0)

        # nest query for last_row
W
update  
wenzhouwww@live.cn 已提交
651 652 653
        tdSql.query("select last_row(t1) from (select ts , c1 ,t1 from testdb.stb1)")
        tdSql.checkData(0,0,3)
        tdSql.query("select distinct(c1) ,t1 from testdb.stb1")
W
wenzhouwww@live.cn 已提交
654
        tdSql.checkRows(20)
W
update  
wenzhouwww@live.cn 已提交
655
        tdSql.query("select last_row(c1) from (select _rowts , c1 ,t1 from testdb.stb1)")
656 657
        tdSql.checkData(0,0,None)

W
update  
wenzhouwww@live.cn 已提交
658
        tdSql.query("select last_row(c1) from (select ts , c1 ,t1 from testdb.stb1)")
659 660
        tdSql.checkData(0,0,None)

W
update  
wenzhouwww@live.cn 已提交
661
        tdSql.query("select ts , last_row(c1) ,c1  from (select ts , c1 ,t1 from testdb.stb1)")
W
wenzhouwww@live.cn 已提交
662
        tdSql.checkData(0,1,None)
663

W
wenzhouwww@live.cn 已提交
664
        tdSql.query("select ts , last_row(c1) ,c1  from (select ts , max(c1) c1  ,t1 from testdb.stb1 where ts >now -1h and ts <now+1h interval(10s) fill(value ,10 ))")
665 666 667
        tdSql.checkData(0,1,10)
        tdSql.checkData(0,1,10)

W
wenzhouwww@live.cn 已提交
668
        tdSql.error("select ts , last_row(c1) ,c1  from (select count(c1) c1 from testdb.stb1 where ts >now -1h and ts <now+1h interval(10s) fill(value ,10 ))")
669

W
wenzhouwww@live.cn 已提交
670
        tdSql.error("select  last_row(c1) ,c1  from (select  count(c1) c1 from testdb.stb1 where ts >now -1h and ts <now+1h interval(10s) fill(value ,10 ))")
671

W
wenzhouwww@live.cn 已提交
672
        # tag filter with last_row function
W
wenzhouwww@live.cn 已提交
673 674 675
        tdSql.query("select last_row(t1) from testdb.stb1 where abs(t1)=1")
        tdSql.checkRows(0)
        tdSql.query("select last_row(t1) from testdb.stb1 where abs(t1)=0")
676
        tdSql.checkRows(1)
W
wenzhouwww@live.cn 已提交
677
        tdSql.query(" select last_row(t1),last_row(c1) from db.ct1 where abs(c1+t1)=1")
678 679
        tdSql.checkRows(1)
        tdSql.checkData(0,0,1)
W
wenzhouwww@live.cn 已提交
680
        tdSql.checkData(0,1,0)
681 682

        tdSql.query(
W
update  
wenzhouwww@live.cn 已提交
683
            "select last_row(c1+t1)*t1 from testdb.stb1 where abs(c1)/floor(abs(ceil(t1))) ==1")
684 685 686

    def group_test(self):
        tdSql.execute(" use testdb ")
W
update  
wenzhouwww@live.cn 已提交
687
        tdSql.query(" select last_row(c1) from testdb.stb1 group by t1 order by t1 ")
688
        tdSql.checkRows(2)
G
Ganlin Zhao 已提交
689 690

        # bug need fix
W
wenzhouwww@live.cn 已提交
691 692 693 694 695 696 697
        tdSql.query("select last_row(c1) from testdb.stb1 group by c1 order by c1,t1 ")
        tdSql.checkRows(10)
        tdSql.checkData(9,0,8)
        tdSql.query("select last_row(c1) from db.stb1 group by c1 order by t1 ")
        tdSql.checkRows(10)
        tdSql.checkData(0,0,4)

W
update  
wenzhouwww@live.cn 已提交
698
        tdSql.query("select last_row(c1) from testdb.stb1 group by c1 order by t1")
W
wenzhouwww@live.cn 已提交
699 700
        tdSql.checkRows(11)

W
update  
wenzhouwww@live.cn 已提交
701
        tdSql.query("select last_row(c1) from testdb.stb1 group by c1 order by c1,t1;")
W
wenzhouwww@live.cn 已提交
702 703
        tdSql.checkRows(11)
        tdSql.checkData(10,0,9)
704

G
Ganlin Zhao 已提交
705
        # bug need fix , result is error
W
update  
wenzhouwww@live.cn 已提交
706 707
        tdSql.query("select last_row(c1) from testdb.ct4 group by c1 order by t1 ")
        tdSql.query("select last_row(t1) from testdb.ct4 group by c1 order by t1 ")
708

W
update  
wenzhouwww@live.cn 已提交
709
        tdSql.query("select last_row(t1) from testdb.stb1 group by t1 order by t1 ")
710
        tdSql.checkRows(2)
W
update  
wenzhouwww@live.cn 已提交
711
        tdSql.query("select last_row(c1) from testdb.stb1 group by c1 order by c1 ")
712 713 714 715
        tdSql.checkRows(11)
        tdSql.checkData(0,0,None)
        tdSql.checkData(10,0,9)

W
update  
wenzhouwww@live.cn 已提交
716
        tdSql.query("select ceil(abs(last_row(abs(c1)))) from testdb.stb1 group by abs(c1) order by abs(c1);")
717 718 719
        tdSql.checkRows(11)
        tdSql.checkData(0,0,None)
        tdSql.checkData(10,0,9)
W
update  
wenzhouwww@live.cn 已提交
720
        tdSql.query("select last_row(c1+c3) from testdb.stb1 group by abs(c1+c3) order by abs(c1+c3)")
721 722
        tdSql.checkRows(11)

G
Ganlin Zhao 已提交
723
        # bug need fix , taosd crash
W
update  
wenzhouwww@live.cn 已提交
724
        tdSql.query("select last_row(c1+c3)+c2 from testdb.stb1 group by abs(c1+c3)+c2 order by abs(c1+c3)+c2")
725
        tdSql.checkRows(11)
W
update  
wenzhouwww@live.cn 已提交
726
        tdSql.query("select last_row(c1+c3)+last_row(c2) from testdb.stb1 group by abs(c1+c3)+abs(c2) order by abs(c1+c3)+abs(c2)")
727
        tdSql.checkRows(11)
W
wenzhouwww@live.cn 已提交
728 729
        tdSql.checkData(0,0,None)
        tdSql.checkData(2,0,11223.000000000)
G
Ganlin Zhao 已提交
730

W
update  
wenzhouwww@live.cn 已提交
731
        tdSql.query("select last_row(t1) from testdb.stb1 where abs(c1+t1)=1 partition by tbname")
W
wenzhouwww@live.cn 已提交
732
        tdSql.checkData(0,0,1)
G
Ganlin Zhao 已提交
733

W
update  
wenzhouwww@live.cn 已提交
734
        tdSql.query("select tbname , last_row(c1) from testdb.stb1 partition by tbname order by tbname")
W
wenzhouwww@live.cn 已提交
735 736 737 738 739
        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 已提交
740

W
update  
wenzhouwww@live.cn 已提交
741
        tdSql.query("select tbname , last_row(c1) from testdb.stb1 partition by t1 order by t1")
W
wenzhouwww@live.cn 已提交
742 743 744 745 746
        tdSql.checkRows(2)
        tdSql.checkData(0, 0, 'ct1')
        tdSql.checkData(0, 1,  9)
        tdSql.checkData(0, 2, 'ct4')
        tdSql.checkData(0, 3, None)
747

G
Ganlin Zhao 已提交
748
        # bug need fix
W
update  
wenzhouwww@live.cn 已提交
749
        tdSql.query("select tbname , last_row(c1) from testdb.stb1 partition by c2 order by c1")
W
wenzhouwww@live.cn 已提交
750 751
        tdSql.checkRows(11)
        tdSql.checkData(10,1,9)
752

W
update  
wenzhouwww@live.cn 已提交
753
        tdSql.query("select tbname , last_row(c1) from testdb.stb1 partition by c2 order by c2")
W
wenzhouwww@live.cn 已提交
754 755
        tdSql.checkRows(11)
        tdSql.checkData(10,1,88888)
756

W
update  
wenzhouwww@live.cn 已提交
757
        tdSql.query("select tbname , last_row(t1) from testdb.stb1 partition by c2 order by t1")
W
wenzhouwww@live.cn 已提交
758
        tdSql.checkRows(11)
759

W
update  
wenzhouwww@live.cn 已提交
760
        tdSql.query("select abs(c1) ,c2 ,t1, last_row(t1) from testdb.stb1 partition by c2 order by t1")
W
wenzhouwww@live.cn 已提交
761
        tdSql.checkRows(11)
G
Ganlin Zhao 已提交
762

W
update  
wenzhouwww@live.cn 已提交
763
        tdSql.query("select t1 ,last_row(t1) ,c2 from testdb.stb1 partition by c2 order by t1")
W
wenzhouwww@live.cn 已提交
764
        tdSql.checkRows(11)
765

W
update  
wenzhouwww@live.cn 已提交
766
        tdSql.query("select last_row(t1) ,last_row(t1) ,last_row(c2) from testdb.stb1 partition by c2 order by c2")
W
wenzhouwww@live.cn 已提交
767
        tdSql.checkRows(11)
768

W
update  
wenzhouwww@live.cn 已提交
769
        tdSql.query("select abs(c1) , last_row(t1) ,c2 from testdb.stb1 partition by tbname order by tbname")
W
wenzhouwww@live.cn 已提交
770
        tdSql.checkRows(2)
771

W
update  
wenzhouwww@live.cn 已提交
772
        tdSql.query("select last_row(c1) , ceil(t1) ,c2 from testdb.stb1 partition by t1 order by t1")
W
wenzhouwww@live.cn 已提交
773
        tdSql.checkRows(2)
774

W
update  
wenzhouwww@live.cn 已提交
775
        tdSql.query("select last_row(c1) , abs(t1) ,c2 from testdb.stb1 partition by abs(c1) order by abs(c1)")
W
wenzhouwww@live.cn 已提交
776
        tdSql.checkRows(11)
777

W
update  
wenzhouwww@live.cn 已提交
778
        tdSql.query("select abs(last_row(c1)) , abs(floor(t1)) ,floor(c2) from testdb.stb1 partition by abs(floor(c1)) order by abs(c1)")
W
wenzhouwww@live.cn 已提交
779
        tdSql.checkRows(11)
780

W
update  
wenzhouwww@live.cn 已提交
781
        tdSql.query("select last_row(ceil(c1-2)) , abs(floor(t1+1)) ,floor(c2-c1) from testdb.stb1 partition by abs(floor(c1)) order by abs(c1)")
W
wenzhouwww@live.cn 已提交
782
        tdSql.checkRows(11)
783

784

785 786 787
        tdSql.query("select max(c1) from stb1 interval(50s) sliding(30s)")
        tdSql.checkRows(13)

W
wenzhouwww@live.cn 已提交
788 789
        tdSql.query("select unique(c1) from stb1 partition by tbname")

G
Ganlin Zhao 已提交
790
        # interval
791

W
update  
wenzhouwww@live.cn 已提交
792
        tdSql.query("select last_row(c1) from testdb.stb1 interval(50s) sliding(30s)")
W
wenzhouwww@live.cn 已提交
793
        tdSql.checkRows(27)
794 795


W
update  
wenzhouwww@live.cn 已提交
796
        tdSql.query("select last_row(c1) from testdb.ct1 interval(50s) sliding(30s)")
797
        tdSql.checkRows(5)
W
wenzhouwww@live.cn 已提交
798
        last_row_result = tdSql.queryResult
W
update  
wenzhouwww@live.cn 已提交
799
        tdSql.query("select last(c1) from testdb.ct1 interval(50s) sliding(30s)")
W
wenzhouwww@live.cn 已提交
800 801
        for ind , row in enumerate(last_row_result):
            tdSql.checkData(ind , 0 , row[0])
802

W
wenzhouwww@live.cn 已提交
803
        # bug need fix
W
update  
wenzhouwww@live.cn 已提交
804
        tdSql.query('select max(c1) from testdb.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 已提交
805 806 807
        tdSql.checkRows(8)
        tdSql.checkData(7,0,None)

W
update  
wenzhouwww@live.cn 已提交
808
        tdSql.query('select last_row(c1) from testdb.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 已提交
809 810 811
        tdSql.checkRows(8)
        tdSql.checkData(7,0,2)

W
update  
wenzhouwww@live.cn 已提交
812 813
        tdSql.query('select last_row(c1) from testdb.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('select last_row(c1) from (select ts ,  c1  from testdb.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 已提交
814

G
Ganlin Zhao 已提交
815
        # join
W
wenzhouwww@live.cn 已提交
816 817 818 819 820
        tdSql.query("use test")
        tdSql.query("select last(sub_tb_1.c1), last(sub_tb_2.c2) from sub_tb_1, sub_tb_2 where sub_tb_1.ts=sub_tb_2.ts")
        tdSql.checkCols(2)
        last_row_result = tdSql.queryResult
        tdSql.query("select last_row(sub_tb_1.c1), last_row(sub_tb_2.c2) from sub_tb_1, sub_tb_2 where sub_tb_1.ts=sub_tb_2.ts")
G
Ganlin Zhao 已提交
821

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

W
wenzhouwww@live.cn 已提交
825
        tdSql.query("select last(*), last(*) from sub_tb_1, sub_tb_2 where sub_tb_1.ts=sub_tb_2.ts")
826

W
wenzhouwww@live.cn 已提交
827 828 829 830
        last_row_result = tdSql.queryResult
        tdSql.query("select last_row(*), last_row(*) from sub_tb_1, sub_tb_2 where sub_tb_1.ts=sub_tb_2.ts")
        for ind , row in enumerate(last_row_result):
            tdSql.checkData(ind , 0 , row[0])
831

W
update  
wenzhouwww@live.cn 已提交
832 833 834
        tdSql.query("select last(*), last_row(*) from sub_tb_1, sub_tb_2 where sub_tb_1.ts=sub_tb_2.ts")
        for ind , row in enumerate(last_row_result):
            tdSql.checkData(ind , 0 , row[0])
835

W
update  
wenzhouwww@live.cn 已提交
836 837 838
        tdSql.query("select last_row(*), last(*) from sub_tb_1, sub_tb_2 where sub_tb_1.ts=sub_tb_2.ts")
        for ind , row in enumerate(last_row_result):
            tdSql.checkData(ind , 0 , row[0])
G
Ganlin Zhao 已提交
839

840 841 842

    def support_super_table_test(self):
        tdSql.execute(" use testdb ")
W
update  
wenzhouwww@live.cn 已提交
843 844 845 846 847 848 849 850 851
        self.check_result_auto( " select c1 from testdb.stb1 order by ts " , "select abs(c1) from testdb.stb1 order by ts" )
        self.check_result_auto( " select c1 from testdb.stb1 order by tbname " , "select abs(c1) from testdb.stb1 order by tbname" )
        self.check_result_auto( " select c1 from testdb.stb1 where c1 > 0 order by tbname  " , "select abs(c1) from testdb.stb1 where c1 > 0 order by tbname" )
        self.check_result_auto( " select c1 from testdb.stb1 where c1 > 0 order by tbname  " , "select abs(c1) from testdb.stb1 where c1 > 0 order by tbname" )

        self.check_result_auto( " select t1,c1 from testdb.stb1 order by ts " , "select t1, abs(c1) from testdb.stb1 order by ts" )
        self.check_result_auto( " select t2,c1 from testdb.stb1 order by tbname " , "select t2 ,abs(c1) from testdb.stb1 order by tbname" )
        self.check_result_auto( " select t3,c1 from testdb.stb1 where c1 > 0 order by tbname  " , "select t3 ,abs(c1) from testdb.stb1 where c1 > 0 order by tbname" )
        self.check_result_auto( " select t4,c1 from testdb.stb1 where c1 > 0 order by tbname  " , "select t4 , abs(c1) from testdb.stb1 where c1 > 0 order by tbname" )
852
        pass
G
Ganlin Zhao 已提交
853

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

856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886
        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 已提交
887 888 889 890 891 892
    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 已提交
893 894 895
        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 已提交
896 897
        self.basic_query()

G
Ganlin Zhao 已提交
898
        # cache_last 1
W
wenzhouwww@live.cn 已提交
899 900 901
        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 已提交
902 903
        self.basic_query()

G
Ganlin Zhao 已提交
904
        # cache_last 2
W
wenzhouwww@live.cn 已提交
905 906 907
        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 已提交
908 909
        self.basic_query()

G
Ganlin Zhao 已提交
910
        # cache_last 3
W
wenzhouwww@live.cn 已提交
911 912 913
        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 已提交
914 915 916
        self.basic_query()


917 918 919 920 921 922 923
    def stop(self):
        tdSql.close()
        tdLog.success(f"{__file__} successfully executed")


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