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

C
cpwu 已提交
20
    def prepare_datas(self, dbname="db"):
21
        tdSql.execute(
C
cpwu 已提交
22
            f'''create table {dbname}.stb1
23 24 25 26
            (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
            tags (t1 int)
            '''
        )
G
Ganlin Zhao 已提交
27

28
        tdSql.execute(
C
cpwu 已提交
29 30
            f'''
            create table {dbname}.t1
31 32 33 34
            (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
            '''
        )
        for i in range(4):
C
cpwu 已提交
35
            tdSql.execute(f'create table {dbname}.ct{i+1} using {dbname}.stb1 tags ( {i+1} )')
36 37 38

        for i in range(9):
            tdSql.execute(
C
cpwu 已提交
39
                f"insert into {dbname}.ct1 values ( now()-{i*10}s, {1*i}, {11111*i}, {111*i}, {11*i}, {1.11*i}, {11.11*i}, {i%2}, 'binary{i}', 'nchar{i}', now()+{1*i}a )"
40 41
            )
            tdSql.execute(
C
cpwu 已提交
42
                f"insert into {dbname}.ct4 values ( now()-{i*90}d, {1*i}, {11111*i}, {111*i}, {11*i}, {1.11*i}, {11.11*i}, {i%2}, 'binary{i}', 'nchar{i}', now()+{1*i}a )"
43
            )
C
cpwu 已提交
44 45 46 47
        tdSql.execute(f"insert into {dbname}.ct1 values (now()-45s, 0, 0, 0, 0, 0, 0, 0, 'binary0', 'nchar0', now()+8a )")
        tdSql.execute(f"insert into {dbname}.ct1 values (now()+10s, 9, -99999, -999, -99, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a )")
        tdSql.execute(f"insert into {dbname}.ct1 values (now()+15s, 9, -99999, -999, -99, -9.99, NULL, 1, 'binary9', 'nchar9', now()+9a )")
        tdSql.execute(f"insert into {dbname}.ct1 values (now()+20s, 9, -99999, -999, NULL, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a )")
48

C
cpwu 已提交
49 50 51
        tdSql.execute(f"insert into {dbname}.ct4 values (now()-810d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) ")
        tdSql.execute(f"insert into {dbname}.ct4 values (now()-400d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) ")
        tdSql.execute(f"insert into {dbname}.ct4 values (now()+90d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL  ) ")
52 53

        tdSql.execute(
C
cpwu 已提交
54
            f'''insert into {dbname}.t1 values
55 56 57 58 59 60 61 62 63 64 65 66 67 68
            ( '2020-04-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
            ( '2020-10-21 01:01:01.000', 1, 11111, 111, 11, 1.11, 11.11, 1, "binary1", "nchar1", now()+1a )
            ( '2020-12-31 01:01:01.000', 2, 22222, 222, 22, 2.22, 22.22, 0, "binary2", "nchar2", now()+2a )
            ( '2021-01-01 01:01:06.000', 3, 33333, 333, 33, 3.33, 33.33, 0, "binary3", "nchar3", now()+3a )
            ( '2021-05-07 01:01:10.000', 4, 44444, 444, 44, 4.44, 44.44, 1, "binary4", "nchar4", now()+4a )
            ( '2021-07-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
            ( '2021-09-30 01:01:16.000', 5, 55555, 555, 55, 5.55, 55.55, 0, "binary5", "nchar5", now()+5a )
            ( '2022-02-01 01:01:20.000', 6, 66666, 666, 66, 6.66, 66.66, 1, "binary6", "nchar6", now()+6a )
            ( '2022-10-28 01:01:26.000', 7, 00000, 000, 00, 0.00, 00.00, 1, "binary7", "nchar7", "1970-01-01 08:00:00.000" )
            ( '2022-12-01 01:01:30.000', 8, -88888, -888, -88, -8.88, -88.88, 0, "binary8", "nchar8", "1969-01-01 01:00:00.000" )
            ( '2022-12-31 01:01:36.000', 9, -99999999999999999, -999, -99, -9.99, -999999999999999999999.99, 1, "binary9", "nchar9", "1900-01-01 00:00:00.000" )
            ( '2023-02-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
            '''
        )
G
Ganlin Zhao 已提交
69

70 71 72 73 74 75
    def check_result_auto_atan(self ,origin_query , pow_query):

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

        auto_result =[]
G
Ganlin Zhao 已提交
76

77 78 79 80 81 82 83 84 85 86 87 88 89 90
        for row in origin_result:
            row_check = []
            for elem in row:
                if elem == None:
                    elem = None
                else:
                    elem = math.atan(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):
C
cpwu 已提交
91
                if auto_result[row_index][col_index] == None  and elem:
92 93
                    check_status = False
                elif auto_result[row_index][col_index] != None  and (auto_result[row_index][col_index] - elem > 0.00000001):
G
Ganlin Zhao 已提交
94
                    check_status = False
95 96 97 98 99 100 101
                else:
                    pass
        if not check_status:
            tdLog.notice("atan function value has not as expected , sql is \"%s\" "%pow_query )
            sys.exit(1)
        else:
            tdLog.info("atan value check pass , it work as expected ,sql is \"%s\"   "%pow_query )
G
Ganlin Zhao 已提交
102

C
cpwu 已提交
103
    def test_errors(self, dbname="db"):
104
        error_sql_lists = [
C
cpwu 已提交
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 132
            f"select atan from {dbname}.t1",
            # f"select atan(-+--+c1 ) from {dbname}.t1",
            # f"select +-atan(c1) from {dbname}.t1",
            # f"select ++-atan(c1) from {dbname}.t1",
            # f"select ++--atan(c1) from {dbname}.t1",
            # f"select - -atan(c1)*0 from {dbname}.t1",
            # f"select atan(tbname+1) from {dbname}.t1 ",
            f"select atan(123--123)==1 from {dbname}.t1",
            f"select atan(c1) as 'd1' from {dbname}.t1",
            f"select atan(c1 ,c2) from {dbname}.t1",
            f"select atan(c1 ,NULL ) from {dbname}.t1",
            f"select atan(,) from {dbname}.t1;",
            f"select atan(atan(c1) ab from {dbname}.t1)",
            f"select atan(c1 ) as int from {dbname}.t1",
            f"select atan from {dbname}.stb1",
            # f"select atan(-+--+c1) from {dbname}.stb1",
            # f"select +-atan(c1) from {dbname}.stb1",
            # f"select ++-atan(c1) from {dbname}.stb1",
            # f"select ++--atan(c1) from {dbname}.stb1",
            # f"select - -atan(c1)*0 from {dbname}.stb1",
            # f"select atan(tbname+1) from {dbname}.stb1 ",
            f"select atan(123--123)==1 from {dbname}.stb1",
            f"select atan(c1) as 'd1' from {dbname}.stb1",
            f"select atan(c1 ,c2 ) from {dbname}.stb1",
            f"select atan(c1 ,NULL) from {dbname}.stb1",
            f"select atan(,) from {dbname}.stb1;",
            f"select atan(atan(c1) ab from {dbname}.stb1)",
            f"select atan(c1) as int from {dbname}.stb1"
133 134 135
        ]
        for error_sql in error_sql_lists:
            tdSql.error(error_sql)
G
Ganlin Zhao 已提交
136

C
cpwu 已提交
137
    def support_types(self, dbname="db"):
138
        type_error_sql_lists = [
C
cpwu 已提交
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 164
            f"select atan(ts) from {dbname}.t1" ,
            f"select atan(c7) from {dbname}.t1",
            f"select atan(c8) from {dbname}.t1",
            f"select atan(c9) from {dbname}.t1",
            f"select atan(ts) from {dbname}.ct1" ,
            f"select atan(c7) from {dbname}.ct1",
            f"select atan(c8) from {dbname}.ct1",
            f"select atan(c9) from {dbname}.ct1",
            f"select atan(ts) from {dbname}.ct3" ,
            f"select atan(c7) from {dbname}.ct3",
            f"select atan(c8) from {dbname}.ct3",
            f"select atan(c9) from {dbname}.ct3",
            f"select atan(ts) from {dbname}.ct4" ,
            f"select atan(c7) from {dbname}.ct4",
            f"select atan(c8) from {dbname}.ct4",
            f"select atan(c9) from {dbname}.ct4",
            f"select atan(ts) from {dbname}.stb1" ,
            f"select atan(c7) from {dbname}.stb1",
            f"select atan(c8) from {dbname}.stb1",
            f"select atan(c9) from {dbname}.stb1" ,

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

            f"select atan(ts) from {dbname}.tbname",
            f"select atan(c9) from {dbname}.tbname"
165 166

        ]
G
Ganlin Zhao 已提交
167

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


172
        type_sql_lists = [
C
cpwu 已提交
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 202
            f"select atan(c1) from {dbname}.t1",
            f"select atan(c2) from {dbname}.t1",
            f"select atan(c3) from {dbname}.t1",
            f"select atan(c4) from {dbname}.t1",
            f"select atan(c5) from {dbname}.t1",
            f"select atan(c6) from {dbname}.t1",

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

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

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

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

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

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

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

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


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

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

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

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

252
        # used for sub table
C
cpwu 已提交
253
        tdSql.query(f"select c2 ,atan(c2) from {dbname}.ct1")
254 255 256
        tdSql.checkData(0, 1, 1.570785077)
        tdSql.checkData(1 , 1, 1.570783470)
        tdSql.checkData(3 , 1, 1.570778327)
C
cpwu 已提交
257
        tdSql.checkData(4 , 1, 0)
258

C
cpwu 已提交
259
        tdSql.query(f"select c1, c5 ,atan(c5) from {dbname}.ct4")
260 261 262 263 264 265
        tdSql.checkData(0 , 2, None)
        tdSql.checkData(1 , 2, 1.458656162)
        tdSql.checkData(2 , 2, 1.442799803)
        tdSql.checkData(3 , 2, 1.421759533)
        tdSql.checkData(5 , 2, None)

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

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

        tdSql.checkData(1 , 0 , 77)
        tdSql.checkData(1 , 1 , 1.557810044)
        tdSql.checkData(1 , 2 , 1.000117426)
        tdSql.checkData(1 , 3 , 0.785456873)

        tdSql.checkData(11 , 0 , -99)
        tdSql.checkData(11 , 1 , -1.560695660)
        tdSql.checkData(11 , 2 , -1.000958403)
        tdSql.checkData(11 , 3 , -0.785877135)

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

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

290 291

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

G
Ganlin Zhao 已提交
296
        # mix with common col
C
cpwu 已提交
297 298
        tdSql.query(f"select c1, atan(c1) from {dbname}.ct1")
        tdSql.query(f"select c2, atan(c2) from {dbname}.ct4")
G
Ganlin Zhao 已提交
299

300 301

        # mix with common functions
C
cpwu 已提交
302
        tdSql.query(f"select c1, atan(c1),atan(c1), atan(atan(c1)) from {dbname}.ct4 ")
303 304 305 306
        tdSql.checkData(0 , 0 ,None)
        tdSql.checkData(0 , 1 ,None)
        tdSql.checkData(0 , 2 ,None)
        tdSql.checkData(0 , 3 ,None)
G
Ganlin Zhao 已提交
307

308 309 310 311 312
        tdSql.checkData(3 , 0 , 6)
        tdSql.checkData(3 , 1 ,1.405647649)
        tdSql.checkData(3 , 2 ,1.405647649)
        tdSql.checkData(3 , 3 ,0.952449745)

C
cpwu 已提交
313
        tdSql.query(f"select c1, atan(c1),c5, floor(c5) from {dbname}.stb1 ")
314 315

        # # mix with agg functions , not support
C
cpwu 已提交
316 317 318 319 320 321
        tdSql.error(f"select c1, atan(c1),c5, count(c5) from {dbname}.stb1 ")
        tdSql.error(f"select c1, atan(c1),c5, count(c5) from {dbname}.ct1 ")
        tdSql.error(f"select atan(c1), count(c5) from {dbname}.stb1 ")
        tdSql.error(f"select atan(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 ")
322 323 324

        # agg functions mix with agg functions

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

G
Ganlin Zhao 已提交
328 329

        # # bug fix for compute
C
cpwu 已提交
330
        tdSql.query(f"select c1, atan(c1) -0 ,atan(c1-4)-0 from {dbname}.ct4 ")
331 332 333 334 335 336 337
        tdSql.checkData(0, 0, None)
        tdSql.checkData(0, 1, None)
        tdSql.checkData(0, 2, None)
        tdSql.checkData(1, 0, 8)
        tdSql.checkData(1, 1, 1.446441332)
        tdSql.checkData(1, 2, 1.325817664)

C
cpwu 已提交
338
        tdSql.query(f" select c1, atan(c1) -0 ,atan(c1-0.1)-0.1 from {dbname}.ct4")
339 340 341 342 343 344 345
        tdSql.checkData(0, 0, None)
        tdSql.checkData(0, 1, None)
        tdSql.checkData(0, 2, None)
        tdSql.checkData(1, 0, 8)
        tdSql.checkData(1, 1, 1.446441332)
        tdSql.checkData(1, 2, 1.344883701)

C
cpwu 已提交
346
        tdSql.query(f"select c1, atan(c1), c2, atan(c2), c3, atan(c3) from {dbname}.ct1")
347

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

C
cpwu 已提交
350
        tdSql.query(f"select c1, atan(100000000) from {dbname}.ct1")  # bigint to double data overflow
351 352 353
        tdSql.checkData(4, 1, math.atan(100000000))


C
cpwu 已提交
354
        tdSql.query(f"select c1, atan(10000000000000) from {dbname}.ct1")  # bigint to double data overflow
355 356
        tdSql.checkData(4, 1, math.atan(10000000000000))

C
cpwu 已提交
357 358
        tdSql.query(f"select c1, atan(10000000000000000000000000) from {dbname}.ct1")  # bigint to double data overflow
        tdSql.query(f"select c1, atan(10000000000000000000000000.0) from {dbname}.ct1") # 10000000000000000000000000.0 is a double value
359 360
        tdSql.checkData(1, 1, math.atan(10000000000000000000000000.0))

C
cpwu 已提交
361 362
        tdSql.query(f"select c1, atan(10000000000000000000000000000000000) from {dbname}.ct1")  # bigint to double data overflow
        tdSql.query(f"select c1, atan(10000000000000000000000000000000000.0) from {dbname}.ct1") # 10000000000000000000000000.0 is a double value
363 364
        tdSql.checkData(4, 1, math.atan(10000000000000000000000000000000000.0))

C
cpwu 已提交
365 366
        tdSql.query(f"select c1, atan(10000000000000000000000000000000000000000) from {dbname}.ct1")  # bigint to double data overflow
        tdSql.query(f"select c1, atan(10000000000000000000000000000000000000000.0) from {dbname}.ct1") # 10000000000000000000000000.0 is a double value
367 368 369

        tdSql.checkData(4, 1, math.atan(10000000000000000000000000000000000000000.0))

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

C
cpwu 已提交
372 373 374
    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(atan(c1)-0.5) from {dbname}.ct4 where c1>5 ")
375 376 377 378 379 380 381
        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,1.000000000)

C
cpwu 已提交
382
        tdSql.query(f"select c1, abs(c1) -0 ,ceil(c1-0.1)-0 ,floor(c1+0.1)-0.1 ,ceil(atan(c1)-0.5) from {dbname}.ct4 where c1=5 ")
383 384 385 386 387 388 389
        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,1.000000000)

C
cpwu 已提交
390
        tdSql.query(f"select c1,c2 , abs(c1) -0 ,ceil(c1-0.1)-0 ,floor(c1+0.1)-0.1 ,ceil(atan(c1)-0.5) from {dbname}.ct4 where c1=atan(c1) limit 1 ")
391 392 393 394 395 396 397
        tdSql.checkRows(1)
        tdSql.checkData(0,0,0)
        tdSql.checkData(0,1,0)
        tdSql.checkData(0,2,0.000000000)
        tdSql.checkData(0,3,0.000000000)
        tdSql.checkData(0,4,-0.100000000)
        tdSql.checkData(0,5,0.000000000)
G
Ganlin Zhao 已提交
398

399 400
    def pow_Arithmetic(self):
        pass
G
Ganlin Zhao 已提交
401

C
cpwu 已提交
402
    def check_boundary_values(self, dbname="bound_test"):
403 404 405

        PI=3.1415926

C
cpwu 已提交
406 407
        tdSql.execute(f"drop database if exists {dbname}")
        tdSql.execute(f"create database if not exists {dbname}")
408
        time.sleep(3)
C
cpwu 已提交
409
        tdSql.execute(f"use {dbname}")
410
        tdSql.execute(
C
cpwu 已提交
411
            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);"
412
        )
C
cpwu 已提交
413
        tdSql.execute(f'create table {dbname}.sub1_bound using {dbname}.stb_bound tags ( 1 )')
414
        tdSql.execute(
C
cpwu 已提交
415
                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() )"
416 417
            )
        tdSql.execute(
C
cpwu 已提交
418
                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() )"
419 420
            )
        tdSql.execute(
C
cpwu 已提交
421
                f"insert into {dbname}.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
422 423
            )
        tdSql.execute(
C
cpwu 已提交
424
                f"insert into {dbname}.sub1_bound values ( now(), -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
425 426
            )
        tdSql.error(
C
cpwu 已提交
427
                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() )"
428
            )
C
cpwu 已提交
429
        self.check_result_auto_atan( f"select abs(c1), abs(c2), abs(c3) , abs(c4), abs(c5) from {dbname}.sub1_bound ", f"select atan(abs(c1)), atan(abs(c2)) ,atan(abs(c3)), atan(abs(c4)), atan(abs(c5)) from {dbname}.sub1_bound")
G
Ganlin Zhao 已提交
430

C
cpwu 已提交
431
        self.check_result_auto_atan( f"select c1, c2, c3 , c3, c2 ,c1 from {dbname}.sub1_bound ", f"select atan(c1), atan(c2) ,atan(c3), atan(c3), atan(c2) ,atan(c1) from {dbname}.sub1_bound")
432

C
cpwu 已提交
433
        self.check_result_auto_atan(f"select abs(abs(abs(abs(abs(abs(abs(abs(abs(c1)))))))))  nest_col_func from {dbname}.sub1_bound" , f"select atan(abs(c1)) from {dbname}.sub1_bound" )
G
Ganlin Zhao 已提交
434

435
        # check basic elem for table per row
C
cpwu 已提交
436
        tdSql.query(f"select atan(abs(c1)) ,atan(abs(c2)) , atan(abs(c3)) , atan(abs(c4)), atan(abs(c5)), atan(abs(c6)) from {dbname}.sub1_bound ")
437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453
        tdSql.checkData(0,0,math.atan(2147483647))
        tdSql.checkData(0,1,math.atan(9223372036854775807))
        tdSql.checkData(0,2,math.atan(32767))
        tdSql.checkData(0,3,math.atan(127))
        tdSql.checkData(0,4,math.atan(339999995214436424907732413799364296704.00000))
        tdSql.checkData(1,0,math.atan(2147483647))
        tdSql.checkData(1,1,math.atan(9223372036854775807))
        tdSql.checkData(1,2,math.atan(32767))
        tdSql.checkData(1,3,math.atan(127))
        tdSql.checkData(1,4,math.atan(339999995214436424907732413799364296704.00000))
        tdSql.checkData(3,0,math.atan(2147483646))
        tdSql.checkData(3,1,math.atan(9223372036854775806))
        tdSql.checkData(3,2,math.atan(32766))
        tdSql.checkData(3,3,math.atan(126))
        tdSql.checkData(3,4,math.atan(339999995214436424907732413799364296704.00000))

        # check  + - * / in functions
C
cpwu 已提交
454
        tdSql.query(f"select atan(abs(c1+1)) ,atan(abs(c2)) , atan(abs(c3*1)) , atan(abs(c4/2)), atan(abs(c5))/2, atan(abs(c6)) from {dbname}.sub1_bound ")
455 456 457 458 459
        tdSql.checkData(0,0,math.atan(2147483648.000000000))
        tdSql.checkData(0,1,math.atan(9223372036854775807))
        tdSql.checkData(0,2,math.atan(32767.000000000))
        tdSql.checkData(0,3,math.atan(63.500000000))

C
cpwu 已提交
460 461 462 463 464 465 466 467 468 469 470 471 472 473 474
        tdSql.execute(f"create stable {dbname}.st (ts timestamp,  num1 float, num2 double) tags (t1 int);")
        tdSql.execute(f'create table {dbname}.tb1 using {dbname}.st tags (1)')
        tdSql.execute(f'create table {dbname}.tb2 using {dbname}.st tags (2)')
        tdSql.execute(f'create table {dbname}.tb3 using {dbname}.st tags (3)')
        tdSql.execute(f'insert into {dbname}.tb1 values (now()-40s, {PI/2}, {PI/2})')
        tdSql.execute(f'insert into {dbname}.tb1 values (now()-30s, {PI}, {PI})')
        tdSql.execute(f'insert into {dbname}.tb1 values (now()-20s, {PI*1.5}, {PI*1.5})')
        tdSql.execute(f'insert into {dbname}.tb1 values (now()-10s, {PI*2}, {PI*2})')
        tdSql.execute(f'insert into {dbname}.tb1 values (now(), {PI*2.5}, {PI*2.5})')

        tdSql.execute(f'insert into {dbname}.tb2 values (now()-40s, {PI/2}, {PI/2})')
        tdSql.execute(f'insert into {dbname}.tb2 values (now()-30s, {PI}, {PI})')
        tdSql.execute(f'insert into {dbname}.tb2 values (now()-20s, {PI*1.5}, {PI*1.5})')
        tdSql.execute(f'insert into {dbname}.tb2 values (now()-10s, {PI*2}, {PI*2})')
        tdSql.execute(f'insert into {dbname}.tb2 values (now(), {PI*2.5}, {PI*2.5})')
475 476

        for i in range(100):
C
cpwu 已提交
477
            tdSql.execute(f'insert into {dbname}.tb3 values (now()+{i}s, {PI*(5+i)/2}, {PI*(5+i)/2})')
478

C
cpwu 已提交
479
        self.check_result_auto_atan(f"select num1,num2 from {dbname}.tb3;" , f"select atan(num1),atan(num2) from {dbname}.tb3")
480

C
cpwu 已提交
481 482 483 484 485 486
    def support_super_table_test(self, dbname="db"):
        tdSql.execute(f" use {dbname} ")
        self.check_result_auto_atan( f" select c5 from {dbname}.stb1 order by ts " , f"select atan(c5) from {dbname}.stb1 order by ts" )
        self.check_result_auto_atan( f" select c5 from {dbname}.stb1 order by tbname " , f"select atan(c5) from {dbname}.stb1 order by tbname" )
        self.check_result_auto_atan( f" select c5 from {dbname}.stb1 where c1 > 0 order by tbname  " , f"select atan(c5) from {dbname}.stb1 where c1 > 0 order by tbname" )
        self.check_result_auto_atan( f" select c5 from {dbname}.stb1 where c1 > 0 order by tbname  " , f"select atan(c5) from {dbname}.stb1 where c1 > 0 order by tbname" )
487

C
cpwu 已提交
488 489 490 491
        self.check_result_auto_atan( f" select t1,c5 from {dbname}.stb1 order by ts " , f"select atan(t1), atan(c5) from {dbname}.stb1 order by ts" )
        self.check_result_auto_atan( f" select t1,c5 from {dbname}.stb1 order by tbname " , f"select atan(t1) ,atan(c5) from {dbname}.stb1 order by tbname" )
        self.check_result_auto_atan( f" select t1,c5 from {dbname}.stb1 where c1 > 0 order by tbname  " , f"select atan(t1) ,atan(c5) from {dbname}.stb1 where c1 > 0 order by tbname" )
        self.check_result_auto_atan( f" select t1,c5 from {dbname}.stb1 where c1 > 0 order by tbname  " , f"select atan(t1) , atan(c5) from {dbname}.stb1 where c1 > 0 order by tbname" )
492
        pass
G
Ganlin Zhao 已提交
493

C
cpwu 已提交
494

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

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

500 501
        self.prepare_datas()

G
Ganlin Zhao 已提交
502
        tdLog.printNoPrefix("==========step2:test errors ==============")
503 504

        self.test_errors()
G
Ganlin Zhao 已提交
505 506

        tdLog.printNoPrefix("==========step3:support types ============")
507 508 509

        self.support_types()

G
Ganlin Zhao 已提交
510
        tdLog.printNoPrefix("==========step4: atan basic query ============")
511 512 513

        self.basic_atan_function()

G
Ganlin Zhao 已提交
514
        tdLog.printNoPrefix("==========step5: big number atan query ============")
515 516 517 518

        self.test_big_number()


G
Ganlin Zhao 已提交
519
        tdLog.printNoPrefix("==========step6: atan boundary query ============")
520 521 522

        self.check_boundary_values()

G
Ganlin Zhao 已提交
523
        tdLog.printNoPrefix("==========step7: atan filter query ============")
524 525 526

        self.abs_func_filter()

C
cpwu 已提交
527
        tdLog.printNoPrefix("==========step8: check atan result of  stable query ============")
528 529 530

        self.support_super_table_test()

G
Ganlin Zhao 已提交
531

532 533 534 535 536 537
    def stop(self):
        tdSql.close()
        tdLog.success(f"{__file__} successfully executed")

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