floor.py 22.1 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):
W
wenzhouwww@live.cn 已提交
16 17
        tdLog.debug(f"start to excute {__file__}")
        tdSql.init(conn.cursor())
18

C
cpwu 已提交
19 20

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

W
wenzhouwww@live.cn 已提交
28
        tdSql.execute(
C
cpwu 已提交
29 30
            f'''
            create table {dbname}.t1
W
wenzhouwww@live.cn 已提交
31 32 33 34
            (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 已提交
35
            tdSql.execute(f'create table {dbname}.ct{i+1} using {dbname}.stb1 tags ( {i+1} )')
W
wenzhouwww@live.cn 已提交
36 37 38

        for i in range(9):
            tdSql.execute(
C
cpwu 已提交
39
                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 已提交
40 41
            )
            tdSql.execute(
C
cpwu 已提交
42
                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 已提交
43
            )
C
cpwu 已提交
44 45 46 47
        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 已提交
48

C
cpwu 已提交
49 50 51
        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 已提交
52 53

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

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

        auto_result =[]
76

W
wenzhouwww@live.cn 已提交
77 78 79 80 81 82 83 84 85 86 87 88 89 90
        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)

        check_status = True
        for row_index , row in enumerate(floor_result):
            for col_index , elem in enumerate(row):
                if auto_result[row_index][col_index] != elem:
91
                    check_status = False
W
wenzhouwww@live.cn 已提交
92 93 94 95 96
        if not check_status:
            tdLog.notice("floor function value has not as expected , sql is \"%s\" "%floor_query )
            sys.exit(1)
        else:
            tdLog.info("floor value check pass , it work as expected ,sql is \"%s\"   "%floor_query )
97

C
cpwu 已提交
98
    def test_errors(self, dbname=DBNAME):
W
wenzhouwww@live.cn 已提交
99
        error_sql_lists = [
C
cpwu 已提交
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
            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 已提交
128 129 130
        ]
        for error_sql in error_sql_lists:
            tdSql.error(error_sql)
131

C
cpwu 已提交
132
    def support_types(self, dbname=DBNAME):
W
wenzhouwww@live.cn 已提交
133
        type_error_sql_lists = [
C
cpwu 已提交
134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
            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 已提交
160 161

        ]
162

W
wenzhouwww@live.cn 已提交
163 164
        for type_sql in type_error_sql_lists:
            tdSql.error(type_sql)
165 166


W
wenzhouwww@live.cn 已提交
167
        type_sql_lists = [
C
cpwu 已提交
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 194 195 196 197
            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 已提交
198 199 200 201
        ]

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

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

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

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

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

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

C
cpwu 已提交
242
        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")
243

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

C
cpwu 已提交
251 252 253
        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 已提交
254

255 256
        # used for stable table

C
cpwu 已提交
257
        tdSql.query(f"select floor(c1) from {dbname}.stb1")
W
wenzhouwww@live.cn 已提交
258
        tdSql.checkRows(25)
C
cpwu 已提交
259 260
        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" )
261

W
wenzhouwww@live.cn 已提交
262 263

        # used for not exists table
C
cpwu 已提交
264 265 266
        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 已提交
267

268
        # mix with common col
C
cpwu 已提交
269
        tdSql.query(f"select c1, floor(c1) from {dbname}.ct1")
W
wenzhouwww@live.cn 已提交
270 271 272 273
        tdSql.checkData(0 , 0 ,8)
        tdSql.checkData(0 , 1 ,8)
        tdSql.checkData(4 , 0 ,0)
        tdSql.checkData(4 , 1 ,0)
C
cpwu 已提交
274
        tdSql.query(f"select c1, floor(c1) from {dbname}.ct4")
W
wenzhouwww@live.cn 已提交
275 276 277 278 279 280
        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 已提交
281
        tdSql.query(f"select c1, floor(c1) from {dbname}.ct4 ")
W
wenzhouwww@live.cn 已提交
282 283 284 285 286 287
        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 已提交
288
        tdSql.query(f"select c1, floor(c1),c5, floor(c5) from {dbname}.ct4 ")
W
wenzhouwww@live.cn 已提交
289 290 291 292
        tdSql.checkData(0 , 0 ,None)
        tdSql.checkData(0 , 1 ,None)
        tdSql.checkData(0 , 2 ,None)
        tdSql.checkData(0 , 3 ,None)
293

W
wenzhouwww@live.cn 已提交
294 295 296 297 298
        tdSql.checkData(3 , 0 , 6)
        tdSql.checkData(3 , 1 , 6)
        tdSql.checkData(3 , 2 ,6.66000)
        tdSql.checkData(3 , 3 ,6.00000)

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

        # mix with agg functions , not support
C
cpwu 已提交
302 303 304 305 306 307
        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 已提交
308 309 310

        # agg functions mix with agg functions

C
cpwu 已提交
311 312
        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 已提交
313

314

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

325
        # bug fix for compute
C
cpwu 已提交
326
        tdSql.query(f"select c1, abs(c1) -0 ,floor(c1)-0 from {dbname}.ct4 ")
W
wenzhouwww@live.cn 已提交
327 328 329 330 331 332 333
        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 已提交
334
        tdSql.query(f"select c1, abs(c1) -0 ,floor(c1-0.1)-0.1 from {dbname}.ct4")
W
wenzhouwww@live.cn 已提交
335 336 337 338 339 340 341
        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 已提交
342 343
    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 已提交
344 345 346 347 348 349 350
        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 已提交
351
        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 已提交
352 353 354 355 356 357 358
        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 已提交
359
        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 已提交
360 361 362 363 364 365 366
        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 已提交
367
        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 已提交
368 369 370 371 372 373 374
        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)
375

W
wenzhouwww@live.cn 已提交
376 377
    def floor_Arithmetic(self):
        pass
378

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

C
cpwu 已提交
381 382
        tdSql.execute(f"drop database if exists {dbname}")
        tdSql.execute(f"create database if not exists {dbname}")
W
wenzhouwww@live.cn 已提交
383
        time.sleep(3)
C
cpwu 已提交
384
        tdSql.execute(f"use {dbname}")
W
wenzhouwww@live.cn 已提交
385
        tdSql.execute(
C
cpwu 已提交
386
            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 已提交
387
        )
C
cpwu 已提交
388
        tdSql.execute(f'create table {dbname}.sub1_bound using {dbname}.stb_bound tags ( 1 )')
W
wenzhouwww@live.cn 已提交
389
        tdSql.execute(
C
cpwu 已提交
390
                f"insert into {dbname}.sub1_bound values ( now()-1s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
W
wenzhouwww@live.cn 已提交
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(
C
cpwu 已提交
397
                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 已提交
398 399 400
            )

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

        tdSql.execute(
C
cpwu 已提交
405
                f"insert into {dbname}.sub1_bound values ( now(), -2147483643, -9223372036854775803, -32763, -123, -3.39E+38, -1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
W
wenzhouwww@live.cn 已提交
406
            )
407

W
wenzhouwww@live.cn 已提交
408
        tdSql.error(
C
cpwu 已提交
409
                f"insert into {dbname}.sub1_bound values ( now()+1s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
W
wenzhouwww@live.cn 已提交
410
            )
C
cpwu 已提交
411 412 413
        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" )
414

W
wenzhouwww@live.cn 已提交
415
        # check basic elem for table per row
C
cpwu 已提交
416
        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 已提交
417 418 419 420 421 422 423 424 425 426
        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 已提交
427
        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 已提交
428

C
cpwu 已提交
429 430 431 432 433 434
    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" )
435

C
cpwu 已提交
436 437 438 439
        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" )
440 441
        pass

W
wenzhouwww@live.cn 已提交
442
    def run(self):  # sourcery skip: extract-duplicate-method, remove-redundant-fstring
C
cpwu 已提交
443
        tdSql.prepare(DBNAME)
W
wenzhouwww@live.cn 已提交
444 445

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

W
wenzhouwww@live.cn 已提交
447 448
        self.prepare_datas()

449
        tdLog.printNoPrefix("==========step2:test errors ==============")
W
wenzhouwww@live.cn 已提交
450 451

        self.test_errors()
452 453

        tdLog.printNoPrefix("==========step3:support types ============")
W
wenzhouwww@live.cn 已提交
454 455 456

        self.support_types()

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

        self.basic_floor_function()

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

        self.check_boundary_values()

465
        tdLog.printNoPrefix("==========step6: floor filter query ============")
W
wenzhouwww@live.cn 已提交
466 467 468

        self.abs_func_filter()

469 470 471 472
        tdLog.printNoPrefix("==========step7: check floor result of  stable query ============")

        self.support_super_table_test()

W
wenzhouwww@live.cn 已提交
473 474 475 476 477 478
    def stop(self):
        tdSql.close()
        tdLog.success(f"{__file__} successfully executed")

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