ceil.py 21.5 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):
17
        self.replicaVar = int(replicaVar)
W
wenzhouwww@live.cn 已提交
18 19
        tdLog.debug(f"start to excute {__file__}")
        tdSql.init(conn.cursor())
G
Ganlin Zhao 已提交
20

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

W
wenzhouwww@live.cn 已提交
71 72 73 74 75 76
    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 已提交
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 = ceil(elem)
                row_check.append(elem)
            auto_result.append(row_check)

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

C
cpwu 已提交
94
    def test_errors(self, dbname="db"):
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
            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 已提交
112 113 114
        ]
        for error_sql in error_sql_lists:
            tdSql.error(error_sql)
G
Ganlin Zhao 已提交
115

C
cpwu 已提交
116
    def support_types(self, dbname="db"):
W
wenzhouwww@live.cn 已提交
117
        type_error_sql_lists = [
C
cpwu 已提交
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
            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 已提交
144 145

        ]
G
Ganlin Zhao 已提交
146

W
wenzhouwww@live.cn 已提交
147 148
        for type_sql in type_error_sql_lists:
            tdSql.error(type_sql)
G
Ganlin Zhao 已提交
149 150


W
wenzhouwww@live.cn 已提交
151
        type_sql_lists = [
C
cpwu 已提交
152 153 154 155 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
            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 已提交
182 183 184 185
        ]

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

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

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

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

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

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

C
cpwu 已提交
226
        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 已提交
227

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

C
cpwu 已提交
235 236 237
        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 已提交
238

G
Ganlin Zhao 已提交
239 240
        # used for stable table

C
cpwu 已提交
241
        tdSql.query(f"select ceil(c1) from {dbname}.stb1")
W
wenzhouwww@live.cn 已提交
242
        tdSql.checkRows(25)
C
cpwu 已提交
243 244
        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 已提交
245

W
wenzhouwww@live.cn 已提交
246 247

        # used for not exists table
C
cpwu 已提交
248 249 250
        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 已提交
251

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

W
wenzhouwww@live.cn 已提交
278 279 280
        tdSql.checkData(3 , 0 , 6)
        tdSql.checkData(3 , 1 , 6)
        tdSql.checkData(3 , 2 ,6.66000)
W
wenzhouwww@live.cn 已提交
281
        tdSql.checkData(3 , 3 ,7.00000)
W
wenzhouwww@live.cn 已提交
282

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

        # mix with agg functions , not support
C
cpwu 已提交
286 287 288 289 290 291
        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 已提交
292 293 294

        # agg functions mix with agg functions

C
cpwu 已提交
295 296
        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 已提交
297

G
Ganlin Zhao 已提交
298

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

G
Ganlin Zhao 已提交
309
        # bug fix for compute
C
cpwu 已提交
310
        tdSql.query(f"select c1, abs(c1) -0 ,ceil(c1)-0 from {dbname}.ct4 ")
W
wenzhouwww@live.cn 已提交
311 312 313 314 315 316 317
        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 已提交
318
        tdSql.query(f" select c1, abs(c1) -0 ,ceil(c1-0.1)-0.1 from {dbname}.ct4")
W
wenzhouwww@live.cn 已提交
319 320 321 322 323 324 325
        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 已提交
326 327 328
    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 已提交
329 330 331 332 333 334 335
        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 已提交
336
        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 已提交
337 338 339 340 341 342 343
        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 已提交
344
        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 已提交
345 346 347 348 349 350 351
        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 已提交
352
        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 已提交
353 354 355 356 357 358 359
        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 已提交
360

W
wenzhouwww@live.cn 已提交
361 362
    def ceil_Arithmetic(self):
        pass
G
Ganlin Zhao 已提交
363

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

C
cpwu 已提交
366 367
        tdSql.execute(f"drop database if exists {dbname}")
        tdSql.execute(f"create database if not exists {dbname}")
W
wenzhouwww@live.cn 已提交
368
        time.sleep(3)
C
cpwu 已提交
369
        tdSql.execute(f"use {dbname}")
W
wenzhouwww@live.cn 已提交
370
        tdSql.execute(
C
cpwu 已提交
371
            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 已提交
372
        )
C
cpwu 已提交
373
        tdSql.execute(f'create table {dbname}.sub1_bound using {dbname}.stb_bound tags ( 1 )')
W
wenzhouwww@live.cn 已提交
374
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
375
                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 已提交
376 377
            )
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
378
                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 已提交
379 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(
W
update  
wenzhouwww@live.cn 已提交
386
                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 已提交
387 388 389
            )

        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
390
                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 已提交
391
            )
G
Ganlin Zhao 已提交
392

W
wenzhouwww@live.cn 已提交
393
        tdSql.error(
W
update  
wenzhouwww@live.cn 已提交
394
                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 已提交
395
            )
C
cpwu 已提交
396 397 398
        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 已提交
399

W
wenzhouwww@live.cn 已提交
400
        # check basic elem for table per row
C
cpwu 已提交
401
        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 已提交
402 403 404 405 406 407 408 409 410 411
        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 已提交
412
        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 已提交
413

C
cpwu 已提交
414 415 416 417 418 419
    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" )
420

C
cpwu 已提交
421 422 423 424
        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" )
425
        pass
W
wenzhouwww@live.cn 已提交
426 427 428 429 430

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

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

W
wenzhouwww@live.cn 已提交
432 433
        self.prepare_datas()

G
Ganlin Zhao 已提交
434
        tdLog.printNoPrefix("==========step2:test errors ==============")
W
wenzhouwww@live.cn 已提交
435 436

        self.test_errors()
G
Ganlin Zhao 已提交
437 438

        tdLog.printNoPrefix("==========step3:support types ============")
W
wenzhouwww@live.cn 已提交
439 440 441

        self.support_types()

G
Ganlin Zhao 已提交
442
        tdLog.printNoPrefix("==========step4: ceil basic query ============")
W
wenzhouwww@live.cn 已提交
443 444 445

        self.basic_ceil_function()

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

        self.check_boundary_values()

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

        self.abs_func_filter()

454 455 456 457
        tdLog.printNoPrefix("==========step7: check ceil result of  stable query ============")

        self.support_super_table_test()

W
wenzhouwww@live.cn 已提交
458 459 460 461 462 463
    def stop(self):
        tdSql.close()
        tdLog.success(f"{__file__} successfully executed")

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