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

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

class TDTestCase:

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

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

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

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

C
cpwu 已提交
46 47 48
        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 已提交
49 50

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

W
wenzhouwww@live.cn 已提交
67 68 69 70 71 72
    def check_result_auto(self ,origin_query , round_query):
        pass
        round_result = tdSql.getResult(round_query)
        origin_result = tdSql.getResult(origin_query)

        auto_result =[]
G
Ganlin Zhao 已提交
73

W
wenzhouwww@live.cn 已提交
74 75 76 77 78 79 80 81 82 83
        for row in origin_result:
            row_check = []
            for elem in row:
                if elem == None:
                    elem = None
                else:
                    elem = round(elem)
                row_check.append(elem)
            auto_result.append(row_check)

84
        tdSql.query(round_query)
W
wenzhouwww@live.cn 已提交
85 86
        for row_index , row in enumerate(round_result):
            for col_index , elem in enumerate(row):
87 88 89
                tdSql.checkData(row_index , col_index ,auto_result[row_index][col_index])
                    
       
G
Ganlin Zhao 已提交
90

C
cpwu 已提交
91
    def test_errors(self, dbname="db"):
W
wenzhouwww@live.cn 已提交
92
        error_sql_lists = [
C
cpwu 已提交
93 94 95 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
            f"select round from {dbname}.t1",
            # f"select round(-+--+c1) from {dbname}.t1",
            # f"select +-round(c1) from {dbname}.t1",
            # f"select ++-round(c1) from {dbname}.t1",
            # f"select ++--round(c1) from {dbname}.t1",
            # f"select - -round(c1)*0 from {dbname}.t1",
            # f"select round(tbname+1) from {dbname}.t1 ",
            f"select round(123--123)==1 from {dbname}.t1",
            f"select round(c1) as 'd1' from {dbname}.t1",
            f"select round(c1 ,c2 ) from {dbname}.t1",
            f"select round(c1 ,NULL) from {dbname}.t1",
            f"select round(,) from {dbname}.t1;",
            f"select round(round(c1) ab from {dbname}.t1)",
            f"select round(c1) as int from {dbname}.t1",
            f"select round from {dbname}.stb1",
            # f"select round(-+--+c1) from {dbname}.stb1",
            # f"select +-round(c1) from {dbname}.stb1",
            # f"select ++-round(c1) from {dbname}.stb1",
            # f"select ++--round(c1) from {dbname}.stb1",
            # f"select - -round(c1)*0 from {dbname}.stb1",
            # f"select round(tbname+1) from {dbname}.stb1 ",
            f"select round(123--123)==1 from {dbname}.stb1",
            f"select round(c1) as 'd1' from {dbname}.stb1",
            f"select round(c1 ,c2 ) from {dbname}.stb1",
            f"select round(c1 ,NULL) from {dbname}.stb1",
            f"select round(,) from {dbname}.stb1;",
            f"select round(round(c1) ab from {dbname}.stb1)",
            f"select round(c1) as int from {dbname}.stb1"
W
wenzhouwww@live.cn 已提交
121 122 123
        ]
        for error_sql in error_sql_lists:
            tdSql.error(error_sql)
G
Ganlin Zhao 已提交
124

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

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

            f"select round(ts) from {dbname}.tbname",
            f"select round(c9) from {dbname}.tbname"
W
wenzhouwww@live.cn 已提交
153 154

        ]
G
Ganlin Zhao 已提交
155

W
wenzhouwww@live.cn 已提交
156 157
        for type_sql in type_error_sql_lists:
            tdSql.error(type_sql)
G
Ganlin Zhao 已提交
158 159


W
wenzhouwww@live.cn 已提交
160
        type_sql_lists = [
C
cpwu 已提交
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 186 187 188 189 190
            f"select round(c1) from {dbname}.t1",
            f"select round(c2) from {dbname}.t1",
            f"select round(c3) from {dbname}.t1",
            f"select round(c4) from {dbname}.t1",
            f"select round(c5) from {dbname}.t1",
            f"select round(c6) from {dbname}.t1",

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

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

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

            f"select round(c6) as alisb from {dbname}.stb1",
            f"select round(c6) alisb from {dbname}.stb1",
W
wenzhouwww@live.cn 已提交
191 192 193 194
        ]

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

C
cpwu 已提交
196
    def basic_round_function(self, dbname="db"):
W
wenzhouwww@live.cn 已提交
197

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

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

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

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

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

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

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

G
Ganlin Zhao 已提交
248 249
        # used for stable table

C
cpwu 已提交
250
        tdSql.query(f"select round(c1) from {dbname}.stb1")
W
wenzhouwww@live.cn 已提交
251
        tdSql.checkRows(25)
C
cpwu 已提交
252 253
        self.check_result_auto( f"select c1, c2, c3 , c4, c5 from {dbname}.ct4 ", f"select (c1), round(c2) ,round(c3), round(c4), round(c5) from {dbname}.ct4")
        self.check_result_auto(f"select round(round(round(round(round(round(round(round(round(round(c1)))))))))) nest_col_func from {dbname}.ct4;" , f"select c1 from {dbname}.ct4" )
G
Ganlin Zhao 已提交
254

W
wenzhouwww@live.cn 已提交
255 256

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

G
Ganlin Zhao 已提交
261
        # mix with common col
C
cpwu 已提交
262
        tdSql.query(f"select c1, round(c1) from {dbname}.ct1")
W
wenzhouwww@live.cn 已提交
263 264 265 266
        tdSql.checkData(0 , 0 ,8)
        tdSql.checkData(0 , 1 ,8)
        tdSql.checkData(4 , 0 ,0)
        tdSql.checkData(4 , 1 ,0)
C
cpwu 已提交
267
        tdSql.query(f"select c1, round(c1) from {dbname}.ct4")
W
wenzhouwww@live.cn 已提交
268 269 270 271 272 273
        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 已提交
274
        tdSql.query(f"select c1, round(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)

        # mix with common functions
C
cpwu 已提交
281
        tdSql.query(f"select c1, round(c1),c5, round(c5) from {dbname}.ct4 ")
W
wenzhouwww@live.cn 已提交
282 283 284 285
        tdSql.checkData(0 , 0 ,None)
        tdSql.checkData(0 , 1 ,None)
        tdSql.checkData(0 , 2 ,None)
        tdSql.checkData(0 , 3 ,None)
G
Ganlin Zhao 已提交
286

W
wenzhouwww@live.cn 已提交
287 288 289 290 291 292 293 294 295 296
        tdSql.checkData(3 , 0 , 6)
        tdSql.checkData(3 , 1 , 6)
        tdSql.checkData(3 , 2 ,6.66000)
        tdSql.checkData(3 , 3 ,7.00000)

        tdSql.checkData(6 , 0 , 4)
        tdSql.checkData(6 , 1 , 4)
        tdSql.checkData(6 , 2 ,4.44000)
        tdSql.checkData(6 , 3 ,4.00000)

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

        # mix with agg functions , not support
C
cpwu 已提交
300 301 302 303 304 305
        tdSql.error(f"select c1, round(c1),c5, count(c5) from {dbname}.stb1 ")
        tdSql.error(f"select c1, round(c1),c5, count(c5) from {dbname}.ct1 ")
        tdSql.error(f"select round(c1), count(c5) from {dbname}.stb1 ")
        tdSql.error(f"select round(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 已提交
306 307 308

        # agg functions mix with agg functions

C
cpwu 已提交
309 310
        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 已提交
311

G
Ganlin Zhao 已提交
312

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

G
Ganlin Zhao 已提交
323
        # bug fix for compute
C
cpwu 已提交
324
        tdSql.query(f"select c1, abs(c1) -0 ,round(c1)-0 from {dbname}.ct4 ")
W
wenzhouwww@live.cn 已提交
325 326 327 328 329 330 331
        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 已提交
332
        tdSql.query(f"select c1, abs(c1) -0 ,round(c1-0.1)-0.1 from {dbname}.ct4")
W
wenzhouwww@live.cn 已提交
333 334 335 336 337 338 339
        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 已提交
340 341
    def abs_func_filter(self, dbname="db"):
        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 已提交
342 343 344 345 346 347 348
        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 已提交
349
        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 已提交
350 351 352 353 354 355 356
        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 已提交
357
        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 已提交
358 359 360 361 362 363 364
        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 已提交
365
        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) , round(abs(c1))-0.5  from {dbname}.ct4 where c1>log(c1,2) limit 1 ")
W
wenzhouwww@live.cn 已提交
366 367 368 369 370 371 372 373
        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)
        tdSql.checkData(0,6,7.500000000)
G
Ganlin Zhao 已提交
374

W
wenzhouwww@live.cn 已提交
375 376
    def round_Arithmetic(self):
        pass
G
Ganlin Zhao 已提交
377

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

C
cpwu 已提交
380 381
        tdSql.execute(f"drop database if exists {dbname}")
        tdSql.execute(f"create database if not exists {dbname}")
W
wenzhouwww@live.cn 已提交
382
        tdSql.execute(
C
cpwu 已提交
383
            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 已提交
384
        )
C
cpwu 已提交
385
        tdSql.execute(f'create table {dbname}.sub1_bound using {dbname}.stb_bound tags ( 1 )')
W
wenzhouwww@live.cn 已提交
386
        tdSql.execute(
C
cpwu 已提交
387
                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 已提交
388 389
            )
        tdSql.execute(
C
cpwu 已提交
390
                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 已提交
391 392 393
            )

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

        tdSql.execute(
C
cpwu 已提交
398
                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 已提交
399 400 401
            )

        tdSql.execute(
C
cpwu 已提交
402
                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 已提交
403
            )
G
Ganlin Zhao 已提交
404

W
wenzhouwww@live.cn 已提交
405
        tdSql.error(
C
cpwu 已提交
406
                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 已提交
407
            )
C
cpwu 已提交
408 409 410
        self.check_result_auto( f"select c1, c2, c3 , c4, c5 ,c6 from {dbname}.sub1_bound ", f"select round(c1), round(c2) ,round(c3), round(c4), round(c5) ,round(c6) from {dbname}.sub1_bound")
        self.check_result_auto( f"select c1, c2, c3 , c3, c2 ,c1 from {dbname}.sub1_bound ", f"select round(c1), round(c2) ,round(c3), round(c3), round(c2) ,round(c1) from {dbname}.sub1_bound")
        self.check_result_auto(f"select round(round(round(round(round(round(round(round(round(round(c1)))))))))) nest_col_func from {dbname}.sub1_bound;" , f"select round(c1) from {dbname}.sub1_bound" )
G
Ganlin Zhao 已提交
411

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

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

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

C
cpwu 已提交
426 427 428 429 430
    def support_super_table_test(self, dbname="db"):
        self.check_result_auto( f"select c5 from {dbname}.stb1 order by ts " , f"select round(c5) from {dbname}.stb1 order by ts" )
        self.check_result_auto( f"select c5 from {dbname}.stb1 order by tbname " , f"select round(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 round(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 round(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 round(t1), round(c5) from {dbname}.stb1 order by ts" )
        self.check_result_auto( f"select t1,c5 from {dbname}.stb1 order by tbname " , f"select round(t1) ,round(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 round(t1) ,round(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 round(t1) , round(c5) from {dbname}.stb1 where c1 > 0 order by tbname" )
436
        pass
G
Ganlin Zhao 已提交
437 438


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

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

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

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

        self.test_errors()
G
Ganlin Zhao 已提交
449 450

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

        self.support_types()

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

        self.basic_round_function()

G
Ganlin Zhao 已提交
458
        tdLog.printNoPrefix("==========step5: round boundary query ============")
W
wenzhouwww@live.cn 已提交
459 460 461

        self.check_boundary_values()

G
Ganlin Zhao 已提交
462
        tdLog.printNoPrefix("==========step6: round filter query ============")
W
wenzhouwww@live.cn 已提交
463 464 465

        self.abs_func_filter()

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

        self.support_super_table_test()

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

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