abs.py 31.4 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
    def init(self, conn, logSql, replicaVar=1):
18
        self.replicaVar = int(replicaVar)
19
        tdLog.debug(f"start to excute {__file__}")
C
cpwu 已提交
20
        tdSql.init(conn.cursor(), False)
W
wenzhouwww@live.cn 已提交
21 22 23 24
        self.tb_nums = 10
        self.row_nums = 20
        self.ts = 1434938400000
        self.time_step = 1000
25
        self.replicaVar = int(replicaVar)
W
wenzhouwww@live.cn 已提交
26 27 28

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

33
        tdSql.execute(f" create database {dbname} replica {self.replicaVar} ")
C
cpwu 已提交
34 35
        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 已提交
36 37
             c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp) tags (t1 int)")
        for tbnum in range(tbnums):
C
cpwu 已提交
38 39
            tbname = f"{ctbname_pre}{tbnum}"
            tdSql.execute(f" create table {tbname} using {stbname} tags({tbnum}) ")
W
wenzhouwww@live.cn 已提交
40 41 42

            ts = self.ts
            for row in range(rownums):
W
wenzhouwww@live.cn 已提交
43
                ts = self.ts + time_step*row
W
wenzhouwww@live.cn 已提交
44 45 46 47 48 49 50 51 52 53 54
                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})")
55

C
cpwu 已提交
56 57
        tdSql.execute(f"use {dbname}")
        tbnames = [f"{stbname}", f"{ctbname_pre}1"]
W
wenzhouwww@live.cn 已提交
58 59 60 61 62 63 64 65 66 67
        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)
68

W
wenzhouwww@live.cn 已提交
69

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

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

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

W
wenzhouwww@live.cn 已提交
103
        tdSql.execute(
C
cpwu 已提交
104
            f"insert into {dbname}.ct4 values (now()-810d, 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()-400d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) ")
W
wenzhouwww@live.cn 已提交
107
        tdSql.execute(
C
cpwu 已提交
108
            f"insert into {dbname}.ct4 values (now()+90d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL  ) ")
109 110

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

C
cpwu 已提交
127
    def prepare_tag_datas(self, dbname="testdb"):
W
wenzhouwww@live.cn 已提交
128 129
        # prepare datas
        tdSql.execute(
130
            f"create database if not exists {dbname} keep 3650 duration 1000  replica {self.replicaVar} ")
131 132
        tdSql.execute(" use testdb ")
        tdSql.execute(
C
cpwu 已提交
133
            f'''create table {dbname}.stb1
134 135 136 137 138 139
            (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 已提交
140 141
            f'''
            create table {dbname}.t1
142 143 144 145
            (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 已提交
146
            tdSql.execute(
C
cpwu 已提交
147
                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}" )')
148 149 150

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

W
wenzhouwww@live.cn 已提交
165
        tdSql.execute(
C
cpwu 已提交
166
            f"insert into {dbname}.ct4 values (now()-810d, 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()-400d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) ")
W
wenzhouwww@live.cn 已提交
169
        tdSql.execute(
C
cpwu 已提交
170
            f"insert into {dbname}.ct4 values (now()+90d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL  ) ")
171 172

        tdSql.execute(
C
cpwu 已提交
173
            f'''insert into {dbname}.t1 values
174 175 176 177 178 179 180 181 182 183 184 185 186 187 188
            ( '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 已提交
189
    def check_result_auto(self, origin_query, abs_query):
190 191 192
        abs_result = tdSql.getResult(abs_query)
        origin_result = tdSql.getResult(origin_query)

W
wenzhouwww@live.cn 已提交
193 194
        auto_result = []

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

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

220
    def test_errors(self):
C
cpwu 已提交
221 222
        dbname = "testdb"
        tdSql.execute(f"use {dbname}")
223
        error_sql_lists = [
C
cpwu 已提交
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 250 251
            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"
252 253 254
        ]
        for error_sql in error_sql_lists:
            tdSql.error(error_sql)
W
wenzhouwww@live.cn 已提交
255

256
    def support_types(self):
C
cpwu 已提交
257 258 259
        dbname = "testdb"
        tdSql.execute(f"use {dbname}")
        tbnames = [f"{dbname}.stb1", f"{dbname}.t1", f"{dbname}.ct1", f"{dbname}.ct2"]
W
wenzhouwww@live.cn 已提交
260 261 262 263 264 265 266 267 268 269 270
        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)
271

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

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

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

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

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

C
cpwu 已提交
311 312
        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 已提交
313

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

C
cpwu 已提交
321 322 323
        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 已提交
324
        self.check_result_auto(
C
cpwu 已提交
325
            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 已提交
326 327

        # used for stable table
328

C
cpwu 已提交
329
        tdSql.query(f"select abs(c1) from {dbname}.stb1")
330
        tdSql.checkRows(25)
C
cpwu 已提交
331 332
        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 已提交
333
        self.check_result_auto(
C
cpwu 已提交
334
            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")
335 336

        # used for not exists table
C
cpwu 已提交
337 338 339
        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")
340

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

        # mix with common functions
C
cpwu 已提交
361
        tdSql.query(f"select c1, abs(c1),c5, floor(c5) from {dbname}.ct4 ")
W
wenzhouwww@live.cn 已提交
362 363 364 365 366 367 368 369 370
        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)
371

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

        # mix with agg functions , not support
C
cpwu 已提交
375 376 377 378 379 380
        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 ")
381 382 383

        # agg functions mix with agg functions

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

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

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

W
wenzhouwww@live.cn 已提交
425
        tdSql.query(
C
cpwu 已提交
426
            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 已提交
427
        tdSql.checkRows(1)
W
wenzhouwww@live.cn 已提交
428 429 430 431 432 433 434
        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 已提交
435
            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 已提交
436
        tdSql.checkRows(1)
W
wenzhouwww@live.cn 已提交
437 438 439 440 441 442 443
        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 已提交
444
            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 已提交
445
        tdSql.checkRows(1)
W
wenzhouwww@live.cn 已提交
446 447 448 449 450 451
        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 已提交
452

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

456 457
    def check_boundary_values(self):

C
cpwu 已提交
458 459 460
        dbname = "bound_test"

        tdSql.execute(f"drop database if exists {dbname}")
461
        tdSql.execute(f"create database if not exists {dbname}  replica {self.replicaVar}  ")
462
        time.sleep(3)
C
cpwu 已提交
463
        tdSql.execute(f"use {dbname}")
464
        tdSql.execute(
C
cpwu 已提交
465
            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);"
466
        )
C
cpwu 已提交
467
        tdSql.execute(f'create table {dbname}.sub1_bound using {dbname}.stb_bound tags ( 1 )')
468
        tdSql.execute(
C
cpwu 已提交
469
            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 已提交
470
        )
471
        tdSql.execute(
C
cpwu 已提交
472
            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 已提交
473
        )
474
        tdSql.execute(
C
cpwu 已提交
475
            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 已提交
476
        )
477
        tdSql.execute(
C
cpwu 已提交
478
            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 已提交
479
        )
480
        tdSql.error(
C
cpwu 已提交
481
            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 已提交
482
        )
C
cpwu 已提交
483 484 485 486
        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 已提交
487
        self.check_result_auto(
C
cpwu 已提交
488
            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 已提交
489

490
        # check basic elem for table per row
W
wenzhouwww@live.cn 已提交
491
        tdSql.query(
C
cpwu 已提交
492
            f"select abs(c1) ,abs(c2) , abs(c3) , abs(c4), abs(c5), abs(c6) from {dbname}.sub1_bound ")
W
wenzhouwww@live.cn 已提交
493 494 495 496
        tdSql.checkData(0, 0, 2147483647)
        tdSql.checkData(0, 1, 9223372036854775807)
        tdSql.checkData(0, 2, 32767)
        tdSql.checkData(0, 3, 127)
C
cpwu 已提交
497 498 499 500
        # 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 已提交
501 502 503 504
        tdSql.checkData(1, 0, 2147483647)
        tdSql.checkData(1, 1, 9223372036854775807)
        tdSql.checkData(1, 2, 32767)
        tdSql.checkData(1, 3, 127)
C
cpwu 已提交
505 506 507 508
        # 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 已提交
509 510 511 512
        tdSql.checkData(3, 0, 2147483646)
        tdSql.checkData(3, 1, 9223372036854775806)
        tdSql.checkData(3, 2, 32766)
        tdSql.checkData(3, 3, 126)
C
cpwu 已提交
513 514 515 516
        # 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)
517 518

        # check  + - * / in functions
W
wenzhouwww@live.cn 已提交
519
        tdSql.query(
C
cpwu 已提交
520
            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 已提交
521 522 523 524
        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 已提交
525
        tdSql.checkData(0, 4, 169999997607218212453866206899682148352.000000000)
W
wenzhouwww@live.cn 已提交
526 527 528 529 530 531
        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 已提交
532
        tdSql.checkData(1, 4, 169999997607218212453866206899682148352.000000000)
W
wenzhouwww@live.cn 已提交
533

C
cpwu 已提交
534 535
        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 ")
536

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

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

C
cpwu 已提交
542 543 544 545 546 547
        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")
548

W
wenzhouwww@live.cn 已提交
549
        # bug need fix
550

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

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

        tdSql.query(f"select abs(c1) from (select ts , c1 ,t1 from {dbname}.stb1)")
W
wenzhouwww@live.cn 已提交
573
        tdSql.checkRows(25)
W
wenzhouwww@live.cn 已提交
574

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

578
    def support_super_table_test(self):
C
cpwu 已提交
579 580 581 582 583 584 585 586 587 588 589
        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" )
590 591 592
        pass


593
    def run(self):  # sourcery skip: extract-duplicate-method, remove-redundant-fstring
594
        tdSql.prepare(replica=f"{self.replicaVar}")
595 596

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

598
        self.prepare_datas()
599
        self.prepare_tag_datas()
600

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

603
        self.test_errors()
W
wenzhouwww@live.cn 已提交
604 605

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

607 608
        self.support_types()

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

611
        self.basic_abs_function()
612

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

615
        self.check_boundary_values()
616

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

        self.abs_func_filter()

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

623 624
        self.test_tag_compute_for_scalar_function()

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

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

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

        self.support_super_table_test()

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

W
wenzhouwww@live.cn 已提交
637

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