floor.py 21.9 KB
Newer Older
W
wenzhouwww@live.cn 已提交
1 2 3 4 5 6 7 8 9 10
from math import floor
import taos
import sys
import datetime
import inspect

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

C
cpwu 已提交
11 12
DBNAME = "db"

W
wenzhouwww@live.cn 已提交
13 14
class TDTestCase:

15
    def init(self, conn, logSql, replicaVar=1):
16
        self.replicaVar = int(replicaVar)
W
wenzhouwww@live.cn 已提交
17 18
        tdLog.debug(f"start to excute {__file__}")
        tdSql.init(conn.cursor())
19

C
cpwu 已提交
20 21

    def prepare_datas(self, dbname=DBNAME):
W
wenzhouwww@live.cn 已提交
22
        tdSql.execute(
C
cpwu 已提交
23
            f'''create table {dbname}.stb1
W
wenzhouwww@live.cn 已提交
24 25 26 27
            (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)
            '''
        )
28

W
wenzhouwww@live.cn 已提交
29
        tdSql.execute(
C
cpwu 已提交
30 31
            f'''
            create table {dbname}.t1
W
wenzhouwww@live.cn 已提交
32 33 34 35
            (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
            '''
        )
        for i in range(4):
C
cpwu 已提交
36
            tdSql.execute(f'create table {dbname}.ct{i+1} using {dbname}.stb1 tags ( {i+1} )')
W
wenzhouwww@live.cn 已提交
37 38 39

        for i in range(9):
            tdSql.execute(
C
cpwu 已提交
40
                f"insert into {dbname}.ct1 values ( now()-{i*10}s, {1*i}, {11111*i}, {111*i}, {11*i}, {1.11*i}, {11.11*i}, {i%2}, 'binary{i}', 'nchar{i}', now()+{1*i}a )"
W
wenzhouwww@live.cn 已提交
41 42
            )
            tdSql.execute(
C
cpwu 已提交
43
                f"insert into {dbname}.ct4 values ( now()-{i*90}d, {1*i}, {11111*i}, {111*i}, {11*i}, {1.11*i}, {11.11*i}, {i%2}, 'binary{i}', 'nchar{i}', now()+{1*i}a )"
W
wenzhouwww@live.cn 已提交
44
            )
C
cpwu 已提交
45 46 47 48
        tdSql.execute(f"insert into {dbname}.ct1 values (now()-45s, 0, 0, 0, 0, 0, 0, 0, 'binary0', 'nchar0', now()+8a )")
        tdSql.execute(f"insert into {dbname}.ct1 values (now()+10s, 9, -99999, -999, -99, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a )")
        tdSql.execute(f"insert into {dbname}.ct1 values (now()+15s, 9, -99999, -999, -99, -9.99, NULL, 1, 'binary9', 'nchar9', now()+9a )")
        tdSql.execute(f"insert into {dbname}.ct1 values (now()+20s, 9, -99999, -999, NULL, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a )")
W
wenzhouwww@live.cn 已提交
49

C
cpwu 已提交
50 51 52
        tdSql.execute(f"insert into {dbname}.ct4 values (now()-810d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) ")
        tdSql.execute(f"insert into {dbname}.ct4 values (now()-400d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) ")
        tdSql.execute(f"insert into {dbname}.ct4 values (now()+90d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL  ) ")
W
wenzhouwww@live.cn 已提交
53 54

        tdSql.execute(
C
cpwu 已提交
55
            f'''insert into {dbname}.t1 values
W
wenzhouwww@live.cn 已提交
56 57 58 59 60 61 62 63 64 65 66 67 68 69
            ( '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 )
            '''
        )
70

W
wenzhouwww@live.cn 已提交
71 72 73 74 75 76
    def check_result_auto(self ,origin_query , floor_query):
        pass
        floor_result = tdSql.getResult(floor_query)
        origin_result = tdSql.getResult(origin_query)

        auto_result =[]
77

W
wenzhouwww@live.cn 已提交
78 79 80 81 82 83 84 85 86 87
        for row in origin_result:
            row_check = []
            for elem in row:
                if elem == None:
                    elem = None
                else:
                    elem = floor(elem)
                row_check.append(elem)
            auto_result.append(row_check)

88
        tdSql.query(floor_query)
W
wenzhouwww@live.cn 已提交
89 90
        for row_index , row in enumerate(floor_result):
            for col_index , elem in enumerate(row):
91 92
                tdSql.checkData(row_index,col_index,auto_result[row_index][col_index])
                
93

C
cpwu 已提交
94
    def test_errors(self, dbname=DBNAME):
W
wenzhouwww@live.cn 已提交
95
        error_sql_lists = [
C
cpwu 已提交
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
            f"select floor from {dbname}.t1",
            # f"select floor(-+--+c1) from {dbname}.t1",
            # f"select +-floor(c1) from {dbname}.t1",
            # f"select ++-floor(c1) from {dbname}.t1",
            # f"select ++--floor(c1) from {dbname}.t1",
            # f"select - -floor(c1)*0 from {dbname}.t1",
            # f"select floor(tbname+1) from {dbname}.t1 ",
            f"select floor(123--123)==1 from {dbname}.t1",
            f"select floor(c1) as 'd1' from {dbname}.t1",
            f"select floor(c1 ,c2 ) from {dbname}.t1",
            f"select floor(c1 ,NULL) from {dbname}.t1",
            f"select floor(,) from {dbname}.t1;",
            f"select floor(floor(c1) ab from {dbname}.t1)",
            f"select floor(c1) as int from {dbname}.t1",
            f"select floor from {dbname}.stb1",
            # f"select floor(-+--+c1) from {dbname}.stb1",
            # f"select +-floor(c1) from {dbname}.stb1",
            # f"select ++-floor(c1) from {dbname}.stb1",
            # f"select ++--floor(c1) from {dbname}.stb1",
            # f"select - -floor(c1)*0 from {dbname}.stb1",
            # f"select floor(tbname+1) from {dbname}.stb1 ",
            f"select floor(123--123)==1 from {dbname}.stb1",
            f"select floor(c1) as 'd1' from {dbname}.stb1",
            f"select floor(c1 ,c2 ) from {dbname}.stb1",
            f"select floor(c1 ,NULL) from {dbname}.stb1",
            f"select floor(,) from {dbname}.stb1;",
            f"select floor(floor(c1) ab from {dbname}.stb1)",
            f"select floor(c1) as int from {dbname}.stb1"
W
wenzhouwww@live.cn 已提交
124 125 126
        ]
        for error_sql in error_sql_lists:
            tdSql.error(error_sql)
127

C
cpwu 已提交
128
    def support_types(self, dbname=DBNAME):
W
wenzhouwww@live.cn 已提交
129
        type_error_sql_lists = [
C
cpwu 已提交
130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
            f"select floor(ts) from {dbname}.t1" ,
            f"select floor(c7) from {dbname}.t1",
            f"select floor(c8) from {dbname}.t1",
            f"select floor(c9) from {dbname}.t1",
            f"select floor(ts) from {dbname}.ct1" ,
            f"select floor(c7) from {dbname}.ct1",
            f"select floor(c8) from {dbname}.ct1",
            f"select floor(c9) from {dbname}.ct1",
            f"select floor(ts) from {dbname}.ct3" ,
            f"select floor(c7) from {dbname}.ct3",
            f"select floor(c8) from {dbname}.ct3",
            f"select floor(c9) from {dbname}.ct3",
            f"select floor(ts) from {dbname}.ct4" ,
            f"select floor(c7) from {dbname}.ct4",
            f"select floor(c8) from {dbname}.ct4",
            f"select floor(c9) from {dbname}.ct4",
            f"select floor(ts) from {dbname}.stb1" ,
            f"select floor(c7) from {dbname}.stb1",
            f"select floor(c8) from {dbname}.stb1",
            f"select floor(c9) from {dbname}.stb1" ,

            f"select floor(ts) from {dbname}.stbbb1" ,
            f"select floor(c7) from {dbname}.stbbb1",

            f"select floor(ts) from {dbname}.tbname",
            f"select floor(c9) from {dbname}.tbname"
W
wenzhouwww@live.cn 已提交
156 157

        ]
158

W
wenzhouwww@live.cn 已提交
159 160
        for type_sql in type_error_sql_lists:
            tdSql.error(type_sql)
161 162


W
wenzhouwww@live.cn 已提交
163
        type_sql_lists = [
C
cpwu 已提交
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
            f"select floor(c1) from {dbname}.t1",
            f"select floor(c2) from {dbname}.t1",
            f"select floor(c3) from {dbname}.t1",
            f"select floor(c4) from {dbname}.t1",
            f"select floor(c5) from {dbname}.t1",
            f"select floor(c6) from {dbname}.t1",

            f"select floor(c1) from {dbname}.ct1",
            f"select floor(c2) from {dbname}.ct1",
            f"select floor(c3) from {dbname}.ct1",
            f"select floor(c4) from {dbname}.ct1",
            f"select floor(c5) from {dbname}.ct1",
            f"select floor(c6) from {dbname}.ct1",

            f"select floor(c1) from {dbname}.ct3",
            f"select floor(c2) from {dbname}.ct3",
            f"select floor(c3) from {dbname}.ct3",
            f"select floor(c4) from {dbname}.ct3",
            f"select floor(c5) from {dbname}.ct3",
            f"select floor(c6) from {dbname}.ct3",

            f"select floor(c1) from {dbname}.stb1",
            f"select floor(c2) from {dbname}.stb1",
            f"select floor(c3) from {dbname}.stb1",
            f"select floor(c4) from {dbname}.stb1",
            f"select floor(c5) from {dbname}.stb1",
            f"select floor(c6) from {dbname}.stb1",

            f"select floor(c6) as alisb from {dbname}.stb1",
            f"select floor(c6) alisb from {dbname}.stb1",
W
wenzhouwww@live.cn 已提交
194 195 196 197
        ]

        for type_sql in type_sql_lists:
            tdSql.query(type_sql)
198

C
cpwu 已提交
199
    def basic_floor_function(self, dbname=DBNAME):
W
wenzhouwww@live.cn 已提交
200

201
        # basic query
C
cpwu 已提交
202
        tdSql.query(f"select c1 from {dbname}.ct3")
W
wenzhouwww@live.cn 已提交
203
        tdSql.checkRows(0)
C
cpwu 已提交
204
        tdSql.query(f"select c1 from {dbname}.t1")
W
wenzhouwww@live.cn 已提交
205
        tdSql.checkRows(12)
C
cpwu 已提交
206
        tdSql.query(f"select c1 from {dbname}.stb1")
W
wenzhouwww@live.cn 已提交
207 208 209
        tdSql.checkRows(25)

        # used for empty table  , ct3 is empty
C
cpwu 已提交
210
        tdSql.query(f"select floor(c1) from {dbname}.ct3")
W
wenzhouwww@live.cn 已提交
211
        tdSql.checkRows(0)
C
cpwu 已提交
212
        tdSql.query(f"select floor(c2) from {dbname}.ct3")
W
wenzhouwww@live.cn 已提交
213
        tdSql.checkRows(0)
C
cpwu 已提交
214
        tdSql.query(f"select floor(c3) from {dbname}.ct3")
W
wenzhouwww@live.cn 已提交
215
        tdSql.checkRows(0)
C
cpwu 已提交
216
        tdSql.query(f"select floor(c4) from {dbname}.ct3")
W
wenzhouwww@live.cn 已提交
217
        tdSql.checkRows(0)
C
cpwu 已提交
218
        tdSql.query(f"select floor(c5) from {dbname}.ct3")
W
wenzhouwww@live.cn 已提交
219
        tdSql.checkRows(0)
C
cpwu 已提交
220
        tdSql.query(f"select floor(c6) from {dbname}.ct3")
221

W
wenzhouwww@live.cn 已提交
222
        # used for regular table
C
cpwu 已提交
223
        tdSql.query(f"select floor(c1) from {dbname}.t1")
W
wenzhouwww@live.cn 已提交
224 225 226 227 228
        tdSql.checkData(0, 0, None)
        tdSql.checkData(1 , 0, 1)
        tdSql.checkData(3 , 0, 3)
        tdSql.checkData(5 , 0, None)

C
cpwu 已提交
229
        tdSql.query(f"select c1, c2, c3 , c4, c5 from {dbname}.t1")
W
wenzhouwww@live.cn 已提交
230 231 232
        tdSql.checkData(1, 4, 1.11000)
        tdSql.checkData(3, 3, 33)
        tdSql.checkData(5, 4, None)
C
cpwu 已提交
233
        tdSql.query(f"select ts,c1, c2, c3 , c4, c5 from {dbname}.t1")
W
wenzhouwww@live.cn 已提交
234 235 236 237
        tdSql.checkData(1, 5, 1.11000)
        tdSql.checkData(3, 4, 33)
        tdSql.checkData(5, 5, None)

C
cpwu 已提交
238
        self.check_result_auto( f"select c1, c2, c3 , c4, c5 from {dbname}.t1", f"select (c1), floor(c2) ,floor(c3), floor(c4), floor(c5) from {dbname}.t1")
239

W
wenzhouwww@live.cn 已提交
240
        # used for sub table
C
cpwu 已提交
241
        tdSql.query(f"select floor(c1) from {dbname}.ct1")
W
wenzhouwww@live.cn 已提交
242 243 244 245 246
        tdSql.checkData(0, 0, 8)
        tdSql.checkData(1 , 0, 7)
        tdSql.checkData(3 , 0, 5)
        tdSql.checkData(5 , 0, 4)

C
cpwu 已提交
247 248 249
        tdSql.query(f"select floor(c1) from {dbname}.ct1")
        self.check_result_auto( f"select c1, c2, c3 , c4, c5 from {dbname}.ct1", f"select (c1), floor(c2) ,floor(c3), floor(c4), floor(c5) from {dbname}.ct1")
        self.check_result_auto(f"select floor(floor(floor(floor(floor(floor(floor(floor(floor(floor(c1)))))))))) nest_col_func from {dbname}.ct1;",f"select c1 from {dbname}.ct1" )
W
wenzhouwww@live.cn 已提交
250

251 252
        # used for stable table

C
cpwu 已提交
253
        tdSql.query(f"select floor(c1) from {dbname}.stb1")
W
wenzhouwww@live.cn 已提交
254
        tdSql.checkRows(25)
C
cpwu 已提交
255 256
        self.check_result_auto( f"select c1, c2, c3 , c4, c5 from {dbname}.ct4 ", f"select (c1), floor(c2) ,floor(c3), floor(c4), floor(c5) from {dbname}.ct4")
        self.check_result_auto(f"select floor(floor(floor(floor(floor(floor(floor(floor(floor(floor(c1)))))))))) nest_col_func from {dbname}.ct4;" , f"select c1 from {dbname}.ct4" )
257

W
wenzhouwww@live.cn 已提交
258 259

        # used for not exists table
C
cpwu 已提交
260 261 262
        tdSql.error(f"select floor(c1) from {dbname}.stbbb1")
        tdSql.error(f"select floor(c1) from {dbname}.tbname")
        tdSql.error(f"select floor(c1) from {dbname}.ct5")
W
wenzhouwww@live.cn 已提交
263

264
        # mix with common col
C
cpwu 已提交
265
        tdSql.query(f"select c1, floor(c1) from {dbname}.ct1")
W
wenzhouwww@live.cn 已提交
266 267 268 269
        tdSql.checkData(0 , 0 ,8)
        tdSql.checkData(0 , 1 ,8)
        tdSql.checkData(4 , 0 ,0)
        tdSql.checkData(4 , 1 ,0)
C
cpwu 已提交
270
        tdSql.query(f"select c1, floor(c1) from {dbname}.ct4")
W
wenzhouwww@live.cn 已提交
271 272 273 274 275 276
        tdSql.checkData(0 , 0 , None)
        tdSql.checkData(0 , 1 ,None)
        tdSql.checkData(4 , 0 ,5)
        tdSql.checkData(4 , 1 ,5)
        tdSql.checkData(5 , 0 ,None)
        tdSql.checkData(5 , 1 ,None)
C
cpwu 已提交
277
        tdSql.query(f"select c1, floor(c1) from {dbname}.ct4 ")
W
wenzhouwww@live.cn 已提交
278 279 280 281 282 283
        tdSql.checkData(0 , 0 ,None)
        tdSql.checkData(0 , 1 ,None)
        tdSql.checkData(4 , 0 ,5)
        tdSql.checkData(4 , 1 ,5)

        # mix with common functions
C
cpwu 已提交
284
        tdSql.query(f"select c1, floor(c1),c5, floor(c5) from {dbname}.ct4 ")
W
wenzhouwww@live.cn 已提交
285 286 287 288
        tdSql.checkData(0 , 0 ,None)
        tdSql.checkData(0 , 1 ,None)
        tdSql.checkData(0 , 2 ,None)
        tdSql.checkData(0 , 3 ,None)
289

W
wenzhouwww@live.cn 已提交
290 291 292 293 294
        tdSql.checkData(3 , 0 , 6)
        tdSql.checkData(3 , 1 , 6)
        tdSql.checkData(3 , 2 ,6.66000)
        tdSql.checkData(3 , 3 ,6.00000)

C
cpwu 已提交
295
        tdSql.query(f"select c1, floor(c1),c5, floor(c5) from {dbname}.stb1 ")
W
wenzhouwww@live.cn 已提交
296 297

        # mix with agg functions , not support
C
cpwu 已提交
298 299 300 301 302 303
        tdSql.error(f"select c1, floor(c1),c5, count(c5) from {dbname}.stb1 ")
        tdSql.error(f"select c1, floor(c1),c5, count(c5) from {dbname}.ct1 ")
        tdSql.error(f"select floor(c1), count(c5) from {dbname}.stb1 ")
        tdSql.error(f"select floor(c1), count(c5) from {dbname}.ct1 ")
        tdSql.error(f"select c1, count(c5) from {dbname}.ct1 ")
        tdSql.error(f"select c1, count(c5) from {dbname}.stb1 ")
W
wenzhouwww@live.cn 已提交
304 305 306

        # agg functions mix with agg functions

C
cpwu 已提交
307 308
        tdSql.query(f"select max(c5), count(c5) from {dbname}.stb1")
        tdSql.query(f"select max(c5), count(c5) from {dbname}.ct1")
W
wenzhouwww@live.cn 已提交
309

310

W
wenzhouwww@live.cn 已提交
311
        # bug fix for count
C
cpwu 已提交
312
        tdSql.query(f"select count(c1) from {dbname}.ct4 ")
W
wenzhouwww@live.cn 已提交
313
        tdSql.checkData(0,0,9)
C
cpwu 已提交
314
        tdSql.query(f"select count(*) from {dbname}.ct4 ")
W
wenzhouwww@live.cn 已提交
315
        tdSql.checkData(0,0,12)
C
cpwu 已提交
316
        tdSql.query(f"select count(c1) from {dbname}.stb1 ")
W
wenzhouwww@live.cn 已提交
317
        tdSql.checkData(0,0,22)
C
cpwu 已提交
318
        tdSql.query(f"select count(*) from {dbname}.stb1 ")
W
wenzhouwww@live.cn 已提交
319 320
        tdSql.checkData(0,0,25)

321
        # bug fix for compute
C
cpwu 已提交
322
        tdSql.query(f"select c1, abs(c1) -0 ,floor(c1)-0 from {dbname}.ct4 ")
W
wenzhouwww@live.cn 已提交
323 324 325 326 327 328 329
        tdSql.checkData(0, 0, None)
        tdSql.checkData(0, 1, None)
        tdSql.checkData(0, 2, None)
        tdSql.checkData(1, 0, 8)
        tdSql.checkData(1, 1, 8.000000000)
        tdSql.checkData(1, 2, 8.000000000)

C
cpwu 已提交
330
        tdSql.query(f"select c1, abs(c1) -0 ,floor(c1-0.1)-0.1 from {dbname}.ct4")
W
wenzhouwww@live.cn 已提交
331 332 333 334 335 336 337
        tdSql.checkData(0, 0, None)
        tdSql.checkData(0, 1, None)
        tdSql.checkData(0, 2, None)
        tdSql.checkData(1, 0, 8)
        tdSql.checkData(1, 1, 8.000000000)
        tdSql.checkData(1, 2, 6.900000000)

C
cpwu 已提交
338 339
    def abs_func_filter(self, dbname=DBNAME):
        tdSql.query(f"select c1, abs(c1) -0 ,ceil(c1-0.1)-0 ,floor(c1+0.1)-0.1 ,ceil(log(c1,2)-0.5) from {dbname}.ct4 where c1>5 ")
W
wenzhouwww@live.cn 已提交
340 341 342 343 344 345 346
        tdSql.checkRows(3)
        tdSql.checkData(0,0,8)
        tdSql.checkData(0,1,8.000000000)
        tdSql.checkData(0,2,8.000000000)
        tdSql.checkData(0,3,7.900000000)
        tdSql.checkData(0,4,3.000000000)

C
cpwu 已提交
347
        tdSql.query(f"select c1, abs(c1) -0 ,ceil(c1-0.1)-0 ,floor(c1+0.1)-0.1 ,ceil(log(c1,2)-0.5) from {dbname}.ct4 where c1=5 ")
W
wenzhouwww@live.cn 已提交
348 349 350 351 352 353 354
        tdSql.checkRows(1)
        tdSql.checkData(0,0,5)
        tdSql.checkData(0,1,5.000000000)
        tdSql.checkData(0,2,5.000000000)
        tdSql.checkData(0,3,4.900000000)
        tdSql.checkData(0,4,2.000000000)

C
cpwu 已提交
355
        tdSql.query(f"select c1, abs(c1) -0 ,ceil(c1-0.1)-0 ,floor(c1+0.1)-0.1 ,ceil(log(c1,2)-0.5) from {dbname}.ct4 where c1=5 ")
W
wenzhouwww@live.cn 已提交
356 357 358 359 360 361 362
        tdSql.checkRows(1)
        tdSql.checkData(0,0,5)
        tdSql.checkData(0,1,5.000000000)
        tdSql.checkData(0,2,5.000000000)
        tdSql.checkData(0,3,4.900000000)
        tdSql.checkData(0,4,2.000000000)

C
cpwu 已提交
363
        tdSql.query(f"select c1,c2 , abs(c1) -0 ,ceil(c1-0.1)-0 ,floor(c1+0.1)-0.1 ,ceil(log(c1,2)-0.5) from {dbname}.ct4 where c1>log(c1,2) limit 1 ")
W
wenzhouwww@live.cn 已提交
364 365 366 367 368 369 370
        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)
371

W
wenzhouwww@live.cn 已提交
372 373
    def floor_Arithmetic(self):
        pass
374

C
cpwu 已提交
375
    def check_boundary_values(self, dbname="bound_test"):
W
wenzhouwww@live.cn 已提交
376

C
cpwu 已提交
377 378
        tdSql.execute(f"drop database if exists {dbname}")
        tdSql.execute(f"create database if not exists {dbname}")
W
wenzhouwww@live.cn 已提交
379
        time.sleep(3)
C
cpwu 已提交
380
        tdSql.execute(f"use {dbname}")
W
wenzhouwww@live.cn 已提交
381
        tdSql.execute(
C
cpwu 已提交
382
            f"create table {dbname}.stb_bound (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(32),c9 nchar(32), c10 timestamp) tags (t1 int);"
W
wenzhouwww@live.cn 已提交
383
        )
C
cpwu 已提交
384
        tdSql.execute(f'create table {dbname}.sub1_bound using {dbname}.stb_bound tags ( 1 )')
W
wenzhouwww@live.cn 已提交
385
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
386
                f"insert into {dbname}.sub1_bound values ( now()-10s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
W
wenzhouwww@live.cn 已提交
387 388
            )
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
389
                f"insert into {dbname}.sub1_bound values ( now()-5s, 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
W
wenzhouwww@live.cn 已提交
390 391 392
            )

        tdSql.execute(
C
cpwu 已提交
393
                f"insert into {dbname}.sub1_bound values ( now(), -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
W
wenzhouwww@live.cn 已提交
394 395 396
            )

        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
397
                f"insert into {dbname}.sub1_bound values ( now()+5s, 2147483643, 9223372036854775803, 32763, 123, 3.39E+38, 1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
W
wenzhouwww@live.cn 已提交
398 399 400
            )

        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
401
                f"insert into {dbname}.sub1_bound values ( now()+10s, -2147483643, -9223372036854775803, -32763, -123, -3.39E+38, -1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
W
wenzhouwww@live.cn 已提交
402
            )
403

W
wenzhouwww@live.cn 已提交
404
        tdSql.error(
W
update  
wenzhouwww@live.cn 已提交
405
                f"insert into {dbname}.sub1_bound values ( now()+15s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
W
wenzhouwww@live.cn 已提交
406
            )
C
cpwu 已提交
407 408 409
        self.check_result_auto( f"select c1, c2, c3 , c4, c5 ,c6 from {dbname}.sub1_bound ", f"select floor(c1), floor(c2) ,floor(c3), floor(c4), floor(c5) ,floor(c6) from {dbname}.sub1_bound")
        self.check_result_auto( f"select c1, c2, c3 , c3, c2 ,c1 from {dbname}.sub1_bound ", f"select floor(c1), floor(c2) ,floor(c3), floor(c3), floor(c2) ,floor(c1) from {dbname}.sub1_bound")
        self.check_result_auto(f"select floor(floor(floor(floor(floor(floor(floor(floor(floor(floor(c1)))))))))) nest_col_func from {dbname}.sub1_bound;" , f"select floor(c1) from {dbname}.sub1_bound" )
410

W
wenzhouwww@live.cn 已提交
411
        # check basic elem for table per row
C
cpwu 已提交
412
        tdSql.query(f"select floor(c1+0.2) ,floor(c2) , floor(c3+0.3) , floor(c4-0.3), floor(c5/2), floor(c6/2) from {dbname}.sub1_bound ")
W
wenzhouwww@live.cn 已提交
413 414 415 416 417 418 419 420 421 422
        tdSql.checkData(0, 0, 2147483647.000000000)
        tdSql.checkData(0, 2, 32767.000000000)
        tdSql.checkData(0, 3, 126.000000000)
        tdSql.checkData(0, 4, 169999997607218212453866206899682148352.000000000)

        tdSql.checkData(4, 0, -2147483643.000000000)
        tdSql.checkData(4, 2, -32763.000000000)
        tdSql.checkData(4, 3, -124.000000000)
        tdSql.checkData(4, 4, -169499995645668991474575059260979281920.000000000)

C
cpwu 已提交
423
        self.check_result_auto(f"select c1+1 ,c2 , c3*1 , c4/2, c5/2, c6 from {dbname}.sub1_bound" ,f"select floor(c1+1) ,floor(c2) , floor(c3*1) , floor(c4/2), floor(c5)/2, floor(c6) from {dbname}.sub1_bound ")
W
wenzhouwww@live.cn 已提交
424

C
cpwu 已提交
425 426 427 428 429 430
    def support_super_table_test(self, dbname=DBNAME):
        tdSql.execute(f" use {dbname} ")
        self.check_result_auto( f"select c5 from {dbname}.stb1 order by ts " , f"select floor(c5) from {dbname}.stb1 order by ts" )
        self.check_result_auto( f"select c5 from {dbname}.stb1 order by tbname " , f"select floor(c5) from {dbname}.stb1 order by tbname" )
        self.check_result_auto( f"select c5 from {dbname}.stb1 where c1 > 0 order by tbname  " , f"select floor(c5) from {dbname}.stb1 where c1 > 0 order by tbname" )
        self.check_result_auto( f"select c5 from {dbname}.stb1 where c1 > 0 order by tbname  " , f"select floor(c5) from {dbname}.stb1 where c1 > 0 order by tbname" )
431

C
cpwu 已提交
432 433 434 435
        self.check_result_auto( f"select t1,c5 from {dbname}.stb1 order by ts " , f"select floor(t1), floor(c5) from {dbname}.stb1 order by ts" )
        self.check_result_auto( f"select t1,c5 from {dbname}.stb1 order by tbname " , f"select floor(t1) ,floor(c5) from {dbname}.stb1 order by tbname" )
        self.check_result_auto( f"select t1,c5 from {dbname}.stb1 where c1 > 0 order by tbname  " , f"select floor(t1) ,floor(c5) from {dbname}.stb1 where c1 > 0 order by tbname" )
        self.check_result_auto( f"select t1,c5 from {dbname}.stb1 where c1 > 0 order by tbname  " , f"select floor(t1) , floor(c5) from {dbname}.stb1 where c1 > 0 order by tbname" )
436 437
        pass

W
wenzhouwww@live.cn 已提交
438
    def run(self):  # sourcery skip: extract-duplicate-method, remove-redundant-fstring
C
cpwu 已提交
439
        tdSql.prepare(DBNAME)
W
wenzhouwww@live.cn 已提交
440 441

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

W
wenzhouwww@live.cn 已提交
443 444
        self.prepare_datas()

445
        tdLog.printNoPrefix("==========step2:test errors ==============")
W
wenzhouwww@live.cn 已提交
446 447

        self.test_errors()
448 449

        tdLog.printNoPrefix("==========step3:support types ============")
W
wenzhouwww@live.cn 已提交
450 451 452

        self.support_types()

453
        tdLog.printNoPrefix("==========step4: floor basic query ============")
W
wenzhouwww@live.cn 已提交
454 455 456

        self.basic_floor_function()

457
        tdLog.printNoPrefix("==========step5: floor boundary query ============")
W
wenzhouwww@live.cn 已提交
458 459 460

        self.check_boundary_values()

461
        tdLog.printNoPrefix("==========step6: floor filter query ============")
W
wenzhouwww@live.cn 已提交
462 463 464

        self.abs_func_filter()

465 466 467 468
        tdLog.printNoPrefix("==========step7: check floor result of  stable query ============")

        self.support_super_table_test()

W
wenzhouwww@live.cn 已提交
469 470 471 472 473 474
    def stop(self):
        tdSql.close()
        tdLog.success(f"{__file__} successfully executed")

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