sqrt.py 25.5 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11
import taos
import sys
import datetime
import inspect
import math
from util.log import *
from util.sql import *
from util.cases import *


class TDTestCase:
C
cpwu 已提交
12

13 14 15
    def init(self, conn, powSql):
        tdLog.debug(f"start to excute {__file__}")
        tdSql.init(conn.cursor())
G
Ganlin Zhao 已提交
16

C
cpwu 已提交
17
    def prepare_datas(self, dbname="db"):
18
        tdSql.execute(
C
cpwu 已提交
19
            f'''create table {dbname}.stb1
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

25
        tdSql.execute(
C
cpwu 已提交
26 27
            f'''
            create table {dbname}.t1
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} )')
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 )"
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 )"
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 )")
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  ) ")
49 50

        tdSql.execute(
C
cpwu 已提交
51
            f'''insert into {dbname}.t1 values
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

67 68 69 70 71 72
    def check_result_auto_sqrt(self ,origin_query , pow_query):

        pow_result = tdSql.getResult(pow_query)
        origin_result = tdSql.getResult(origin_query)

        auto_result =[]
G
Ganlin Zhao 已提交
73

74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
        for row in origin_result:
            row_check = []
            for elem in row:
                if elem == None:
                    elem = None
                elif elem < 0:
                    elem = None
                else:
                    elem = math.sqrt(elem)
                row_check.append(elem)
            auto_result.append(row_check)

        check_status = True

        for row_index , row in enumerate(pow_result):
            for col_index , elem in enumerate(row):
                if auto_result[row_index][col_index] == None  and not (auto_result[row_index][col_index] == None and elem == None):
                    check_status = False
                elif auto_result[row_index][col_index] != None  and (auto_result[row_index][col_index] - elem > 0.00000001):
G
Ganlin Zhao 已提交
93
                    check_status = False
94 95 96 97 98 99 100
                else:
                    pass
        if not check_status:
            tdLog.notice("sqrt function value has not as expected , sql is \"%s\" "%pow_query )
            sys.exit(1)
        else:
            tdLog.info("sqrt value check pass , it work as expected ,sql is \"%s\"   "%pow_query )
G
Ganlin Zhao 已提交
101

C
cpwu 已提交
102
    def test_errors(self, dbname="db"):
103
        error_sql_lists = [
C
cpwu 已提交
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
            f"select sqrt from {dbname}.t1",
            # f"select sqrt(-+--+c1 ) from {dbname}.t1",
            # f"select +-sqrt(c1) from {dbname}.t1",
            # f"select ++-sqrt(c1) from {dbname}.t1",
            # f"select ++--sqrt(c1) from {dbname}.t1",
            # f"select - -sqrt(c1)*0 from {dbname}.t1",
            # f"select sqrt(tbname+1) from {dbname}.t1 ",
            f"select sqrt(123--123)==1 from {dbname}.t1",
            f"select sqrt(c1) as 'd1' from {dbname}.t1",
            f"select sqrt(c1 ,c2) from {dbname}.t1",
            f"select sqrt(c1 ,NULL ) from {dbname}.t1",
            f"select sqrt(,) from {dbname}.t1;",
            f"select sqrt(sqrt(c1) ab from {dbname}.t1)",
            f"select sqrt(c1 ) as int from {dbname}.t1",
            f"select sqrt from {dbname}.stb1",
            # f"select sqrt(-+--+c1) from {dbname}.stb1",
            # f"select +-sqrt(c1) from {dbname}.stb1",
            # f"select ++-sqrt(c1) from {dbname}.stb1",
            # f"select ++--sqrt(c1) from {dbname}.stb1",
            # f"select - -sqrt(c1)*0 from {dbname}.stb1",
            # f"select sqrt(tbname+1) from {dbname}.stb1 ",
            f"select sqrt(123--123)==1 from {dbname}.stb1",
            f"select sqrt(c1) as 'd1' from {dbname}.stb1",
            f"select sqrt(c1 ,c2 ) from {dbname}.stb1",
            f"select sqrt(c1 ,NULL) from {dbname}.stb1",
            f"select sqrt(,) from {dbname}.stb1;",
            f"select sqrt(sqrt(c1) ab from {dbname}.stb1)",
            f"select sqrt(c1) as int from {dbname}.stb1"
132 133 134
        ]
        for error_sql in error_sql_lists:
            tdSql.error(error_sql)
G
Ganlin Zhao 已提交
135

C
cpwu 已提交
136
    def support_types(self, dbname="db"):
137
        type_error_sql_lists = [
C
cpwu 已提交
138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
            f"select sqrt(ts) from {dbname}.t1" ,
            f"select sqrt(c7) from {dbname}.t1",
            f"select sqrt(c8) from {dbname}.t1",
            f"select sqrt(c9) from {dbname}.t1",
            f"select sqrt(ts) from {dbname}.ct1" ,
            f"select sqrt(c7) from {dbname}.ct1",
            f"select sqrt(c8) from {dbname}.ct1",
            f"select sqrt(c9) from {dbname}.ct1",
            f"select sqrt(ts) from {dbname}.ct3" ,
            f"select sqrt(c7) from {dbname}.ct3",
            f"select sqrt(c8) from {dbname}.ct3",
            f"select sqrt(c9) from {dbname}.ct3",
            f"select sqrt(ts) from {dbname}.ct4" ,
            f"select sqrt(c7) from {dbname}.ct4",
            f"select sqrt(c8) from {dbname}.ct4",
            f"select sqrt(c9) from {dbname}.ct4",
            f"select sqrt(ts) from {dbname}.stb1" ,
            f"select sqrt(c7) from {dbname}.stb1",
            f"select sqrt(c8) from {dbname}.stb1",
            f"select sqrt(c9) from {dbname}.stb1" ,

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

            f"select sqrt(ts) from {dbname}.tbname",
            f"select sqrt(c9) from {dbname}.tbname"
164 165

        ]
G
Ganlin Zhao 已提交
166

167 168
        for type_sql in type_error_sql_lists:
            tdSql.error(type_sql)
G
Ganlin Zhao 已提交
169 170


171
        type_sql_lists = [
C
cpwu 已提交
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 198 199 200 201
            f"select sqrt(c1) from {dbname}.t1",
            f"select sqrt(c2) from {dbname}.t1",
            f"select sqrt(c3) from {dbname}.t1",
            f"select sqrt(c4) from {dbname}.t1",
            f"select sqrt(c5) from {dbname}.t1",
            f"select sqrt(c6) from {dbname}.t1",

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

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

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

            f"select sqrt(c6) as alisb from {dbname}.stb1",
            f"select sqrt(c6) alisb from {dbname}.stb1",
202 203 204 205
        ]

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

C
cpwu 已提交
207
    def basic_sqrt_function(self, dbname="db"):
208

G
Ganlin Zhao 已提交
209
        # basic query
C
cpwu 已提交
210
        tdSql.query(f"select c1 from {dbname}.ct3")
211
        tdSql.checkRows(0)
C
cpwu 已提交
212
        tdSql.query(f"select c1 from {dbname}.t1")
213
        tdSql.checkRows(12)
C
cpwu 已提交
214
        tdSql.query(f"select c1 from {dbname}.stb1")
215 216 217
        tdSql.checkRows(25)

        # used for empty table  , ct3 is empty
C
cpwu 已提交
218
        tdSql.query(f"select sqrt(c1) from {dbname}.ct3")
219
        tdSql.checkRows(0)
C
cpwu 已提交
220
        tdSql.query(f"select sqrt(c2) from {dbname}.ct3")
221
        tdSql.checkRows(0)
C
cpwu 已提交
222
        tdSql.query(f"select sqrt(c3) from {dbname}.ct3")
223
        tdSql.checkRows(0)
C
cpwu 已提交
224
        tdSql.query(f"select sqrt(c4) from {dbname}.ct3")
225
        tdSql.checkRows(0)
C
cpwu 已提交
226
        tdSql.query(f"select sqrt(c5) from {dbname}.ct3")
227
        tdSql.checkRows(0)
C
cpwu 已提交
228
        tdSql.query(f"select sqrt(c6) from {dbname}.ct3")
229 230 231 232
        tdSql.checkRows(0)


        # # used for regular table
C
cpwu 已提交
233
        tdSql.query(f"select sqrt(c1) from {dbname}.t1")
234 235 236 237 238
        tdSql.checkData(0, 0, None)
        tdSql.checkData(1 , 0, 1.000000000)
        tdSql.checkData(3 , 0, 1.732050808)
        tdSql.checkData(5 , 0, None)

C
cpwu 已提交
239
        tdSql.query(f"select c1, c2, c3 , c4, c5 from {dbname}.t1")
240 241 242 243
        tdSql.checkData(1, 4, 1.11000)
        tdSql.checkData(3, 3, 33)
        tdSql.checkData(5, 4, None)

C
cpwu 已提交
244
        tdSql.query(f"select ts,c1, c2, c3 , c4, c5 from {dbname}.t1")
245 246 247 248
        tdSql.checkData(1, 5, 1.11000)
        tdSql.checkData(3, 4, 33)
        tdSql.checkData(5, 5, None)

C
cpwu 已提交
249
        self.check_result_auto_sqrt( f"select abs(c1), abs(c2), abs(c3) , abs(c4), abs(c5) from {dbname}.t1", f"select sqrt(abs(c1)), sqrt(abs(c2)) ,sqrt(abs(c3)), sqrt(abs(c4)), sqrt(abs(c5)) from {dbname}.t1")
G
Ganlin Zhao 已提交
250

251
        # used for sub table
C
cpwu 已提交
252
        tdSql.query(f"select c2 ,sqrt(c2) from {dbname}.ct1")
253 254 255 256 257
        tdSql.checkData(0, 1, 298.140906284)
        tdSql.checkData(1 , 1, 278.885281074)
        tdSql.checkData(3 , 1, 235.701081881)
        tdSql.checkData(4 , 1, 0.000000000)

C
cpwu 已提交
258
        tdSql.query(f"select c1, c5 ,sqrt(c5) from {dbname}.ct4")
259 260 261 262 263 264
        tdSql.checkData(0 , 2, None)
        tdSql.checkData(1 , 2, 2.979932904)
        tdSql.checkData(2 , 2, 2.787471970)
        tdSql.checkData(3 , 2, 2.580697551)
        tdSql.checkData(5 , 2, None)

C
cpwu 已提交
265
        self.check_result_auto_sqrt( f"select c1, c2, c3 , c4, c5 from {dbname}.ct1", f"select sqrt(c1), sqrt(c2) ,sqrt(c3), sqrt(c4), sqrt(c5) from {dbname}.ct1")
G
Ganlin Zhao 已提交
266

267
        # nest query for sqrt functions
C
cpwu 已提交
268
        tdSql.query(f"select c4  , sqrt(c4) ,sqrt(sqrt(c4)) , sqrt(sqrt(sqrt(c4))) from {dbname}.ct1;")
269 270 271 272 273 274 275 276 277 278 279 280 281 282 283
        tdSql.checkData(0 , 0 , 88)
        tdSql.checkData(0 , 1 , 9.380831520)
        tdSql.checkData(0 , 2 , 3.062814314)
        tdSql.checkData(0 , 3 , 1.750089802)

        tdSql.checkData(1 , 0 , 77)
        tdSql.checkData(1 , 1 , 8.774964387)
        tdSql.checkData(1 , 2 , 2.962256638)
        tdSql.checkData(1 , 3 , 1.721120750)

        tdSql.checkData(11 , 0 , -99)
        tdSql.checkData(11 , 1 , None)
        tdSql.checkData(11 , 2 , None)
        tdSql.checkData(11 , 3 , None)

G
Ganlin Zhao 已提交
284 285
        # used for stable table

C
cpwu 已提交
286
        tdSql.query(f"select sqrt(c1) from {dbname}.stb1")
287
        tdSql.checkRows(25)
G
Ganlin Zhao 已提交
288

289 290

        # used for not exists table
C
cpwu 已提交
291 292 293
        tdSql.error(f"select sqrt(c1) from {dbname}.stbbb1")
        tdSql.error(f"select sqrt(c1) from {dbname}.tbname")
        tdSql.error(f"select sqrt(c1) from {dbname}.ct5")
294

G
Ganlin Zhao 已提交
295
        # mix with common col
C
cpwu 已提交
296
        tdSql.query(f"select c1, sqrt(c1) from {dbname}.ct1")
297 298 299 300
        tdSql.checkData(0 , 0 ,8)
        tdSql.checkData(0 , 1 ,2.828427125)
        tdSql.checkData(4 , 0 ,0)
        tdSql.checkData(4 , 1 ,0.000000000)
C
cpwu 已提交
301
        tdSql.query(f"select c2, sqrt(c2) from {dbname}.ct4")
302 303 304 305 306 307 308 309
        tdSql.checkData(0 , 0 , None)
        tdSql.checkData(0 , 1 ,None)
        tdSql.checkData(4 , 0 ,55555)
        tdSql.checkData(4 , 1 ,235.701081881)
        tdSql.checkData(5 , 0 ,None)
        tdSql.checkData(5 , 1 ,None)

        # mix with common functions
C
cpwu 已提交
310
        tdSql.query(f"select c1, sqrt(c1),sqrt(c1), sqrt(sqrt(c1)) from {dbname}.ct4 ")
311 312 313 314
        tdSql.checkData(0 , 0 ,None)
        tdSql.checkData(0 , 1 ,None)
        tdSql.checkData(0 , 2 ,None)
        tdSql.checkData(0 , 3 ,None)
G
Ganlin Zhao 已提交
315

316 317 318 319 320
        tdSql.checkData(3 , 0 , 6)
        tdSql.checkData(3 , 1 ,2.449489743)
        tdSql.checkData(3 , 2 ,2.449489743)
        tdSql.checkData(3 , 3 ,1.565084580)

C
cpwu 已提交
321
        tdSql.query(f"select c1, sqrt(c1),c5, floor(c5) from {dbname}.stb1 ")
322 323

        # # mix with agg functions , not support
C
cpwu 已提交
324 325 326 327 328 329
        tdSql.error(f"select c1, sqrt(c1),c5, count(c5) from {dbname}.stb1 ")
        tdSql.error(f"select c1, sqrt(c1),c5, count(c5) from {dbname}.ct1 ")
        tdSql.error(f"select sqrt(c1), count(c5) from {dbname}.stb1 ")
        tdSql.error(f"select sqrt(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 ")
330 331 332

        # agg functions mix with agg functions

C
cpwu 已提交
333 334
        tdSql.query(f"select max(c5), count(c5) from {dbname}.stb1")
        tdSql.query(f"select max(c5), count(c5) from {dbname}.ct1")
335

G
Ganlin Zhao 已提交
336

337
        # bug fix for count
C
cpwu 已提交
338
        tdSql.query(f"select count(c1) from {dbname}.ct4 ")
339
        tdSql.checkData(0,0,9)
C
cpwu 已提交
340
        tdSql.query(f"select count(*) from {dbname}.ct4 ")
341
        tdSql.checkData(0,0,12)
C
cpwu 已提交
342
        tdSql.query(f"select count(c1) from {dbname}.stb1 ")
343
        tdSql.checkData(0,0,22)
C
cpwu 已提交
344
        tdSql.query(f"select count(*) from {dbname}.stb1 ")
345 346
        tdSql.checkData(0,0,25)

G
Ganlin Zhao 已提交
347
        # # bug fix for compute
C
cpwu 已提交
348
        tdSql.query(f"select c1, sqrt(c1) -0 ,sqrt(c1-4)-0 from {dbname}.ct4 ")
349 350 351 352 353 354 355
        tdSql.checkData(0, 0, None)
        tdSql.checkData(0, 1, None)
        tdSql.checkData(0, 2, None)
        tdSql.checkData(1, 0, 8)
        tdSql.checkData(1, 1, 2.828427125)
        tdSql.checkData(1, 2, 2.000000000)

C
cpwu 已提交
356
        tdSql.query(f"select c1, sqrt(c1) -0 ,sqrt(c1-0.1)-0.1 from {dbname}.ct4")
357 358 359 360 361 362 363
        tdSql.checkData(0, 0, None)
        tdSql.checkData(0, 1, None)
        tdSql.checkData(0, 2, None)
        tdSql.checkData(1, 0, 8)
        tdSql.checkData(1, 1, 2.828427125)
        tdSql.checkData(1, 2, 2.710693865)

C
cpwu 已提交
364
        tdSql.query(f"select c1, sqrt(c1), c2, sqrt(c2), c3, sqrt(c3) from {dbname}.ct1")
365

C
cpwu 已提交
366
    def test_big_number(self, dbname="db"):
367

C
cpwu 已提交
368
        tdSql.query(f"select c1, sqrt(100000000) from {dbname}.ct1")  # bigint to double data overflow
369 370 371
        tdSql.checkData(4, 1, 10000.000000000)


C
cpwu 已提交
372
        tdSql.query(f"select c1, sqrt(10000000000000) from {dbname}.ct1")  # bigint to double data overflow
373 374
        tdSql.checkData(4, 1, 3162277.660168380)

C
cpwu 已提交
375 376
        tdSql.query(f"select c1, sqrt(c1) + sqrt(10000000000000000000000000) from {dbname}.ct1")  # bigint to double data overflow
        tdSql.query(f"select c1, sqrt(c1) + sqrt(10000000000000000000000000.0) from {dbname}.ct1") # 10000000000000000000000000.0 is a double value
377 378
        tdSql.checkData(1, 1, 3162277660171.025390625)

C
cpwu 已提交
379 380
        tdSql.query(f"select c1, sqrt(10000000000000000000000000000000000) from {dbname}.ct1")  # bigint to double data overflow
        tdSql.query(f"select c1, sqrt(10000000000000000000000000000000000.0) from {dbname}.ct1") # 10000000000000000000000000.0 is a double value
381 382
        tdSql.checkData(4, 1, 100000000000000000.000000000)

C
cpwu 已提交
383 384
        tdSql.query(f"select c1, sqrt(10000000000000000000000000000000000000000) from {dbname}.ct1")  # bigint to double data overflow
        tdSql.query(f"select c1, sqrt(10000000000000000000000000000000000000000.0) from {dbname}.ct1") # 10000000000000000000000000.0 is a double value
385 386 387

        tdSql.checkData(4, 1, 100000000000000000000.000000000)

C
cpwu 已提交
388
        tdSql.query(f"select c1, sqrt(10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) from {dbname}.ct1")  # bigint to double data overflow
389

C
cpwu 已提交
390
    def pow_base_test(self, dbname="db"):
391 392

        # base is an regular number ,int or double
C
cpwu 已提交
393
        tdSql.query(f"select c1, sqrt(c1) from {dbname}.ct1")
394 395 396 397
        tdSql.checkData(0, 1,2.828427125)
        tdSql.checkRows(13)

        # # bug for compute in functions
C
cpwu 已提交
398
        # tdSql.query(f"select c1, abs(1/0) from {dbname}.ct1")
399 400 401
        # tdSql.checkData(0, 0, 8)
        # tdSql.checkData(0, 1, 1)

C
cpwu 已提交
402
        tdSql.query(f"select c1, sqrt(1) from {dbname}.ct1")
403 404 405 406
        tdSql.checkData(0, 1, 1.000000000)
        tdSql.checkRows(13)

        # two cols start sqrt(x,y)
C
cpwu 已提交
407
        tdSql.query(f"select c1,c2, sqrt(c2) from {dbname}.ct1")
408 409 410 411
        tdSql.checkData(0, 2, 298.140906284)
        tdSql.checkData(1, 2, 278.885281074)
        tdSql.checkData(4, 2, 0.000000000)

C
cpwu 已提交
412 413
    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(sqrt(c1)-0.5) from {dbname}.ct4 where c1>5 ")
414 415 416 417 418 419 420
        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 已提交
421
        tdSql.query(f"select c1, abs(c1) -0 ,ceil(c1-0.1)-0 ,floor(c1+0.1)-0.1 ,ceil(sqrt(c1)-0.5) from {dbname}.ct4 where c1=5 ")
422 423 424 425 426 427 428
        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 已提交
429
        tdSql.query(f"select c1, abs(c1) -0 ,ceil(c1-0.1)-0 ,floor(c1+0.1)-0.1 ,ceil(sqrt(c1)-0.5) from {dbname}.ct4 where c1=5 ")
430 431 432 433 434 435 436
        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 已提交
437
        tdSql.query(f"select c1,c2 , abs(c1) -0 ,ceil(c1-0.1)-0 ,floor(c1+0.1)-0.1 ,ceil(sqrt(c1)-0.5) from {dbname}.ct4 where c1=sqrt(c1) limit 1 ")
438 439 440 441 442 443 444
        tdSql.checkRows(1)
        tdSql.checkData(0,0,1)
        tdSql.checkData(0,1,11111)
        tdSql.checkData(0,2,1.000000000)
        tdSql.checkData(0,3,1.000000000)
        tdSql.checkData(0,4,0.900000000)
        tdSql.checkData(0,5,1.000000000)
G
Ganlin Zhao 已提交
445

C
cpwu 已提交
446
    def check_boundary_values(self, dbname="bound_test"):
G
Ganlin Zhao 已提交
447

C
cpwu 已提交
448 449
        tdSql.execute(f"drop database if exists {dbname}")
        tdSql.execute(f"create database if not exists {dbname}")
450
        tdSql.execute(
C
cpwu 已提交
451
            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);"
452
        )
C
cpwu 已提交
453
        tdSql.execute(f'create table {dbname}.sub1_bound using {dbname}.stb_bound tags ( 1 )')
454 455 456 457 458 459 460 461 462 463 464 465 466 467 468
        tdSql.execute(
                f"insert into sub1_bound values ( now()-1s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
            )
        tdSql.execute(
                f"insert into sub1_bound values ( now()-1s, -2147483647, -9223372036854775807, -32767, -127, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
            )
        tdSql.execute(
                f"insert into sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
            )
        tdSql.execute(
                f"insert into sub1_bound values ( now(), -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
            )
        tdSql.error(
                f"insert into sub1_bound values ( now()+1s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
            )
C
cpwu 已提交
469
        self.check_result_auto_sqrt( f"select abs(c1), abs(c2), abs(c3) , abs(c4), abs(c5) from {dbname}.sub1_bound ", f"select sqrt(abs(c1)), sqrt(abs(c2)) ,sqrt(abs(c3)), sqrt(abs(c4)), sqrt(abs(c5)) from {dbname}.sub1_bound")
G
Ganlin Zhao 已提交
470

C
cpwu 已提交
471
        self.check_result_auto_sqrt( f"select c1, c2, c3 , c3, c2 ,c1 from {dbname}.sub1_bound ", f"select sqrt(c1), sqrt(c2) ,sqrt(c3), sqrt(c3), sqrt(c2) ,sqrt(c1) from {dbname}.sub1_bound")
472

C
cpwu 已提交
473
        self.check_result_auto_sqrt(f"select abs(abs(abs(abs(abs(abs(abs(abs(abs(c1)))))))))  nest_col_func from {dbname}.sub1_bound" , f"select sqrt(abs(c1)) from {dbname}.sub1_bound" )
G
Ganlin Zhao 已提交
474

475
        # check basic elem for table per row
C
cpwu 已提交
476
        tdSql.query(f"select sqrt(abs(c1)) ,sqrt(abs(c2)) , sqrt(abs(c3)) , sqrt(abs(c4)), sqrt(abs(c5)), sqrt(abs(c6)) from {dbname}.sub1_bound ")
477 478 479 480 481 482 483 484 485 486 487 488 489 490 491
        tdSql.checkData(0,0,math.sqrt(2147483647))
        tdSql.checkData(0,1,math.sqrt(9223372036854775807))
        tdSql.checkData(0,2,math.sqrt(32767))
        tdSql.checkData(0,3,math.sqrt(127))
        tdSql.checkData(0,4,math.sqrt(339999995214436424907732413799364296704.00000))
        tdSql.checkData(1,0,math.sqrt(2147483647))
        tdSql.checkData(1,1,math.sqrt(9223372036854775807))
        tdSql.checkData(1,2,math.sqrt(32767))
        tdSql.checkData(1,3,math.sqrt(127))
        tdSql.checkData(1,4,math.sqrt(339999995214436424907732413799364296704.00000))
        tdSql.checkData(3,0,math.sqrt(2147483646))
        tdSql.checkData(3,1,math.sqrt(9223372036854775806))
        tdSql.checkData(3,2,math.sqrt(32766))
        tdSql.checkData(3,3,math.sqrt(126))
        tdSql.checkData(3,4,math.sqrt(339999995214436424907732413799364296704.00000))
492

493
        # check  + - * / in functions
C
cpwu 已提交
494
        tdSql.query(f"select sqrt(abs(c1+1)) ,sqrt(abs(c2)) , sqrt(abs(c3*1)) , sqrt(abs(c4/2)), sqrt(abs(c5))/2, sqrt(abs(c6)) from {dbname}.sub1_bound ")
495 496 497 498
        tdSql.checkData(0,0,math.sqrt(2147483648.000000000))
        tdSql.checkData(0,1,math.sqrt(9223372036854775807))
        tdSql.checkData(0,2,math.sqrt(32767.000000000))
        tdSql.checkData(0,3,math.sqrt(63.500000000))
G
Ganlin Zhao 已提交
499

C
cpwu 已提交
500 501 502 503 504 505 506 507 508 509
    def support_super_table_test(self, dbname="db"):
        self.check_result_auto_sqrt( f"select c5 from {dbname}.stb1 order by ts " , f"select sqrt(c5) from {dbname}.stb1 order by ts" )
        self.check_result_auto_sqrt( f"select c5 from {dbname}.stb1 order by tbname " , f"select sqrt(c5) from {dbname}.stb1 order by tbname" )
        self.check_result_auto_sqrt( f"select c5 from {dbname}.stb1 where c1 > 0 order by tbname  " , f"select sqrt(c5) from {dbname}.stb1 where c1 > 0 order by tbname" )
        self.check_result_auto_sqrt( f"select c5 from {dbname}.stb1 where c1 > 0 order by tbname  " , f"select sqrt(c5) from {dbname}.stb1 where c1 > 0 order by tbname" )

        self.check_result_auto_sqrt( f"select t1,c5 from {dbname}.stb1 order by ts " , f"select sqrt(t1), sqrt(c5) from {dbname}.stb1 order by ts" )
        self.check_result_auto_sqrt( f"select t1,c5 from {dbname}.stb1 order by tbname " , f"select sqrt(t1) ,sqrt(c5) from {dbname}.stb1 order by tbname" )
        self.check_result_auto_sqrt( f"select t1,c5 from {dbname}.stb1 where c1 > 0 order by tbname  " , f"select sqrt(t1) ,sqrt(c5) from {dbname}.stb1 where c1 > 0 order by tbname" )
        self.check_result_auto_sqrt( f"select t1,c5 from {dbname}.stb1 where c1 > 0 order by tbname  " , f"select sqrt(t1) , sqrt(c5) from {dbname}.stb1 where c1 > 0 order by tbname" )
510 511
        pass

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

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

517 518
        self.prepare_datas()

G
Ganlin Zhao 已提交
519
        tdLog.printNoPrefix("==========step2:test errors ==============")
520 521

        self.test_errors()
G
Ganlin Zhao 已提交
522 523

        tdLog.printNoPrefix("==========step3:support types ============")
524 525 526

        self.support_types()

G
Ganlin Zhao 已提交
527
        tdLog.printNoPrefix("==========step4: sqrt basic query ============")
528 529 530

        self.basic_sqrt_function()

G
Ganlin Zhao 已提交
531
        tdLog.printNoPrefix("==========step5: big number sqrt query ============")
532 533 534

        self.test_big_number()

G
Ganlin Zhao 已提交
535
        tdLog.printNoPrefix("==========step6: base  number for sqrt query ============")
536 537 538

        self.pow_base_test()

G
Ganlin Zhao 已提交
539
        tdLog.printNoPrefix("==========step7: sqrt boundary query ============")
540 541 542

        self.check_boundary_values()

G
Ganlin Zhao 已提交
543
        tdLog.printNoPrefix("==========step8: sqrt filter query ============")
544 545 546

        self.abs_func_filter()

547 548
        tdLog.printNoPrefix("==========step9: check sqrt result of  stable query ============")

G
Ganlin Zhao 已提交
549 550
        self.support_super_table_test()

551

552 553 554 555 556 557 558

    def stop(self):
        tdSql.close()
        tdLog.success(f"{__file__} successfully executed")

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