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

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

class TDTestCase:
C
cpwu 已提交
12 13 14
    # 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 ,"udfDebugFlag":143}
W
wenzhouwww@live.cn 已提交
15

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

C
cpwu 已提交
20
    def prepare_datas(self, dbname="db"):
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)
            '''
        )
G
Ganlin Zhao 已提交
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 )
            '''
        )
G
Ganlin Zhao 已提交
69

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

        auto_result =[]
G
Ganlin Zhao 已提交
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 = ceil(elem)
                row_check.append(elem)
            auto_result.append(row_check)

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

C
cpwu 已提交
98
    def test_errors(self, dbname="db"):
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
            f"select ceil from {dbname}.t1",
            f"select ceil(123--123)==1 from {dbname}.t1",
            f"select ceil(c1) as 'd1' from {dbname}.t1",
            f"select ceil(c1 ,c2 ) from {dbname}.t1",
            f"select ceil(c1 ,NULL) from {dbname}.t1",
            f"select ceil(,) from {dbname}.t1;",
            f"select ceil(ceil(c1) ab from {dbname}.t1)",
            f"select ceil(c1) as int from {dbname}.t1",
            f"select ceil from {dbname}.stb1",
            f"select ceil(123--123)==1 from {dbname}.stb1",
            f"select ceil(c1) as 'd1' from {dbname}.stb1",
            f"select ceil(c1 ,c2 ) from {dbname}.stb1",
            f"select ceil(c1 ,NULL) from {dbname}.stb1",
            f"select ceil(,) from {dbname}.stb1;",
            f"select ceil(ceil(c1) ab from {dbname}.stb1)",
            f"select ceil(c1) as int from {dbname}.stb1"
W
wenzhouwww@live.cn 已提交
116 117 118
        ]
        for error_sql in error_sql_lists:
            tdSql.error(error_sql)
G
Ganlin Zhao 已提交
119

C
cpwu 已提交
120
    def support_types(self, dbname="db"):
W
wenzhouwww@live.cn 已提交
121
        type_error_sql_lists = [
C
cpwu 已提交
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
            f"select ceil(ts) from {dbname}.t1" ,
            f"select ceil(c7) from {dbname}.t1",
            f"select ceil(c8) from {dbname}.t1",
            f"select ceil(c9) from {dbname}.t1",
            f"select ceil(ts) from {dbname}.ct1" ,
            f"select ceil(c7) from {dbname}.ct1",
            f"select ceil(c8) from {dbname}.ct1",
            f"select ceil(c9) from {dbname}.ct1",
            f"select ceil(ts) from {dbname}.ct3" ,
            f"select ceil(c7) from {dbname}.ct3",
            f"select ceil(c8) from {dbname}.ct3",
            f"select ceil(c9) from {dbname}.ct3",
            f"select ceil(ts) from {dbname}.ct4" ,
            f"select ceil(c7) from {dbname}.ct4",
            f"select ceil(c8) from {dbname}.ct4",
            f"select ceil(c9) from {dbname}.ct4",
            f"select ceil(ts) from {dbname}.stb1" ,
            f"select ceil(c7) from {dbname}.stb1",
            f"select ceil(c8) from {dbname}.stb1",
            f"select ceil(c9) from {dbname}.stb1" ,

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

            f"select ceil(ts) from {dbname}.tbname",
            f"select ceil(c9) from {dbname}.tbname"
W
wenzhouwww@live.cn 已提交
148 149

        ]
G
Ganlin Zhao 已提交
150

W
wenzhouwww@live.cn 已提交
151 152
        for type_sql in type_error_sql_lists:
            tdSql.error(type_sql)
G
Ganlin Zhao 已提交
153 154


W
wenzhouwww@live.cn 已提交
155
        type_sql_lists = [
C
cpwu 已提交
156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185
            f"select ceil(c1) from {dbname}.t1",
            f"select ceil(c2) from {dbname}.t1",
            f"select ceil(c3) from {dbname}.t1",
            f"select ceil(c4) from {dbname}.t1",
            f"select ceil(c5) from {dbname}.t1",
            f"select ceil(c6) from {dbname}.t1",

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

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

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

            f"select ceil(c6) as alisb from {dbname}.stb1",
            f"select ceil(c6) alisb from {dbname}.stb1",
W
wenzhouwww@live.cn 已提交
186 187 188 189
        ]

        for type_sql in type_sql_lists:
            tdSql.query(type_sql)
G
Ganlin Zhao 已提交
190

C
cpwu 已提交
191
    def basic_ceil_function(self, dbname="db"):
W
wenzhouwww@live.cn 已提交
192

G
Ganlin Zhao 已提交
193
        # basic query
C
cpwu 已提交
194
        tdSql.query(f"select c1 from {dbname}.ct3")
W
wenzhouwww@live.cn 已提交
195
        tdSql.checkRows(0)
C
cpwu 已提交
196
        tdSql.query(f"select c1 from {dbname}.t1")
W
wenzhouwww@live.cn 已提交
197
        tdSql.checkRows(12)
C
cpwu 已提交
198
        tdSql.query(f"select c1 from {dbname}.stb1")
W
wenzhouwww@live.cn 已提交
199 200
        tdSql.checkRows(25)

C
cpwu 已提交
201 202
        # used for empty table  , {dbname}.ct3 is empty
        tdSql.query(f"select ceil(c1) from {dbname}.ct3")
W
wenzhouwww@live.cn 已提交
203
        tdSql.checkRows(0)
C
cpwu 已提交
204
        tdSql.query(f"select ceil(c2) from {dbname}.ct3")
W
wenzhouwww@live.cn 已提交
205
        tdSql.checkRows(0)
C
cpwu 已提交
206
        tdSql.query(f"select ceil(c3) from {dbname}.ct3")
W
wenzhouwww@live.cn 已提交
207
        tdSql.checkRows(0)
C
cpwu 已提交
208
        tdSql.query(f"select ceil(c4) from {dbname}.ct3")
W
wenzhouwww@live.cn 已提交
209
        tdSql.checkRows(0)
C
cpwu 已提交
210
        tdSql.query(f"select ceil(c5) from {dbname}.ct3")
W
wenzhouwww@live.cn 已提交
211
        tdSql.checkRows(0)
C
cpwu 已提交
212
        tdSql.query(f"select ceil(c6) from {dbname}.ct3")
G
Ganlin Zhao 已提交
213

W
wenzhouwww@live.cn 已提交
214
        # used for regular table
C
cpwu 已提交
215
        tdSql.query(f"select ceil(c1) from {dbname}.t1")
W
wenzhouwww@live.cn 已提交
216 217 218 219 220
        tdSql.checkData(0, 0, None)
        tdSql.checkData(1 , 0, 1)
        tdSql.checkData(3 , 0, 3)
        tdSql.checkData(5 , 0, None)

C
cpwu 已提交
221
        tdSql.query(f"select c1, c2, c3 , c4, c5 from {dbname}.t1")
W
wenzhouwww@live.cn 已提交
222 223 224
        tdSql.checkData(1, 4, 1.11000)
        tdSql.checkData(3, 3, 33)
        tdSql.checkData(5, 4, None)
C
cpwu 已提交
225
        tdSql.query(f"select ts,c1, c2, c3 , c4, c5 from {dbname}.t1")
W
wenzhouwww@live.cn 已提交
226 227 228 229
        tdSql.checkData(1, 5, 1.11000)
        tdSql.checkData(3, 4, 33)
        tdSql.checkData(5, 5, None)

C
cpwu 已提交
230
        self.check_result_auto( f"select c1, c2, c3 , c4, c5 from {dbname}.t1", f"select (c1), ceil(c2) ,ceil(c3), ceil(c4), ceil(c5) from {dbname}.t1")
G
Ganlin Zhao 已提交
231

W
wenzhouwww@live.cn 已提交
232
        # used for sub table
C
cpwu 已提交
233
        tdSql.query(f"select ceil(c1) from {dbname}.ct1")
W
wenzhouwww@live.cn 已提交
234 235 236 237 238
        tdSql.checkData(0, 0, 8)
        tdSql.checkData(1 , 0, 7)
        tdSql.checkData(3 , 0, 5)
        tdSql.checkData(5 , 0, 4)

C
cpwu 已提交
239 240 241
        tdSql.query(f"select ceil(c1) from {dbname}.ct1")
        self.check_result_auto( f"select c1, c2, c3 , c4, c5 from {dbname}.ct1", f"select (c1), ceil(c2) ,ceil(c3), ceil(c4), ceil(c5) from {dbname}.ct1")
        self.check_result_auto(f"select ceil(ceil(ceil(ceil(ceil(ceil(ceil(ceil(ceil(ceil(c1)))))))))) nest_col_func from {dbname}.ct1;", f"select c1 from {dbname}.ct1" )
W
wenzhouwww@live.cn 已提交
242

G
Ganlin Zhao 已提交
243 244
        # used for stable table

C
cpwu 已提交
245
        tdSql.query(f"select ceil(c1) from {dbname}.stb1")
W
wenzhouwww@live.cn 已提交
246
        tdSql.checkRows(25)
C
cpwu 已提交
247 248
        self.check_result_auto( f"select c1, c2, c3 , c4, c5 from {dbname}.ct4 ", f"select (c1), ceil(c2) ,ceil(c3), ceil(c4), ceil(c5) from {dbname}.ct4")
        self.check_result_auto(f"select ceil(ceil(ceil(ceil(ceil(ceil(ceil(ceil(ceil(ceil(c1)))))))))) nest_col_func from {dbname}.ct4;" , f"select c1 from {dbname}.ct4" )
G
Ganlin Zhao 已提交
249

W
wenzhouwww@live.cn 已提交
250 251

        # used for not exists table
C
cpwu 已提交
252 253 254
        tdSql.error(f"select ceil(c1) from {dbname}.stbbb1")
        tdSql.error(f"select ceil(c1) from {dbname}.tbname")
        tdSql.error(f"select ceil(c1) from {dbname}.ct5")
W
wenzhouwww@live.cn 已提交
255

G
Ganlin Zhao 已提交
256
        # mix with common col
C
cpwu 已提交
257
        tdSql.query(f"select c1, ceil(c1) from {dbname}.ct1")
W
wenzhouwww@live.cn 已提交
258 259 260 261
        tdSql.checkData(0 , 0 ,8)
        tdSql.checkData(0 , 1 ,8)
        tdSql.checkData(4 , 0 ,0)
        tdSql.checkData(4 , 1 ,0)
C
cpwu 已提交
262
        tdSql.query(f"select c1, ceil(c1) from {dbname}.ct4")
W
wenzhouwww@live.cn 已提交
263 264 265 266 267 268
        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 已提交
269
        tdSql.query(f"select c1, ceil(c1) from {dbname}.ct4 ")
W
wenzhouwww@live.cn 已提交
270 271 272 273 274 275
        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 已提交
276
        tdSql.query(f"select c1, ceil(c1),c5, ceil(c5) from {dbname}.ct4 ")
W
wenzhouwww@live.cn 已提交
277 278 279 280
        tdSql.checkData(0 , 0 ,None)
        tdSql.checkData(0 , 1 ,None)
        tdSql.checkData(0 , 2 ,None)
        tdSql.checkData(0 , 3 ,None)
G
Ganlin Zhao 已提交
281

W
wenzhouwww@live.cn 已提交
282 283 284
        tdSql.checkData(3 , 0 , 6)
        tdSql.checkData(3 , 1 , 6)
        tdSql.checkData(3 , 2 ,6.66000)
W
wenzhouwww@live.cn 已提交
285
        tdSql.checkData(3 , 3 ,7.00000)
W
wenzhouwww@live.cn 已提交
286

C
cpwu 已提交
287
        tdSql.query(f"select c1, ceil(c1),c5, floor(c5) from {dbname}.stb1 ")
W
wenzhouwww@live.cn 已提交
288 289

        # mix with agg functions , not support
C
cpwu 已提交
290 291 292 293 294 295
        tdSql.error(f"select c1, ceil(c1),c5, count(c5) from {dbname}.stb1 ")
        tdSql.error(f"select c1, ceil(c1),c5, count(c5) from {dbname}.ct1 ")
        tdSql.error(f"select ceil(c1), count(c5) from {dbname}.stb1 ")
        tdSql.error(f"select ceil(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 已提交
296 297 298

        # agg functions mix with agg functions

C
cpwu 已提交
299 300
        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 已提交
301

G
Ganlin Zhao 已提交
302

W
wenzhouwww@live.cn 已提交
303
        # bug fix for count
C
cpwu 已提交
304
        tdSql.query(f"select count(c1) from {dbname}.ct4 ")
W
wenzhouwww@live.cn 已提交
305
        tdSql.checkData(0,0,9)
C
cpwu 已提交
306
        tdSql.query(f"select count(*) from {dbname}.ct4 ")
W
wenzhouwww@live.cn 已提交
307
        tdSql.checkData(0,0,12)
C
cpwu 已提交
308
        tdSql.query(f"select count(c1) from {dbname}.stb1 ")
W
wenzhouwww@live.cn 已提交
309
        tdSql.checkData(0,0,22)
C
cpwu 已提交
310
        tdSql.query(f"select count(*) from {dbname}.stb1 ")
W
wenzhouwww@live.cn 已提交
311 312
        tdSql.checkData(0,0,25)

G
Ganlin Zhao 已提交
313
        # bug fix for compute
C
cpwu 已提交
314
        tdSql.query(f"select c1, abs(c1) -0 ,ceil(c1)-0 from {dbname}.ct4 ")
W
wenzhouwww@live.cn 已提交
315 316 317 318 319 320 321
        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 已提交
322
        tdSql.query(f" select c1, abs(c1) -0 ,ceil(c1-0.1)-0.1 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, 7.900000000)

C
cpwu 已提交
330 331 332
    def abs_func_filter(self,dbname="db"):
        tdSql.execute(f"use {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 已提交
333 334 335 336 337 338 339
        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 已提交
340
        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 已提交
341 342 343 344 345 346 347
        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 已提交
348
        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 已提交
349 350 351 352 353 354 355
        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 已提交
356
        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 已提交
357 358 359 360 361 362 363
        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)
G
Ganlin Zhao 已提交
364

W
wenzhouwww@live.cn 已提交
365 366
    def ceil_Arithmetic(self):
        pass
G
Ganlin Zhao 已提交
367

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

C
cpwu 已提交
370 371
        tdSql.execute(f"drop database if exists {dbname}")
        tdSql.execute(f"create database if not exists {dbname}")
W
wenzhouwww@live.cn 已提交
372
        time.sleep(3)
C
cpwu 已提交
373
        tdSql.execute(f"use {dbname}")
W
wenzhouwww@live.cn 已提交
374
        tdSql.execute(
C
cpwu 已提交
375
            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 已提交
376
        )
C
cpwu 已提交
377
        tdSql.execute(f'create table {dbname}.sub1_bound using {dbname}.stb_bound tags ( 1 )')
W
wenzhouwww@live.cn 已提交
378
        tdSql.execute(
C
cpwu 已提交
379
                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 已提交
380 381
            )
        tdSql.execute(
C
cpwu 已提交
382
                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 已提交
383 384 385
            )

        tdSql.execute(
C
cpwu 已提交
386
                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 已提交
387 388 389
            )

        tdSql.execute(
C
cpwu 已提交
390
                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 已提交
391 392 393
            )

        tdSql.execute(
C
cpwu 已提交
394
                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 已提交
395
            )
G
Ganlin Zhao 已提交
396

W
wenzhouwww@live.cn 已提交
397
        tdSql.error(
C
cpwu 已提交
398
                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 已提交
399
            )
C
cpwu 已提交
400 401 402
        self.check_result_auto( f"select c1, c2, c3 , c4, c5 ,c6 from {dbname}.sub1_bound ", f"select ceil(c1), ceil(c2) ,ceil(c3), ceil(c4), ceil(c5) ,ceil(c6) from {dbname}.sub1_bound")
        self.check_result_auto( f"select c1, c2, c3 , c3, c2 ,c1 from {dbname}.sub1_bound ", f"select ceil(c1), ceil(c2) ,ceil(c3), ceil(c3), ceil(c2) ,ceil(c1) from {dbname}.sub1_bound")
        self.check_result_auto(f"select ceil(ceil(ceil(ceil(ceil(ceil(ceil(ceil(ceil(ceil(c1)))))))))) nest_col_func from {dbname}.sub1_bound;" , f"select ceil(c1) from {dbname}.sub1_bound" )
G
Ganlin Zhao 已提交
403

W
wenzhouwww@live.cn 已提交
404
        # check basic elem for table per row
C
cpwu 已提交
405
        tdSql.query(f"select ceil(c1+0.2) ,ceil(c2) , ceil(c3+0.3) , ceil(c4-0.3), ceil(c5/2), ceil(c6/2) from {dbname}.sub1_bound ")
W
wenzhouwww@live.cn 已提交
406 407 408 409 410 411 412 413 414 415
        tdSql.checkData(0, 0, 2147483648.000000000)
        tdSql.checkData(0, 2, 32768.000000000)
        tdSql.checkData(0, 3, 127.000000000)
        tdSql.checkData(0, 4, 169999997607218212453866206899682148352.000000000)

        tdSql.checkData(4, 0, -2147483642.000000000)
        tdSql.checkData(4, 2, -32762.000000000)
        tdSql.checkData(4, 3, -123.000000000)
        tdSql.checkData(4, 4, -169499995645668991474575059260979281920.000000000)

C
cpwu 已提交
416
        self.check_result_auto(f"select c1+1 ,c2 , c3*1 , c4/2, c5/2, c6 from {dbname}.sub1_bound" , f"select ceil(c1+1) ,ceil(c2) , ceil(c3*1) , ceil(c4/2), ceil(c5)/2, ceil(c6) from {dbname}.sub1_bound ")
G
Ganlin Zhao 已提交
417

C
cpwu 已提交
418 419 420 421 422 423
    def support_super_table_test(self, dbname="db"):
        tdSql.execute(f" use {dbname} ")
        self.check_result_auto( f" select c5 from {dbname}.stb1 order by ts " , f"select ceil(c5) from {dbname}.stb1 order by ts" )
        self.check_result_auto( f" select c5 from {dbname}.stb1 order by tbname " , f"select ceil(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 ceil(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 ceil(c5) from {dbname}.stb1 where c1 > 0 order by tbname" )
424

C
cpwu 已提交
425 426 427 428
        self.check_result_auto( f" select t1,c5 from {dbname}.stb1 order by ts " , f"select ceil(t1), ceil(c5) from {dbname}.stb1 order by ts" )
        self.check_result_auto( f" select t1,c5 from {dbname}.stb1 order by tbname " , f"select ceil(t1) ,ceil(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 ceil(t1) ,ceil(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 ceil(t1) , ceil(c5) from {dbname}.stb1 where c1 > 0 order by tbname" )
429
        pass
W
wenzhouwww@live.cn 已提交
430 431 432 433 434

    def run(self):  # sourcery skip: extract-duplicate-method, remove-redundant-fstring
        tdSql.prepare()

        tdLog.printNoPrefix("==========step1:create table ==============")
G
Ganlin Zhao 已提交
435

W
wenzhouwww@live.cn 已提交
436 437
        self.prepare_datas()

G
Ganlin Zhao 已提交
438
        tdLog.printNoPrefix("==========step2:test errors ==============")
W
wenzhouwww@live.cn 已提交
439 440

        self.test_errors()
G
Ganlin Zhao 已提交
441 442

        tdLog.printNoPrefix("==========step3:support types ============")
W
wenzhouwww@live.cn 已提交
443 444 445

        self.support_types()

G
Ganlin Zhao 已提交
446
        tdLog.printNoPrefix("==========step4: ceil basic query ============")
W
wenzhouwww@live.cn 已提交
447 448 449

        self.basic_ceil_function()

G
Ganlin Zhao 已提交
450
        tdLog.printNoPrefix("==========step5: ceil boundary query ============")
W
wenzhouwww@live.cn 已提交
451 452 453

        self.check_boundary_values()

G
Ganlin Zhao 已提交
454
        tdLog.printNoPrefix("==========step6: ceil filter query ============")
W
wenzhouwww@live.cn 已提交
455 456 457

        self.abs_func_filter()

458 459 460 461
        tdLog.printNoPrefix("==========step7: check ceil result of  stable query ============")

        self.support_super_table_test()

W
wenzhouwww@live.cn 已提交
462 463 464 465 466 467
    def stop(self):
        tdSql.close()
        tdLog.success(f"{__file__} successfully executed")

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