last_row.py 39.0 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 51 52 53 54 55 56 57 58 59
            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})")
        
        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 64 65
                if coltype[1] in support_types:
                    self.check_result_auto(origin_sql , abs_sql)
                    

W
wenzhouwww@live.cn 已提交
66 67
    def prepare_datas(self ,cache_value):
        tdSql.execute("drop database if exists db ")
W
wenzhouwww@live.cn 已提交
68
        create_db_sql = f"create database if not exists db keep 3650 duration 1000 cachemodel {cache_value}"
W
wenzhouwww@live.cn 已提交
69
        tdSql.execute(create_db_sql)
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 131
        # prepare datas
        tdSql.execute(
W
wenzhouwww@live.cn 已提交
132
            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 223
            ( '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")

        # bug need fix 
W
update  
wenzhouwww@live.cn 已提交
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 231 232 233 234 235 236 237 238 239 240 241
            "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",
            "select last_row(c1 ,NULL) from testdb.t1",
            "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",
            "select last_row(c1 ,NULL) from testdb.stb1",
            "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 249 250 251 252 253 254 255 256
        ]
        for error_sql in error_sql_lists:
            tdSql.error(error_sql)

    def support_types(self):
        tdSql.execute("use testdb")
        tbnames = ["stb1", "t1", "ct1", "ct2"]
        
        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 259 260 261 262 263
                    tdSql.query(abs_sql)
                

    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 286

        # used for regular table

        # 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 293 294
        tdSql.checkData(0, 0, None)

        # # bug need fix 
W
update  
wenzhouwww@live.cn 已提交
295
        tdSql.query("select last_row(c1), c2, c3 , c4, c5 from testdb.t1")
296 297 298 299 300
        tdSql.checkData(0, 0, None)
        tdSql.checkData(0, 1, None)
        tdSql.checkData(0, 2, None)

        # # bug need fix 
W
update  
wenzhouwww@live.cn 已提交
301
        tdSql.query("select last_row(c1), c2, c3 , c4, c5 from testdb.ct1")
302 303 304 305 306 307 308
        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)
        
        # bug need fix 
W
update  
wenzhouwww@live.cn 已提交
309
        tdSql.query("select last_row(c1), c2, c3 , c4, c5 from testdb.stb1 where tbname='ct1'")
W
wenzhouwww@live.cn 已提交
310 311 312 313 314
        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)
315 316

        # bug fix 
W
update  
wenzhouwww@live.cn 已提交
317
        tdSql.query("select last_row(abs(c1)) from testdb.ct1")
318 319 320
        tdSql.checkData(0,0,9)

        # # bug fix 
W
update  
wenzhouwww@live.cn 已提交
321 322 323
        tdSql.query("select last_row(c1+1) from testdb.ct1")
        tdSql.query("select last_row(c1+1) from testdb.stb1") 
        tdSql.query("select last_row(c1+1) from testdb.t1")      
324 325

        # used for stable table
W
update  
wenzhouwww@live.cn 已提交
326
        tdSql.query("select last_row(c1 ,c2 ,c3) ,last_row(c4) from testdb.ct1")
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,None)

        # bug need fix 
W
update  
wenzhouwww@live.cn 已提交
333
        tdSql.query("select last_row(c1 ,c2 ,c3) from testdb.stb1 ")
334 335 336 337
        tdSql.checkData(0,0,None)
        tdSql.checkData(0,1,None)
        tdSql.checkData(0,2,None)

W
wenzhouwww@live.cn 已提交
338
        # tdSql.query("select last_row(c1 ,c2 ,c3) ,last_row(c4) from stb1 where ts <now-1d")
339 340 341 342 343
        # tdSql.checkData(0,0,9)
        # tdSql.checkData(0,1,-99999)
        # tdSql.checkData(0,2,-999)
        # tdSql.checkData(0,3,None)

W
wenzhouwww@live.cn 已提交
344
        # tdSql.query("select last_row(c1 ,c2 ,c3 ,c4) ,last(c4) from stb1 where ts <now-1d")
345 346 347 348 349 350 351
        # tdSql.checkData(0,0,9)
        # tdSql.checkData(0,1,-99999)
        # tdSql.checkData(0,2,-999)
        # tdSql.checkData(0,3,None)
        # tdSql.checkData(0,4,-99)

        # bug need fix 
W
update  
wenzhouwww@live.cn 已提交
352
        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 已提交
353 354
        tdSql.checkData(0,0,16.000000000)
        tdSql.checkData(0,1,-101.000000000)
355

W
update  
wenzhouwww@live.cn 已提交
356
        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 已提交
357 358
        tdSql.checkData(0,0,16.000000000)
        tdSql.checkData(0,1,-101.000000000)
359

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

W
update  
wenzhouwww@live.cn 已提交
363
        tdSql.query("select last_row(ceil(c1+2)+floor(c1)-10) from testdb.ct1")
364 365 366 367 368
        tdSql.checkData(0,0,10.000000000)

        # filter for last_row

        # bug need fix 
W
update  
wenzhouwww@live.cn 已提交
369
        # tdSql.query("select last_row(ts ,c1 ) from testdb.stb1 where ts < now-1d ")
370 371
        # tdSql.checkData(0,1,9)

W
update  
wenzhouwww@live.cn 已提交
372
        # tdSql.query("select last_row(ts ,c1 ) from testdb.ct4 where ts < now-1d ")
373 374 375 376
        # tdSql.checkData(0,1,9)

        # bug need fix for all function

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

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

W
update  
wenzhouwww@live.cn 已提交
383
        tdSql.query("select last_row(c1) ,last(c1)  from testdb.stb1 where  c1 is null")
W
wenzhouwww@live.cn 已提交
384 385 386 387
        tdSql.checkRows(1)
        tdSql.checkData(0,0,None)
        tdSql.checkData(0,1,None)

W
update  
wenzhouwww@live.cn 已提交
388
        tdSql.query("select last_row(c1) ,count(*)  from testdb.stb1 where  c1 is null")
W
wenzhouwww@live.cn 已提交
389 390 391
        tdSql.checkData(0,0,None)
        tdSql.checkData(0,1,3)
        
W
update  
wenzhouwww@live.cn 已提交
392
        tdSql.query("select last_row(c1) ,count(c1)  from testdb.stb1 where  c1 is null")
W
wenzhouwww@live.cn 已提交
393 394 395
        tdSql.checkData(0,0,None)
        tdSql.checkData(0,1,0)

396
        # bug need fix
W
update  
wenzhouwww@live.cn 已提交
397
        tdSql.query("select tbname ,last_row(c1) from testdb.stb1")
W
wenzhouwww@live.cn 已提交
398 399
        tdSql.checkData(0,0,'ct4')
        tdSql.checkData(0,1,None)
400
        
W
update  
wenzhouwww@live.cn 已提交
401
        tdSql.query(" select tbname ,last_row(c1) from testdb.stb1 partition by tbname order by tbname ")
W
wenzhouwww@live.cn 已提交
402 403 404 405
        tdSql.checkData(0,0,'ct1')
        tdSql.checkData(0,1,9)
        tdSql.checkData(1,0,'ct4')
        tdSql.checkData(1,1,None)
406

W
update  
wenzhouwww@live.cn 已提交
407
        tdSql.query(" select tbname ,last_row(c1) from testdb.stb1 group by tbname order by tbname ")
408 409 410 411 412
        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 已提交
413
        tdSql.query(" select t1 ,count(c1) from testdb.stb1 partition by t1 ")
414 415 416
        tdSql.checkRows(2)

        # filter by tbname 
W
update  
wenzhouwww@live.cn 已提交
417
        tdSql.query("select last_row(c1) from testdb.stb1 where tbname = 'ct1' ")
W
wenzhouwww@live.cn 已提交
418
        tdSql.checkData(0,0,9)
419 420

        # bug need fix 
W
update  
wenzhouwww@live.cn 已提交
421
        tdSql.query("select tbname ,last_row(c1) from testdb.stb1 where tbname = 'ct1' ")
W
wenzhouwww@live.cn 已提交
422
        tdSql.checkData(0,1,9)
W
update  
wenzhouwww@live.cn 已提交
423
        tdSql.query("select tbname ,last_row(c1) from testdb.stb1 partition by tbname order by tbname")
W
wenzhouwww@live.cn 已提交
424 425 426 427
        tdSql.checkData(0, 0, 'ct1')
        tdSql.checkData(0, 1, 9)
        tdSql.checkData(1, 0, 'ct4')
        tdSql.checkData(1, 1, None)
428

W
update  
wenzhouwww@live.cn 已提交
429
        tdSql.query("select tbname ,last_row(c1) from testdb.stb1 group by tbname order by tbname")
430 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)

        # last_row for only tag
W
update  
wenzhouwww@live.cn 已提交
436
        tdSql.query("select last_row(t1 ,t2 ,t3 , t4 ) from testdb.stb1")
437 438 439 440 441
        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 已提交
442
        tdSql.query("select last_row(abs(floor(t1)) ,t2 ,ceil(abs(t3)) , abs(ceil(t4)) ) from testdb.stb1")
443 444 445 446 447 448
        tdSql.checkData(0,0,3)
        tdSql.checkData(0,1,33333)
        tdSql.checkData(0,2,333)
        tdSql.checkData(0,3,3)

        # filter by tag 
W
wenzhouwww@live.cn 已提交
449 450
        tdSql.query("select tbname ,last_row(c1) from testdb.stb1 where t1 =0 ")
        tdSql.checkData(0,1,9)
W
update  
wenzhouwww@live.cn 已提交
451
        tdSql.query("select tbname ,last_row(c1) ,t1 from testdb.stb1 partition by t1 order by t1")
W
wenzhouwww@live.cn 已提交
452 453 454 455
        tdSql.checkData(0, 0, 'ct1')
        tdSql.checkData(0, 1, 9)
        tdSql.checkData(1, 0, 'ct4')
        tdSql.checkData(1, 1, None)
456 457 458

        # filter by col 

W
update  
wenzhouwww@live.cn 已提交
459
        tdSql.query("select tbname ,last_row(c1),abs(c1)from testdb.stb1 where c1 =1;")
W
wenzhouwww@live.cn 已提交
460 461 462
        tdSql.checkData(0, 0, 'ct1')
        tdSql.checkData(0, 1, 1)
        tdSql.checkData(0, 2, 1)
W
update  
wenzhouwww@live.cn 已提交
463
        tdSql.query("select last_row(c1) from testdb.stb1 where abs(ceil(c1))*c1==1")
464 465 466
        tdSql.checkData(0,0,1)
    
        # mix with common functions
W
update  
wenzhouwww@live.cn 已提交
467
        tdSql.query("select last_row(*) ,last(*) from testdb.stb1  ")
468 469
        tdSql.checkRows(1)

W
update  
wenzhouwww@live.cn 已提交
470
        tdSql.query("select last_row(*) ,last(*) from testdb.stb1  ")
471 472 473
        tdSql.checkRows(1)


W
update  
wenzhouwww@live.cn 已提交
474 475
        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")
476 477

        # # bug need fix ,taosd crash 
W
update  
wenzhouwww@live.cn 已提交
478 479
        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(*)")
480 481

        # mix with agg functions 
W
update  
wenzhouwww@live.cn 已提交
482 483 484 485 486 487
        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 ")
488 489 490

        # agg functions mix with agg functions

W
update  
wenzhouwww@live.cn 已提交
491 492
        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")
493 494

        # bug fix for compute
W
update  
wenzhouwww@live.cn 已提交
495
        tdSql.query("select  last_row(c1) -0 ,last(c1)-0 ,last(c1)+last_row(c1) from testdb.ct4 ")
W
wenzhouwww@live.cn 已提交
496
        tdSql.checkData(0,0,None)
W
wenzhouwww@live.cn 已提交
497
        tdSql.checkData(0,1,0.000000000)
W
wenzhouwww@live.cn 已提交
498 499
        tdSql.checkData(0,2,None)

W
update  
wenzhouwww@live.cn 已提交
500
        tdSql.query(" select c1, abs(c1) -0 ,last_row(c1-0.1)-0.1 from testdb.ct1")
W
wenzhouwww@live.cn 已提交
501 502 503
        tdSql.checkData(0,0,9)
        tdSql.checkData(0,1,9.000000000)
        tdSql.checkData(0,2,8.800000000)
504 505 506 507

    def abs_func_filter(self):
        tdSql.execute("use db")
        tdSql.query(
W
update  
wenzhouwww@live.cn 已提交
508
            "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 ")
509 510 511 512 513 514 515
        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 已提交
516
            "select last_row(c1,c2,c1+5) from db.ct4 where c1=5 ")
517 518 519 520 521
        tdSql.checkData(0, 0, 5)
        tdSql.checkData(0, 1, 55555)
        tdSql.checkData(0, 2, 10.000000000)

        tdSql.query(
W
update  
wenzhouwww@live.cn 已提交
522
            "select last(c1,c2,c1+5) from db.ct4 where c1=5 ")
523 524 525 526 527
        tdSql.checkData(0, 0, 5)
        tdSql.checkData(0, 1, 55555)
        tdSql.checkData(0, 2, 10.000000000)

        tdSql.query(
W
update  
wenzhouwww@live.cn 已提交
528
            "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 ")
529 530 531 532 533 534 535 536 537 538 539 540 541 542
        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 已提交
543
        tdSql.execute("create database if not exists bound_test cachemodel 'LAST_ROW' ")
544 545 546
        time.sleep(3)
        tdSql.execute("use bound_test")
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
547
            "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);"
548
        )
W
update  
wenzhouwww@live.cn 已提交
549
        tdSql.execute(f'create table bound_test.sub1_bound using stb_bound tags ( 1 )')
550
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
551
            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() )"
552 553
        )
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
554
            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() )"
555 556
        )
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
557
            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() )"
558 559
        )
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
560
            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() )"
561 562
        )
        tdSql.error(
W
update  
wenzhouwww@live.cn 已提交
563
            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() )"
564 565 566 567
        )

        # check basic elem for table per row
        tdSql.query(
W
update  
wenzhouwww@live.cn 已提交
568
            "select last(c1) ,last_row(c2), last_row(c3)+1 , last(c4)+1  from bound_test.sub1_bound ")
569 570 571 572 573 574
        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 已提交
575
            "select last_row(c1+1) ,last_row(c2) , last(c3*1) , last(c4/2)  from bound_test.sub1_bound ")
576 577 578 579 580 581 582

    def test_tag_compute_for_scalar_function(self):

        tdSql.execute("use testdb")

        # bug need fix

W
update  
wenzhouwww@live.cn 已提交
583 584
        tdSql.query(" select sum(c1) from testdb.stb1 where t1+10 >1; ")  
        tdSql.query("select c1 ,t1 from testdb.stb1 where t1 =0 ")
585
        tdSql.checkRows(13)
W
update  
wenzhouwww@live.cn 已提交
586
        tdSql.query("select last_row(c1,t1) from testdb.stb1 ")
587 588
        tdSql.checkData(0,0,None)
        tdSql.checkData(0,1,3)
W
update  
wenzhouwww@live.cn 已提交
589
        tdSql.query("select last_row(c1),t1 from testdb.stb1 ")
W
wenzhouwww@live.cn 已提交
590 591
        tdSql.checkData(0,0,None)
        tdSql.checkData(0,1,3)
W
update  
wenzhouwww@live.cn 已提交
592
        tdSql.query("select last_row(c1,t1),last(t1) from testdb.stb1 ")
593 594 595 596
        tdSql.checkData(0,0,None)
        tdSql.checkData(0,1,3)
        tdSql.checkData(0,2,3)

W
update  
wenzhouwww@live.cn 已提交
597
        tdSql.query("select last_row(t1) from testdb.stb1 where t1 >0 ")
598 599
        tdSql.checkRows(1)
        tdSql.checkData(0,0,3)
W
update  
wenzhouwww@live.cn 已提交
600
        tdSql.query("select last_row(t1) from testdb.stb1 where t1 =3 ")
601 602 603
        tdSql.checkRows(1)
        tdSql.checkData(0,0,3)

W
update  
wenzhouwww@live.cn 已提交
604
        tdSql.query("select last_row(t1) from testdb.stb1 where t1 =2")
605 606 607
        tdSql.checkRows(0)

        # nest query for last_row
W
update  
wenzhouwww@live.cn 已提交
608 609 610
        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 已提交
611
        tdSql.checkRows(20)
W
update  
wenzhouwww@live.cn 已提交
612
        tdSql.query("select last_row(c1) from (select _rowts , c1 ,t1 from testdb.stb1)")
W
wenzhouwww@live.cn 已提交
613
        tdSql.checkData(0,0,None)
614

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

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

W
update  
wenzhouwww@live.cn 已提交
621
        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 interval(10s) fill(value ,10 ))")
W
wenzhouwww@live.cn 已提交
622 623
        tdSql.checkData(0,1,10)
        tdSql.checkData(0,1,10)
624

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

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

W
wenzhouwww@live.cn 已提交
629
        # tag filter with last_row function
W
wenzhouwww@live.cn 已提交
630 631 632
        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")
633
        tdSql.checkRows(1)
W
wenzhouwww@live.cn 已提交
634
        tdSql.query(" select last_row(t1),last_row(c1) from db.ct1 where abs(c1+t1)=1")
635 636
        tdSql.checkRows(1)
        tdSql.checkData(0,0,1)
W
wenzhouwww@live.cn 已提交
637
        tdSql.checkData(0,1,0)
638 639

        tdSql.query(
W
update  
wenzhouwww@live.cn 已提交
640
            "select last_row(c1+t1)*t1 from testdb.stb1 where abs(c1)/floor(abs(ceil(t1))) ==1")
641 642 643

    def group_test(self):
        tdSql.execute(" use testdb ")
W
update  
wenzhouwww@live.cn 已提交
644
        tdSql.query(" select last_row(c1) from testdb.stb1 group by t1 order by t1 ")
645 646 647
        tdSql.checkRows(2)
        
        # bug need fix 
W
wenzhouwww@live.cn 已提交
648 649 650 651 652 653 654
        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 已提交
655
        tdSql.query("select last_row(c1) from testdb.stb1 group by c1 order by t1")
W
wenzhouwww@live.cn 已提交
656 657
        tdSql.checkRows(11)

W
update  
wenzhouwww@live.cn 已提交
658
        tdSql.query("select last_row(c1) from testdb.stb1 group by c1 order by c1,t1;")
W
wenzhouwww@live.cn 已提交
659 660
        tdSql.checkRows(11)
        tdSql.checkData(10,0,9)
661 662

        # bug need fix , result is error 
W
update  
wenzhouwww@live.cn 已提交
663 664
        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 ")
665

W
update  
wenzhouwww@live.cn 已提交
666
        tdSql.query("select last_row(t1) from testdb.stb1 group by t1 order by t1 ")
667
        tdSql.checkRows(2)
W
update  
wenzhouwww@live.cn 已提交
668
        tdSql.query("select last_row(c1) from testdb.stb1 group by c1 order by c1 ")
669 670 671 672
        tdSql.checkRows(11)
        tdSql.checkData(0,0,None)
        tdSql.checkData(10,0,9)

W
update  
wenzhouwww@live.cn 已提交
673
        tdSql.query("select ceil(abs(last_row(abs(c1)))) from testdb.stb1 group by abs(c1) order by abs(c1);")
674 675 676
        tdSql.checkRows(11)
        tdSql.checkData(0,0,None)
        tdSql.checkData(10,0,9)
W
update  
wenzhouwww@live.cn 已提交
677
        tdSql.query("select last_row(c1+c3) from testdb.stb1 group by abs(c1+c3) order by abs(c1+c3)")
678 679 680
        tdSql.checkRows(11)

        # bug need fix , taosd crash 
W
update  
wenzhouwww@live.cn 已提交
681
        tdSql.query("select last_row(c1+c3)+c2 from testdb.stb1 group by abs(c1+c3)+c2 order by abs(c1+c3)+c2")
682
        tdSql.checkRows(11)
W
update  
wenzhouwww@live.cn 已提交
683
        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)")
684
        tdSql.checkRows(11)
W
wenzhouwww@live.cn 已提交
685 686
        tdSql.checkData(0,0,None)
        tdSql.checkData(2,0,11223.000000000)
687
        
W
update  
wenzhouwww@live.cn 已提交
688
        tdSql.query("select last_row(t1) from testdb.stb1 where abs(c1+t1)=1 partition by tbname")
W
wenzhouwww@live.cn 已提交
689
        tdSql.checkData(0,0,1)
690
        
W
update  
wenzhouwww@live.cn 已提交
691
        tdSql.query("select tbname , last_row(c1) from testdb.stb1 partition by tbname order by tbname")
W
wenzhouwww@live.cn 已提交
692 693 694 695 696
        tdSql.checkRows(2)
        tdSql.checkData(0, 0, 'ct1')
        tdSql.checkData(0, 1,  9)
        tdSql.checkData(0, 2, 'ct4')
        tdSql.checkData(0, 3, None)
697
        
W
update  
wenzhouwww@live.cn 已提交
698
        tdSql.query("select tbname , last_row(c1) from testdb.stb1 partition by t1 order by t1")
W
wenzhouwww@live.cn 已提交
699 700 701 702 703
        tdSql.checkRows(2)
        tdSql.checkData(0, 0, 'ct1')
        tdSql.checkData(0, 1,  9)
        tdSql.checkData(0, 2, 'ct4')
        tdSql.checkData(0, 3, None)
704

W
wenzhouwww@live.cn 已提交
705
        # bug need fix 
W
update  
wenzhouwww@live.cn 已提交
706
        tdSql.query("select tbname , last_row(c1) from testdb.stb1 partition by c2 order by c1")
W
wenzhouwww@live.cn 已提交
707 708
        tdSql.checkRows(11)
        tdSql.checkData(10,1,9)
709

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

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

W
update  
wenzhouwww@live.cn 已提交
717
        tdSql.query("select abs(c1) ,c2 ,t1, last_row(t1) from testdb.stb1 partition by c2 order by t1")
W
wenzhouwww@live.cn 已提交
718 719
        tdSql.checkRows(11)
   
W
update  
wenzhouwww@live.cn 已提交
720
        tdSql.query("select t1 ,last_row(t1) ,c2 from testdb.stb1 partition by c2 order by t1")
W
wenzhouwww@live.cn 已提交
721
        tdSql.checkRows(11)
722

W
update  
wenzhouwww@live.cn 已提交
723
        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 已提交
724
        tdSql.checkRows(11)
725

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

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

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

W
update  
wenzhouwww@live.cn 已提交
735
        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 已提交
736
        tdSql.checkRows(11)
737

W
update  
wenzhouwww@live.cn 已提交
738
        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 已提交
739
        tdSql.checkRows(11)
740 741

        # interval 
W
update  
wenzhouwww@live.cn 已提交
742
        tdSql.query("select last_row(c1) from testdb.stb1 interval(50s) sliding(30s)")
W
wenzhouwww@live.cn 已提交
743 744
        tdSql.checkRows(27)

W
update  
wenzhouwww@live.cn 已提交
745
        tdSql.query("select last_row(c1) from testdb.ct1 interval(50s) sliding(30s)")
746
        tdSql.checkRows(5)
W
wenzhouwww@live.cn 已提交
747
        last_row_result = tdSql.queryResult
W
update  
wenzhouwww@live.cn 已提交
748
        tdSql.query("select last(c1) from testdb.ct1 interval(50s) sliding(30s)")
W
wenzhouwww@live.cn 已提交
749 750
        for ind , row in enumerate(last_row_result):
            tdSql.checkData(ind , 0 , row[0])
751

W
wenzhouwww@live.cn 已提交
752
        # bug need fix
W
update  
wenzhouwww@live.cn 已提交
753
        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 已提交
754 755 756
        tdSql.checkRows(8)
        tdSql.checkData(7,0,None)

W
update  
wenzhouwww@live.cn 已提交
757
        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 已提交
758 759 760
        tdSql.checkRows(8)
        tdSql.checkData(7,0,2)

W
update  
wenzhouwww@live.cn 已提交
761 762
        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 已提交
763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779

        # join 
        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")
        
        for ind , row in enumerate(last_row_result):
            tdSql.checkData(ind , 0 , row[0])

        tdSql.query("select last(*), last(*) from sub_tb_1, sub_tb_2 where sub_tb_1.ts=sub_tb_2.ts")

        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])
780

W
update  
wenzhouwww@live.cn 已提交
781 782 783 784 785 786 787 788
        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])

        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])
        
789 790 791

    def support_super_table_test(self):
        tdSql.execute(" use testdb ")
W
update  
wenzhouwww@live.cn 已提交
792 793 794 795 796 797 798 799 800
        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" )
801
        pass
W
wenzhouwww@live.cn 已提交
802 803 804
    
    def basic_query(self):
        
805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835
        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 已提交
836 837 838 839 840 841
    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 已提交
842 843 844
        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 已提交
845 846 847
        self.basic_query()

        # cache_last 1 
W
wenzhouwww@live.cn 已提交
848 849 850
        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 已提交
851 852 853
        self.basic_query()

        # cache_last 2 
W
wenzhouwww@live.cn 已提交
854 855 856
        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 已提交
857 858 859
        self.basic_query()

        # cache_last 3 
W
wenzhouwww@live.cn 已提交
860 861 862
        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 已提交
863 864 865
        self.basic_query()


866 867 868 869 870 871 872
    def stop(self):
        tdSql.close()
        tdLog.success(f"{__file__} successfully executed")


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