abs.py 31.2 KB
Newer Older
1 2 3 4 5 6 7 8
import taos
import sys
import datetime
import inspect

from util.log import *
from util.sql import *
from util.cases import *
W
wenzhouwww@live.cn 已提交
9 10
import random

11 12

class TDTestCase:
C
cpwu 已提交
13 14 15
    # updatecfgDict = {'debugFlag': 143, "cDebugFlag": 143, "uDebugFlag": 143, "rpcDebugFlag": 143, "tmrDebugFlag": 143,
    #                  "jniDebugFlag": 143, "simDebugFlag": 143, "dDebugFlag": 143, "dDebugFlag": 143, "vDebugFlag": 143, "mDebugFlag": 143, "qDebugFlag": 143,
    #                  "wDebugFlag": 143, "sDebugFlag": 143, "tsdbDebugFlag": 143, "tqDebugFlag": 143, "fsDebugFlag": 143, "udfDebugFlag": 143}
W
wenzhouwww@live.cn 已提交
16

17 18
    def init(self, conn, logSql):
        tdLog.debug(f"start to excute {__file__}")
C
cpwu 已提交
19
        tdSql.init(conn.cursor(), False)
W
wenzhouwww@live.cn 已提交
20 21 22 23 24 25 26
        self.tb_nums = 10
        self.row_nums = 20
        self.ts = 1434938400000
        self.time_step = 1000

    def insert_datas_and_check_abs(self ,tbnums , rownums , time_step ):
        tdLog.info(" prepare datas for auto check abs function ")
C
cpwu 已提交
27 28 29
        dbname = "test"
        stbname = f"{dbname}.stb"
        ctbname_pre = f"{dbname}.sub_tb_"
W
wenzhouwww@live.cn 已提交
30

C
cpwu 已提交
31 32 33
        tdSql.execute(f" create database {dbname} ")
        tdSql.execute(f" use {dbname} ")
        tdSql.execute(f" create stable {stbname} (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint,\
W
wenzhouwww@live.cn 已提交
34 35
             c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp) tags (t1 int)")
        for tbnum in range(tbnums):
C
cpwu 已提交
36 37
            tbname = f"{ctbname_pre}{tbnum}"
            tdSql.execute(f" create table {tbname} using {stbname} tags({tbnum}) ")
W
wenzhouwww@live.cn 已提交
38 39 40

            ts = self.ts
            for row in range(rownums):
W
wenzhouwww@live.cn 已提交
41
                ts = self.ts + time_step*row
W
wenzhouwww@live.cn 已提交
42 43 44 45 46 47 48 49 50 51 52
                c1 = random.randint(0,10000)
                c2 = random.randint(0,100000)
                c3 = random.randint(0,125)
                c4 = random.randint(0,125)
                c5 = random.random()/1.0
                c6 = random.random()/1.0
                c7 = "'true'"
                c8 = "'binary_val'"
                c9 = "'nchar_val'"
                c10 = ts
                tdSql.execute(f" insert into  {tbname} values ({ts},{c1},{c2},{c3},{c4},{c5},{c6},{c7},{c8},{c9},{c10})")
53

C
cpwu 已提交
54 55
        tdSql.execute(f"use {dbname}")
        tbnames = [f"{stbname}", f"{ctbname_pre}1"]
W
wenzhouwww@live.cn 已提交
56 57 58 59 60 61 62 63 64 65
        support_types = ["BIGINT", "SMALLINT", "TINYINT", "FLOAT", "DOUBLE", "INT"]
        for tbname in tbnames:
            tdSql.query("desc {}".format(tbname))
            coltypes = tdSql.queryResult
            for coltype in coltypes:
                colname = coltype[0]
                abs_sql = "select abs({}) from {} order by tbname ".format(colname, tbname)
                origin_sql = "select {} from {} order by tbname".format(colname, tbname)
                if coltype[1] in support_types:
                    self.check_result_auto(origin_sql , abs_sql)
66

W
wenzhouwww@live.cn 已提交
67

C
cpwu 已提交
68
    def prepare_datas(self, dbname="db"):
69
        tdSql.execute(
C
cpwu 已提交
70
            f'''create table {dbname}.stb1
71 72 73 74
            (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)
            '''
        )
W
wenzhouwww@live.cn 已提交
75

76
        tdSql.execute(
C
cpwu 已提交
77 78
            f'''
            create table {dbname}.t1
79 80 81 82
            (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 已提交
83
            tdSql.execute(f'create table {dbname}.ct{i+1} using {dbname}.stb1 tags ( {i+1} )')
84 85 86

        for i in range(9):
            tdSql.execute(
C
cpwu 已提交
87
                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 )"
88 89
            )
            tdSql.execute(
C
cpwu 已提交
90
                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 )"
91
            )
W
wenzhouwww@live.cn 已提交
92
        tdSql.execute(
C
cpwu 已提交
93
            f"insert into {dbname}.ct1 values (now()-45s, 0, 0, 0, 0, 0, 0, 0, 'binary0', 'nchar0', now()+8a )")
W
wenzhouwww@live.cn 已提交
94
        tdSql.execute(
C
cpwu 已提交
95
            f"insert into {dbname}.ct1 values (now()+10s, 9, -99999, -999, -99, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a )")
W
wenzhouwww@live.cn 已提交
96
        tdSql.execute(
C
cpwu 已提交
97
            f"insert into {dbname}.ct1 values (now()+15s, 9, -99999, -999, -99, -9.99, NULL, 1, 'binary9', 'nchar9', now()+9a )")
W
wenzhouwww@live.cn 已提交
98
        tdSql.execute(
C
cpwu 已提交
99
            f"insert into {dbname}.ct1 values (now()+20s, 9, -99999, -999, NULL, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a )")
100

W
wenzhouwww@live.cn 已提交
101
        tdSql.execute(
C
cpwu 已提交
102
            f"insert into {dbname}.ct4 values (now()-810d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) ")
W
wenzhouwww@live.cn 已提交
103
        tdSql.execute(
C
cpwu 已提交
104
            f"insert into {dbname}.ct4 values (now()-400d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) ")
W
wenzhouwww@live.cn 已提交
105
        tdSql.execute(
C
cpwu 已提交
106
            f"insert into {dbname}.ct4 values (now()+90d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL  ) ")
107 108

        tdSql.execute(
C
cpwu 已提交
109
            f'''insert into {dbname}.t1 values
110 111 112 113 114 115 116 117 118 119 120 121 122 123
            ( '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 )
            '''
        )
124

C
cpwu 已提交
125
    def prepare_tag_datas(self, dbname="testdb"):
W
wenzhouwww@live.cn 已提交
126 127
        # prepare datas
        tdSql.execute(
C
cpwu 已提交
128
            f"create database if not exists {dbname} keep 3650 duration 1000")
129 130
        tdSql.execute(" use testdb ")
        tdSql.execute(
C
cpwu 已提交
131
            f'''create table {dbname}.stb1
132 133 134 135 136 137
            (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 (t0 timestamp, t1 int, t2 bigint, t3 smallint, t4 tinyint, t5 float, t6 double, t7 bool, t8 binary(16),t9 nchar(32))
            '''
        )

        tdSql.execute(
C
cpwu 已提交
138 139
            f'''
            create table {dbname}.t1
140 141 142 143
            (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):
W
wenzhouwww@live.cn 已提交
144
            tdSql.execute(
C
cpwu 已提交
145
                f'create table {dbname}.ct{i+1} using {dbname}.stb1 tags ( now(), {1*i}, {11111*i}, {111*i}, {1*i}, {1.11*i}, {11.11*i}, {i%2}, "binary{i}", "nchar{i}" )')
146 147 148

        for i in range(9):
            tdSql.execute(
C
cpwu 已提交
149
                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 )"
150 151
            )
            tdSql.execute(
C
cpwu 已提交
152
                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 )"
153
            )
W
wenzhouwww@live.cn 已提交
154
        tdSql.execute(
C
cpwu 已提交
155
            f"insert into {dbname}.ct1 values (now()-45s, 0, 0, 0, 0, 0, 0, 0, 'binary0', 'nchar0', now()+8a )")
W
wenzhouwww@live.cn 已提交
156
        tdSql.execute(
C
cpwu 已提交
157
            f"insert into {dbname}.ct1 values (now()+10s, 9, -99999, -999, -99, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a )")
W
wenzhouwww@live.cn 已提交
158
        tdSql.execute(
C
cpwu 已提交
159
            f"insert into {dbname}.ct1 values (now()+15s, 9, -99999, -999, -99, -9.99, NULL, 1, 'binary9', 'nchar9', now()+9a )")
W
wenzhouwww@live.cn 已提交
160
        tdSql.execute(
C
cpwu 已提交
161
            f"insert into {dbname}.ct1 values (now()+20s, 9, -99999, -999, NULL, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a )")
162

W
wenzhouwww@live.cn 已提交
163
        tdSql.execute(
C
cpwu 已提交
164
            f"insert into {dbname}.ct4 values (now()-810d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) ")
W
wenzhouwww@live.cn 已提交
165
        tdSql.execute(
C
cpwu 已提交
166
            f"insert into {dbname}.ct4 values (now()-400d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) ")
W
wenzhouwww@live.cn 已提交
167
        tdSql.execute(
C
cpwu 已提交
168
            f"insert into {dbname}.ct4 values (now()+90d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL  ) ")
169 170

        tdSql.execute(
C
cpwu 已提交
171
            f'''insert into {dbname}.t1 values
172 173 174 175 176 177 178 179 180 181 182 183 184 185 186
            ( '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 )
            '''
        )

W
wenzhouwww@live.cn 已提交
187
    def check_result_auto(self, origin_query, abs_query):
188 189 190
        abs_result = tdSql.getResult(abs_query)
        origin_result = tdSql.getResult(origin_query)

W
wenzhouwww@live.cn 已提交
191 192
        auto_result = []

193 194 195 196 197
        for row in origin_result:
            row_check = []
            for elem in row:
                if elem == None:
                    elem = None
W
wenzhouwww@live.cn 已提交
198
                elif elem >= 0:
199 200 201 202 203 204 205
                    elem = elem
                else:
                    elem = -elem
                row_check.append(elem)
            auto_result.append(row_check)

        check_status = True
W
wenzhouwww@live.cn 已提交
206 207
        for row_index, row in enumerate(abs_result):
            for col_index, elem in enumerate(row):
208
                if auto_result[row_index][col_index] != elem:
W
wenzhouwww@live.cn 已提交
209
                    check_status = False
210
        if not check_status:
W
wenzhouwww@live.cn 已提交
211 212
            tdLog.notice(
                "abs function value has not as expected , sql is \"%s\" " % abs_query)
213 214
            sys.exit(1)
        else:
W
wenzhouwww@live.cn 已提交
215 216 217
            tdLog.info(
                "abs value check pass , it work as expected ,sql is \"%s\"   " % abs_query)

218
    def test_errors(self):
C
cpwu 已提交
219 220
        dbname = "testdb"
        tdSql.execute(f"use {dbname}")
221
        error_sql_lists = [
C
cpwu 已提交
222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249
            f"select abs from {dbname}.t1",
            f"select abs(-+--+c1) from {dbname}.t1",
            # f"select +-abs(c1) from {dbname}.t1",
            # f"select ++-abs(c1) from {dbname}.t1",
            # f"select ++--abs(c1) from {dbname}.t1",
            # f"select - -abs(c1)*0 from {dbname}.t1",
            # f"select abs(tbname+1) from {dbname}.t1 ",
            f"select abs(123--123)==1 from {dbname}.t1",
            f"select abs(c1) as 'd1' from {dbname}.t1",
            f"select abs(c1 ,c2 ) from {dbname}.t1",
            f"select abs(c1 ,NULL) from {dbname}.t1",
            f"select abs(,) from {dbname}.t1;",
            f"select abs(abs(c1) ab from {dbname}.t1)",
            f"select abs(c1) as int from {dbname}.t1",
            f"select abs from {dbname}.stb1",
            # f"select abs(-+--+c1) from {dbname}.stb1",
            # f"select +-abs(c1) from {dbname}.stb1",
            # f"select ++-abs(c1) from {dbname}.stb1",
            # f"select ++--abs(c1) from {dbname}.stb1",
            # f"select - -abs(c1)*0 from {dbname}.stb1",
            # f"select abs(tbname+1) from {dbname}.stb1 ",
            f"select abs(123--123)==1 from {dbname}.stb1",
            f"select abs(c1) as 'd1' from {dbname}.stb1",
            f"select abs(c1 ,c2 ) from {dbname}.stb1",
            f"select abs(c1 ,NULL) from {dbname}.stb1",
            f"select abs(,) from {dbname}.stb1;",
            f"select abs(abs(c1) ab from {dbname}.stb1)",
            f"select abs(c1) as int from {dbname}.stb1"
250 251 252
        ]
        for error_sql in error_sql_lists:
            tdSql.error(error_sql)
W
wenzhouwww@live.cn 已提交
253

254
    def support_types(self):
C
cpwu 已提交
255 256 257
        dbname = "testdb"
        tdSql.execute(f"use {dbname}")
        tbnames = [f"{dbname}.stb1", f"{dbname}.t1", f"{dbname}.ct1", f"{dbname}.ct2"]
W
wenzhouwww@live.cn 已提交
258 259 260 261 262 263 264 265 266 267 268
        support_types = ["BIGINT", "SMALLINT", "TINYINT", "FLOAT", "DOUBLE", "INT"]
        for tbname in tbnames:
            tdSql.query("desc {}".format(tbname))
            coltypes = tdSql.queryResult
            for coltype in coltypes:
                colname = coltype[0]
                abs_sql = "select abs({}) from {}".format(colname, tbname)
                if coltype[1] in support_types:
                    tdSql.query(abs_sql)
                else:
                    tdSql.error(abs_sql)
269

C
cpwu 已提交
270
    def basic_abs_function(self, dbname="db"):
271

W
wenzhouwww@live.cn 已提交
272
        # basic query
C
cpwu 已提交
273
        tdSql.query(f"select c1 from {dbname}.ct3")
274
        tdSql.checkRows(0)
C
cpwu 已提交
275
        tdSql.query(f"select c1 from {dbname}.t1")
276
        tdSql.checkRows(12)
C
cpwu 已提交
277
        tdSql.query(f"select c1 from {dbname}.stb1")
278 279 280
        tdSql.checkRows(25)

        # used for empty table  , ct3 is empty
C
cpwu 已提交
281
        tdSql.query(f"select abs(c1) from {dbname}.ct3")
282
        tdSql.checkRows(0)
C
cpwu 已提交
283
        tdSql.query(f"select abs(c2) from {dbname}.ct3")
284
        tdSql.checkRows(0)
C
cpwu 已提交
285
        tdSql.query(f"select abs(c3) from {dbname}.ct3")
286
        tdSql.checkRows(0)
C
cpwu 已提交
287
        tdSql.query(f"select abs(c4) from {dbname}.ct3")
288
        tdSql.checkRows(0)
C
cpwu 已提交
289
        tdSql.query(f"select abs(c5) from {dbname}.ct3")
290
        tdSql.checkRows(0)
C
cpwu 已提交
291
        tdSql.query(f"select abs(c6) from {dbname}.ct3")
W
wenzhouwww@live.cn 已提交
292

293
        # used for regular table
C
cpwu 已提交
294
        tdSql.query(f"select abs(c1) from {dbname}.t1")
295
        tdSql.checkData(0, 0, None)
W
wenzhouwww@live.cn 已提交
296 297 298
        tdSql.checkData(1, 0, 1)
        tdSql.checkData(3, 0, 3)
        tdSql.checkData(5, 0, None)
299

C
cpwu 已提交
300
        tdSql.query(f"select c1, c2, c3 , c4, c5 from {dbname}.t1")
301 302 303
        tdSql.checkData(1, 4, 1.11000)
        tdSql.checkData(3, 3, 33)
        tdSql.checkData(5, 4, None)
C
cpwu 已提交
304
        tdSql.query(f"select ts,c1, c2, c3 , c4, c5 from {dbname}.t1")
305 306 307 308
        tdSql.checkData(1, 5, 1.11000)
        tdSql.checkData(3, 4, 33)
        tdSql.checkData(5, 5, None)

C
cpwu 已提交
309 310
        self.check_result_auto(f"select c1, c2, c3 , c4, c5 from {dbname}.t1",
                               f"select (c1), abs(c2) ,abs(c3), abs(c4), abs(c5) from {dbname}.t1")
W
wenzhouwww@live.cn 已提交
311

312
        # used for sub table
C
cpwu 已提交
313
        tdSql.query(f"select abs(c1) from {dbname}.ct1")
314
        tdSql.checkData(0, 0, 8)
W
wenzhouwww@live.cn 已提交
315 316 317
        tdSql.checkData(1, 0, 7)
        tdSql.checkData(3, 0, 5)
        tdSql.checkData(5, 0, 4)
318

C
cpwu 已提交
319 320 321
        tdSql.query(f"select abs(c1) from {dbname}.ct1")
        self.check_result_auto(f"select c1, c2, c3 , c4, c5 from {dbname}.ct1",
                               f"select (c1), abs(c2) ,abs(c3), abs(c4), abs(c5) from {dbname}.ct1")
W
wenzhouwww@live.cn 已提交
322
        self.check_result_auto(
C
cpwu 已提交
323
            f"select abs(abs(abs(abs(abs(abs(abs(abs(abs(abs(c1)))))))))) nest_col_func from {dbname}.ct1;", f"select c1 from {dbname}.ct1")
W
wenzhouwww@live.cn 已提交
324 325

        # used for stable table
326

C
cpwu 已提交
327
        tdSql.query(f"select abs(c1) from {dbname}.stb1")
328
        tdSql.checkRows(25)
C
cpwu 已提交
329 330
        self.check_result_auto(f"select c1, c2, c3 , c4, c5 from {dbname}.ct4 ",
                               f"select (c1), abs(c2) ,abs(c3), abs(c4), abs(c5) from {dbname}.ct4")
W
wenzhouwww@live.cn 已提交
331
        self.check_result_auto(
C
cpwu 已提交
332
            f"select abs(abs(abs(abs(abs(abs(abs(abs(abs(abs(c1)))))))))) nest_col_func from {dbname}.ct4;", f"select c1 from {dbname}.ct4")
333 334

        # used for not exists table
C
cpwu 已提交
335 336 337
        tdSql.error(f"select abs(c1) from {dbname}.stbbb1")
        tdSql.error(f"select abs(c1) from {dbname}.tbname")
        tdSql.error(f"select abs(c1) from {dbname}.ct5")
338

W
wenzhouwww@live.cn 已提交
339
        # mix with common col
C
cpwu 已提交
340
        tdSql.query(f"select c1, abs(c1) from {dbname}.ct1")
W
wenzhouwww@live.cn 已提交
341 342 343 344
        tdSql.checkData(0, 0, 8)
        tdSql.checkData(0, 1, 8)
        tdSql.checkData(4, 0, 0)
        tdSql.checkData(4, 1, 0)
C
cpwu 已提交
345
        tdSql.query(f"select c1, abs(c1) from {dbname}.ct4")
W
wenzhouwww@live.cn 已提交
346 347 348 349 350 351
        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 已提交
352
        tdSql.query(f"select c1, abs(c1) from {dbname}.ct4 ")
W
wenzhouwww@live.cn 已提交
353 354 355 356
        tdSql.checkData(0, 0, None)
        tdSql.checkData(0, 1, None)
        tdSql.checkData(4, 0, 5)
        tdSql.checkData(4, 1, 5)
357 358

        # mix with common functions
C
cpwu 已提交
359
        tdSql.query(f"select c1, abs(c1),c5, floor(c5) from {dbname}.ct4 ")
W
wenzhouwww@live.cn 已提交
360 361 362 363 364 365 366 367 368
        tdSql.checkData(0, 0, None)
        tdSql.checkData(0, 1, None)
        tdSql.checkData(0, 2, None)
        tdSql.checkData(0, 3, None)

        tdSql.checkData(3, 0, 6)
        tdSql.checkData(3, 1, 6)
        tdSql.checkData(3, 2, 6.66000)
        tdSql.checkData(3, 3, 6.00000)
369

C
cpwu 已提交
370
        tdSql.query(f"select c1, abs(c1),c5, floor(c5) from {dbname}.stb1 ")
371 372

        # mix with agg functions , not support
C
cpwu 已提交
373 374 375 376 377 378
        tdSql.error(f"select c1, abs(c1),c5, count(c5) from {dbname}.stb1 ")
        tdSql.error(f"select c1, abs(c1),c5, count(c5) from {dbname}.ct1 ")
        tdSql.error(f"select abs(c1), count(c5) from {dbname}.stb1 ")
        tdSql.error(f"select abs(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 ")
379 380 381

        # agg functions mix with agg functions

C
cpwu 已提交
382 383
        tdSql.query(f"select max(c5), count(c5) from {dbname}.stb1")
        tdSql.query(f"select max(c5), count(c5) from {dbname}.ct1")
384 385

        # bug fix for count
C
cpwu 已提交
386
        tdSql.query(f"select count(c1) from {dbname}.ct4 ")
W
wenzhouwww@live.cn 已提交
387
        tdSql.checkData(0, 0, 9)
C
cpwu 已提交
388
        tdSql.query(f"select count(*) from {dbname}.ct4 ")
W
wenzhouwww@live.cn 已提交
389
        tdSql.checkData(0, 0, 12)
C
cpwu 已提交
390
        tdSql.query(f"select count(c1) from {dbname}.stb1 ")
W
wenzhouwww@live.cn 已提交
391
        tdSql.checkData(0, 0, 22)
C
cpwu 已提交
392
        tdSql.query(f"select count(*) from {dbname}.stb1 ")
W
wenzhouwww@live.cn 已提交
393
        tdSql.checkData(0, 0, 25)
394

W
wenzhouwww@live.cn 已提交
395
        # bug fix for compute
C
cpwu 已提交
396
        tdSql.query(f"select c1, abs(c1) -0 ,ceil(c1)-0 from {dbname}.ct4 ")
W
wenzhouwww@live.cn 已提交
397 398 399 400 401 402 403
        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 已提交
404
        tdSql.query(f" select c1, abs(c1) -0 ,ceil(c1-0.1)-0.1 from {dbname}.ct4")
W
wenzhouwww@live.cn 已提交
405 406 407 408 409 410 411
        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 已提交
412 413
    def abs_func_filter(self, dbname="db"):
        tdSql.execute(f"use {dbname}")
W
wenzhouwww@live.cn 已提交
414
        tdSql.query(
C
cpwu 已提交
415
            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 已提交
416
        tdSql.checkRows(3)
W
wenzhouwww@live.cn 已提交
417 418 419 420 421
        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)
W
wenzhouwww@live.cn 已提交
422

W
wenzhouwww@live.cn 已提交
423
        tdSql.query(
C
cpwu 已提交
424
            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 已提交
425
        tdSql.checkRows(1)
W
wenzhouwww@live.cn 已提交
426 427 428 429 430 431 432
        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)

        tdSql.query(
C
cpwu 已提交
433
            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 已提交
434
        tdSql.checkRows(1)
W
wenzhouwww@live.cn 已提交
435 436 437 438 439 440 441
        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)

        tdSql.query(
C
cpwu 已提交
442
            f"select c1,c2 , abs(c1) -0 ,ceil(c1-0.1)-0 ,floor(c1+0.1)-0.1 ,ceil(log(c1,2)-0.5) from {dbname}.ct4 where c1>log(c1,2) limit 1 ")
W
wenzhouwww@live.cn 已提交
443
        tdSql.checkRows(1)
W
wenzhouwww@live.cn 已提交
444 445 446 447 448 449
        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)
W
wenzhouwww@live.cn 已提交
450

451 452
    def abs_Arithmetic(self):
        pass
W
wenzhouwww@live.cn 已提交
453

454 455
    def check_boundary_values(self):

C
cpwu 已提交
456 457 458 459
        dbname = "bound_test"

        tdSql.execute(f"drop database if exists {dbname}")
        tdSql.execute(f"create database if not exists {dbname}")
460
        time.sleep(3)
C
cpwu 已提交
461
        tdSql.execute(f"use {dbname}")
462
        tdSql.execute(
C
cpwu 已提交
463
            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);"
464
        )
C
cpwu 已提交
465
        tdSql.execute(f'create table {dbname}.sub1_bound using {dbname}.stb_bound tags ( 1 )')
466
        tdSql.execute(
C
cpwu 已提交
467
            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 已提交
468
        )
469
        tdSql.execute(
C
cpwu 已提交
470
            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 已提交
471
        )
472
        tdSql.execute(
C
cpwu 已提交
473
            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 已提交
474
        )
475
        tdSql.execute(
C
cpwu 已提交
476
            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 已提交
477
        )
478
        tdSql.error(
C
cpwu 已提交
479
            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 已提交
480
        )
C
cpwu 已提交
481 482 483 484
        self.check_result_auto(f"select c1, c2, c3 , c4, c5 ,c6 from {dbname}.sub1_bound ",
                               f"select abs(c1), abs(c2) ,abs(c3), abs(c4), abs(c5) ,abs(c6) from {dbname}.sub1_bound")
        self.check_result_auto(f"select c1, c2, c3 , c3, c2 ,c1 from {dbname}.sub1_bound ",
                               f"select abs(c1), abs(c2) ,abs(c3), abs(c3), abs(c2) ,abs(c1) from {dbname}.sub1_bound")
W
wenzhouwww@live.cn 已提交
485
        self.check_result_auto(
C
cpwu 已提交
486
            f"select abs(abs(abs(abs(abs(abs(abs(abs(abs(abs(c1)))))))))) nest_col_func from {dbname}.sub1_bound;", f"select abs(c1) from {dbname}.sub1_bound")
W
wenzhouwww@live.cn 已提交
487

488
        # check basic elem for table per row
W
wenzhouwww@live.cn 已提交
489
        tdSql.query(
C
cpwu 已提交
490
            f"select abs(c1) ,abs(c2) , abs(c3) , abs(c4), abs(c5), abs(c6) from {dbname}.sub1_bound ")
W
wenzhouwww@live.cn 已提交
491 492 493 494
        tdSql.checkData(0, 0, 2147483647)
        tdSql.checkData(0, 1, 9223372036854775807)
        tdSql.checkData(0, 2, 32767)
        tdSql.checkData(0, 3, 127)
C
cpwu 已提交
495 496 497 498
        # tdSql.checkData(0, 4, 339999995214436424907732413799364296704.00000)
        tdSql.checkData(0, 4, 3.4E+38)
        # tdSql.checkData(0, 5, 169999999999999993883079578865998174333346074304075874502773119193537729178160565864330091787584707988572262467983188919169916105593357174268369962062473635296474636515660464935663040684957844303524367815028553272712298986386310828644513212353921123253311675499856875650512437415429217994623324794855339589632.000000000)
        tdSql.checkData(0, 5, 1.7E+308)
W
wenzhouwww@live.cn 已提交
499 500 501 502
        tdSql.checkData(1, 0, 2147483647)
        tdSql.checkData(1, 1, 9223372036854775807)
        tdSql.checkData(1, 2, 32767)
        tdSql.checkData(1, 3, 127)
C
cpwu 已提交
503 504 505 506
        # tdSql.checkData(1, 4, 339999995214436424907732413799364296704.00000)
        tdSql.checkData(1, 4, 3.4E+38)
        # tdSql.checkData(1, 5, 169999999999999993883079578865998174333346074304075874502773119193537729178160565864330091787584707988572262467983188919169916105593357174268369962062473635296474636515660464935663040684957844303524367815028553272712298986386310828644513212353921123253311675499856875650512437415429217994623324794855339589632.000000000)
        tdSql.checkData(1, 5, 1.7E+308)
W
wenzhouwww@live.cn 已提交
507 508 509 510
        tdSql.checkData(3, 0, 2147483646)
        tdSql.checkData(3, 1, 9223372036854775806)
        tdSql.checkData(3, 2, 32766)
        tdSql.checkData(3, 3, 126)
C
cpwu 已提交
511 512 513 514
        # tdSql.checkData(3, 4, 339999995214436424907732413799364296704.00000)
        tdSql.checkData(3, 4, 3.4E+38)
        # tdSql.checkData(3, 5, 169999999999999993883079578865998174333346074304075874502773119193537729178160565864330091787584707988572262467983188919169916105593357174268369962062473635296474636515660464935663040684957844303524367815028553272712298986386310828644513212353921123253311675499856875650512437415429217994623324794855339589632.000000000)
        tdSql.checkData(3, 5, 1.7E+308)
515 516

        # check  + - * / in functions
W
wenzhouwww@live.cn 已提交
517
        tdSql.query(
C
cpwu 已提交
518
            f"select abs(c1+1) ,abs(c2) , abs(c3*1) , abs(c4/2), abs(c5)/2, abs(c6) from {dbname}.sub1_bound ")
W
wenzhouwww@live.cn 已提交
519 520 521 522
        tdSql.checkData(0, 0, 2147483648.000000000)
        tdSql.checkData(0, 1, 9223372036854775807)
        tdSql.checkData(0, 2, 32767.000000000)
        tdSql.checkData(0, 3, 63.500000000)
C
cpwu 已提交
523
        tdSql.checkData(0, 4, 169999997607218212453866206899682148352.000000000)
W
wenzhouwww@live.cn 已提交
524 525 526 527 528 529
        tdSql.checkData(0, 5, 169999999999999993883079578865998174333346074304075874502773119193537729178160565864330091787584707988572262467983188919169916105593357174268369962062473635296474636515660464935663040684957844303524367815028553272712298986386310828644513212353921123253311675499856875650512437415429217994623324794855339589632.000000000)

        tdSql.checkData(1, 0, 2147483646.000000000)
        tdSql.checkData(1, 1, 9223372036854775808.000000000)
        tdSql.checkData(1, 2, 32767.000000000)
        tdSql.checkData(1, 3, 63.500000000)
C
cpwu 已提交
530
        tdSql.checkData(1, 4, 169999997607218212453866206899682148352.000000000)
W
wenzhouwww@live.cn 已提交
531

C
cpwu 已提交
532 533
        self.check_result_auto(f"select c1+1 ,c2 , c3*1 , c4/2, c5/2, c6 from {dbname}.sub1_bound",
                               f"select abs(c1+1) ,abs(c2) , abs(c3*1) , abs(c4/2), abs(c5)/2, abs(c6) from {dbname}.sub1_bound ")
534

535
    def test_tag_compute_for_scalar_function(self):
C
cpwu 已提交
536
        dbname = "testdb"
W
wenzhouwww@live.cn 已提交
537

C
cpwu 已提交
538
        tdSql.execute(f"use {dbname}")
539

C
cpwu 已提交
540 541 542 543 544 545
        self.check_result_auto(f"select c1, t2, t3 , t4, t5 from {dbname}.ct4 ",
                               f"select (c1), abs(t2) ,abs(t3), abs(t4), abs(t5) from {dbname}.ct4")
        self.check_result_auto(f"select c1+2, t2+2, t3 , t4, t5 from {dbname}.ct4 ",
                               f"select (c1)+2, abs(t2)+2 ,abs(t3), abs(t4), abs(t5) from {dbname}.ct4")
        self.check_result_auto(f"select c1+2, t2+2, t3 , t4, t5 from {dbname}.stb1 order by t1 ",
                               f"select (c1)+2, abs(t2)+2 ,abs(t3), abs(t4), abs(t5) from {dbname}.stb1 order by t1")
546

W
wenzhouwww@live.cn 已提交
547
        # bug need fix
548

W
wenzhouwww@live.cn 已提交
549
        # tdSql.query(" select sum(c1) from stb1 where t1+10 >1; ")  # taosd crash
C
cpwu 已提交
550
        tdSql.query(f"select c1 ,t1 from {dbname}.stb1 where t1 =0 ")
551
        tdSql.checkRows(13)
C
cpwu 已提交
552
        tdSql.query(f"select t1 from {dbname}.stb1 where t1 >0 ")
553
        tdSql.checkRows(12)
C
cpwu 已提交
554
        tdSql.query(f"select t1 from {dbname}.stb1 where t1 =3 ")
555
        tdSql.checkRows(12)
C
cpwu 已提交
556
        # tdSql.query(f"select sum(t1) from (select c1 ,t1 from {dbname}.stb1)")
557
        # tdSql.checkData(0,0,61)
C
cpwu 已提交
558
        # tdSql.query(f"select distinct(c1) ,t1 from {dbname}.stb1")
W
wenzhouwww@live.cn 已提交
559
        # tdSql.checkRows(20)
C
cpwu 已提交
560
        tdSql.query(f"select max(t2) , t1 ,c1, t2 from {dbname}.stb1")
W
wenzhouwww@live.cn 已提交
561
        tdSql.checkData(0,3,33333)
562 563

        # tag filter with abs function
C
cpwu 已提交
564
        tdSql.query(f"select t1 from {dbname}.stb1 where abs(t1)=1")
565
        tdSql.checkRows(0)
C
cpwu 已提交
566
        tdSql.query(f"select t1 from {dbname}.stb1 where abs(c1+t1)=1")
W
wenzhouwww@live.cn 已提交
567
        tdSql.checkRows(1)
W
wenzhouwww@live.cn 已提交
568
        tdSql.checkData(0,0,0)
W
wenzhouwww@live.cn 已提交
569
        
W
wenzhouwww@live.cn 已提交
570 571
        tdSql.query("select abs(c1) from (select ts , c1 ,t1 from stb1)")
        tdSql.checkRows(25)
W
wenzhouwww@live.cn 已提交
572

W
wenzhouwww@live.cn 已提交
573
        tdSql.query(
C
cpwu 已提交
574
            f"select abs(c1+t1)*t1 from {dbname}.stb1 where abs(c1)/floor(abs(ceil(t1))) ==1")
575

576
    def support_super_table_test(self):
C
cpwu 已提交
577 578 579 580 581 582 583 584 585 586 587
        dbname = "testdb"
        tdSql.execute(f" use {dbname} ")
        self.check_result_auto( f" select c1 from {dbname}.stb1 order by ts " , f"select abs(c1) from {dbname}.stb1 order by ts" )
        self.check_result_auto( f" select c1 from {dbname}.stb1 order by tbname " , f"select abs(c1) from {dbname}.stb1 order by tbname" )
        self.check_result_auto( f" select c1 from {dbname}.stb1 where c1 > 0 order by tbname  " , f"select abs(c1) from {dbname}.stb1 where c1 > 0 order by tbname" )
        self.check_result_auto( f" select c1 from {dbname}.stb1 where c1 > 0 order by tbname  " , f"select abs(c1) from {dbname}.stb1 where c1 > 0 order by tbname" )

        self.check_result_auto( f" select t1,c1 from {dbname}.stb1 order by ts " , f"select t1, abs(c1) from {dbname}.stb1 order by ts" )
        self.check_result_auto( f" select t2,c1 from {dbname}.stb1 order by tbname " , f"select t2 ,abs(c1) from {dbname}.stb1 order by tbname" )
        self.check_result_auto( f" select t3,c1 from {dbname}.stb1 where c1 > 0 order by tbname  " , f"select t3 ,abs(c1) from {dbname}.stb1 where c1 > 0 order by tbname" )
        self.check_result_auto( f" select t4,c1 from {dbname}.stb1 where c1 > 0 order by tbname  " , f"select t4 , abs(c1) from {dbname}.stb1 where c1 > 0 order by tbname" )
588 589 590
        pass


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

        tdLog.printNoPrefix("==========step1:create table ==============")
W
wenzhouwww@live.cn 已提交
595

596
        self.prepare_datas()
597
        self.prepare_tag_datas()
598

W
wenzhouwww@live.cn 已提交
599
        tdLog.printNoPrefix("==========step2:test errors ==============")
600

601
        self.test_errors()
W
wenzhouwww@live.cn 已提交
602 603

        tdLog.printNoPrefix("==========step3:support types ============")
604

605 606
        self.support_types()

W
wenzhouwww@live.cn 已提交
607
        tdLog.printNoPrefix("==========step4: abs basic query ============")
608

609
        self.basic_abs_function()
610

W
wenzhouwww@live.cn 已提交
611
        tdLog.printNoPrefix("==========step5: abs boundary query ============")
612

613
        self.check_boundary_values()
614

W
wenzhouwww@live.cn 已提交
615
        tdLog.printNoPrefix("==========step6: abs filter query ============")
W
wenzhouwww@live.cn 已提交
616 617 618

        self.abs_func_filter()

W
wenzhouwww@live.cn 已提交
619 620
        tdLog.printNoPrefix("==========step6: tag coumpute query ============")

621 622
        self.test_tag_compute_for_scalar_function()

W
wenzhouwww@live.cn 已提交
623 624 625 626
        tdLog.printNoPrefix("==========step7: check result of query ============")

        self.insert_datas_and_check_abs(self.tb_nums,self.row_nums,self.time_step)

627 628 629 630
        tdLog.printNoPrefix("==========step8: check abs result of  stable query ============")

        self.support_super_table_test()

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

W
wenzhouwww@live.cn 已提交
635

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