sqrt.py 25.1 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
    def init(self, conn,  logSql, replicaVar=1):
14
        self.replicaVar = int(replicaVar)
15 16
        tdLog.debug(f"start to excute {__file__}")
        tdSql.init(conn.cursor())
G
Ganlin Zhao 已提交
17

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

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

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

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

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

68 69 70 71 72 73
    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 已提交
74

75 76 77 78 79 80 81 82 83 84 85 86
        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)

C
cpwu 已提交
87
        tdSql.query(pow_query)
88 89
        for row_index , row in enumerate(pow_result):
            for col_index , elem in enumerate(row):
C
cpwu 已提交
90 91
                tdSql.checkData(row_index ,col_index ,auto_result[row_index][col_index])

G
Ganlin Zhao 已提交
92

C
cpwu 已提交
93
    def test_errors(self, dbname="db"):
94
        error_sql_lists = [
C
cpwu 已提交
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 121 122
            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"
123 124 125
        ]
        for error_sql in error_sql_lists:
            tdSql.error(error_sql)
G
Ganlin Zhao 已提交
126

C
cpwu 已提交
127
    def support_types(self, dbname="db"):
128
        type_error_sql_lists = [
C
cpwu 已提交
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
            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"
155 156

        ]
G
Ganlin Zhao 已提交
157

158 159
        for type_sql in type_error_sql_lists:
            tdSql.error(type_sql)
G
Ganlin Zhao 已提交
160 161


162
        type_sql_lists = [
C
cpwu 已提交
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 191 192
            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",
193 194 195 196
        ]

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

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

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

        # used for empty table  , ct3 is empty
C
cpwu 已提交
209
        tdSql.query(f"select sqrt(c1) from {dbname}.ct3")
210
        tdSql.checkRows(0)
C
cpwu 已提交
211
        tdSql.query(f"select sqrt(c2) from {dbname}.ct3")
212
        tdSql.checkRows(0)
C
cpwu 已提交
213
        tdSql.query(f"select sqrt(c3) from {dbname}.ct3")
214
        tdSql.checkRows(0)
C
cpwu 已提交
215
        tdSql.query(f"select sqrt(c4) from {dbname}.ct3")
216
        tdSql.checkRows(0)
C
cpwu 已提交
217
        tdSql.query(f"select sqrt(c5) from {dbname}.ct3")
218
        tdSql.checkRows(0)
C
cpwu 已提交
219
        tdSql.query(f"select sqrt(c6) from {dbname}.ct3")
220 221 222 223
        tdSql.checkRows(0)


        # # used for regular table
C
cpwu 已提交
224
        tdSql.query(f"select sqrt(c1) from {dbname}.t1")
225 226 227 228 229
        tdSql.checkData(0, 0, None)
        tdSql.checkData(1 , 0, 1.000000000)
        tdSql.checkData(3 , 0, 1.732050808)
        tdSql.checkData(5 , 0, None)

C
cpwu 已提交
230
        tdSql.query(f"select c1, c2, c3 , c4, c5 from {dbname}.t1")
231 232 233 234
        tdSql.checkData(1, 4, 1.11000)
        tdSql.checkData(3, 3, 33)
        tdSql.checkData(5, 4, None)

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

C
cpwu 已提交
240
        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 已提交
241

242
        # used for sub table
C
cpwu 已提交
243
        tdSql.query(f"select c2 ,sqrt(c2) from {dbname}.ct1")
244 245 246 247 248
        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 已提交
249
        tdSql.query(f"select c1, c5 ,sqrt(c5) from {dbname}.ct4")
250 251 252 253 254 255
        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 已提交
256
        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 已提交
257

258
        # nest query for sqrt functions
C
cpwu 已提交
259
        tdSql.query(f"select c4  , sqrt(c4) ,sqrt(sqrt(c4)) , sqrt(sqrt(sqrt(c4))) from {dbname}.ct1;")
260 261 262 263 264 265 266 267 268 269 270 271 272 273 274
        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 已提交
275 276
        # used for stable table

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

280 281

        # used for not exists table
C
cpwu 已提交
282 283 284
        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")
285

G
Ganlin Zhao 已提交
286
        # mix with common col
C
cpwu 已提交
287
        tdSql.query(f"select c1, sqrt(c1) from {dbname}.ct1")
288 289 290 291
        tdSql.checkData(0 , 0 ,8)
        tdSql.checkData(0 , 1 ,2.828427125)
        tdSql.checkData(4 , 0 ,0)
        tdSql.checkData(4 , 1 ,0.000000000)
C
cpwu 已提交
292
        tdSql.query(f"select c2, sqrt(c2) from {dbname}.ct4")
293 294 295 296 297 298 299 300
        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 已提交
301
        tdSql.query(f"select c1, sqrt(c1),sqrt(c1), sqrt(sqrt(c1)) from {dbname}.ct4 ")
302 303 304 305
        tdSql.checkData(0 , 0 ,None)
        tdSql.checkData(0 , 1 ,None)
        tdSql.checkData(0 , 2 ,None)
        tdSql.checkData(0 , 3 ,None)
G
Ganlin Zhao 已提交
306

307 308 309 310 311
        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 已提交
312
        tdSql.query(f"select c1, sqrt(c1),c5, floor(c5) from {dbname}.stb1 ")
313 314

        # # mix with agg functions , not support
C
cpwu 已提交
315 316 317 318 319 320
        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 ")
321 322 323

        # agg functions mix with agg functions

C
cpwu 已提交
324 325
        tdSql.query(f"select max(c5), count(c5) from {dbname}.stb1")
        tdSql.query(f"select max(c5), count(c5) from {dbname}.ct1")
326

G
Ganlin Zhao 已提交
327

328
        # bug fix for count
C
cpwu 已提交
329
        tdSql.query(f"select count(c1) from {dbname}.ct4 ")
330
        tdSql.checkData(0,0,9)
C
cpwu 已提交
331
        tdSql.query(f"select count(*) from {dbname}.ct4 ")
332
        tdSql.checkData(0,0,12)
C
cpwu 已提交
333
        tdSql.query(f"select count(c1) from {dbname}.stb1 ")
334
        tdSql.checkData(0,0,22)
C
cpwu 已提交
335
        tdSql.query(f"select count(*) from {dbname}.stb1 ")
336 337
        tdSql.checkData(0,0,25)

G
Ganlin Zhao 已提交
338
        # # bug fix for compute
C
cpwu 已提交
339
        tdSql.query(f"select c1, sqrt(c1) -0 ,sqrt(c1-4)-0 from {dbname}.ct4 ")
340 341 342 343 344 345 346
        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 已提交
347
        tdSql.query(f"select c1, sqrt(c1) -0 ,sqrt(c1-0.1)-0.1 from {dbname}.ct4")
348 349 350 351 352 353 354
        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 已提交
355
        tdSql.query(f"select c1, sqrt(c1), c2, sqrt(c2), c3, sqrt(c3) from {dbname}.ct1")
356

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

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


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

C
cpwu 已提交
366 367
        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
368 369
        tdSql.checkData(1, 1, 3162277660171.025390625)

C
cpwu 已提交
370 371
        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
372 373
        tdSql.checkData(4, 1, 100000000000000000.000000000)

C
cpwu 已提交
374 375
        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
376 377 378

        tdSql.checkData(4, 1, 100000000000000000000.000000000)

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

C
cpwu 已提交
381
    def pow_base_test(self, dbname="db"):
382 383

        # base is an regular number ,int or double
C
cpwu 已提交
384
        tdSql.query(f"select c1, sqrt(c1) from {dbname}.ct1")
385 386 387 388
        tdSql.checkData(0, 1,2.828427125)
        tdSql.checkRows(13)

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

C
cpwu 已提交
393
        tdSql.query(f"select c1, sqrt(1) from {dbname}.ct1")
394 395 396 397
        tdSql.checkData(0, 1, 1.000000000)
        tdSql.checkRows(13)

        # two cols start sqrt(x,y)
C
cpwu 已提交
398
        tdSql.query(f"select c1,c2, sqrt(c2) from {dbname}.ct1")
399 400 401 402
        tdSql.checkData(0, 2, 298.140906284)
        tdSql.checkData(1, 2, 278.885281074)
        tdSql.checkData(4, 2, 0.000000000)

C
cpwu 已提交
403 404
    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 ")
405 406 407 408 409 410 411
        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 已提交
412
        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 ")
413 414 415 416 417 418 419
        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 已提交
420
        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 ")
421 422 423 424 425 426 427
        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 已提交
428
        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 ")
429 430 431 432 433 434 435
        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 已提交
436

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

C
cpwu 已提交
439 440
        tdSql.execute(f"drop database if exists {dbname}")
        tdSql.execute(f"create database if not exists {dbname}")
441
        tdSql.execute(
C
cpwu 已提交
442
            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);"
443
        )
C
cpwu 已提交
444
        tdSql.execute(f'create table {dbname}.sub1_bound using {dbname}.stb_bound tags ( 1 )')
445
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
446
                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() )"
447 448
            )
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
449
                f"insert into {dbname}.sub1_bound values ( now()-5s, -2147483647, -9223372036854775807, -32767, -127, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
450 451
            )
        tdSql.execute(
C
cpwu 已提交
452
                f"insert into {dbname}.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
453 454
            )
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
455
                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() )"
456 457
            )
        tdSql.error(
W
update  
wenzhouwww@live.cn 已提交
458
                f"insert into {dbname}.sub1_bound values ( now()+10s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
459
            )
C
cpwu 已提交
460
        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 已提交
461

C
cpwu 已提交
462
        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")
463

C
cpwu 已提交
464
        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 已提交
465

466
        # check basic elem for table per row
C
cpwu 已提交
467
        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 ")
468 469 470 471 472 473 474 475 476 477 478 479 480 481 482
        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))
483

484
        # check  + - * / in functions
C
cpwu 已提交
485
        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 ")
486 487 488 489
        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 已提交
490

C
cpwu 已提交
491 492 493 494 495 496 497 498 499 500
    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" )
501 502
        pass

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

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

508 509
        self.prepare_datas()

G
Ganlin Zhao 已提交
510
        tdLog.printNoPrefix("==========step2:test errors ==============")
511 512

        self.test_errors()
G
Ganlin Zhao 已提交
513 514

        tdLog.printNoPrefix("==========step3:support types ============")
515 516 517

        self.support_types()

G
Ganlin Zhao 已提交
518
        tdLog.printNoPrefix("==========step4: sqrt basic query ============")
519 520 521

        self.basic_sqrt_function()

G
Ganlin Zhao 已提交
522
        tdLog.printNoPrefix("==========step5: big number sqrt query ============")
523 524 525

        self.test_big_number()

G
Ganlin Zhao 已提交
526
        tdLog.printNoPrefix("==========step6: base  number for sqrt query ============")
527 528 529

        self.pow_base_test()

G
Ganlin Zhao 已提交
530
        tdLog.printNoPrefix("==========step7: sqrt boundary query ============")
531 532 533

        self.check_boundary_values()

G
Ganlin Zhao 已提交
534
        tdLog.printNoPrefix("==========step8: sqrt filter query ============")
535 536 537

        self.abs_func_filter()

538 539
        tdLog.printNoPrefix("==========step9: check sqrt result of  stable query ============")

G
Ganlin Zhao 已提交
540 541
        self.support_super_table_test()

542

543 544 545 546 547 548 549

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

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