abs.py 31.1 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
                    elem = elem
                else:
                    elem = -elem
                row_check.append(elem)
            auto_result.append(row_check)

207 208

        tdSql.query(abs_query)
W
wenzhouwww@live.cn 已提交
209 210
        for row_index, row in enumerate(abs_result):
            for col_index, elem in enumerate(row):
211 212
                tdSql.checkData(row_index,col_index,auto_result[row_index][col_index])

W
wenzhouwww@live.cn 已提交
213

214
    def test_errors(self):
C
cpwu 已提交
215 216
        dbname = "testdb"
        tdSql.execute(f"use {dbname}")
217
        error_sql_lists = [
C
cpwu 已提交
218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245
            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"
246 247 248
        ]
        for error_sql in error_sql_lists:
            tdSql.error(error_sql)
W
wenzhouwww@live.cn 已提交
249

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

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

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

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

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

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

C
cpwu 已提交
305 306
        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 已提交
307

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

C
cpwu 已提交
315 316 317
        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 已提交
318
        self.check_result_auto(
C
cpwu 已提交
319
            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 已提交
320 321

        # used for stable table
322

C
cpwu 已提交
323
        tdSql.query(f"select abs(c1) from {dbname}.stb1")
324
        tdSql.checkRows(25)
C
cpwu 已提交
325 326
        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 已提交
327
        self.check_result_auto(
C
cpwu 已提交
328
            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")
329 330

        # used for not exists table
C
cpwu 已提交
331 332 333
        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")
334

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

        # mix with common functions
C
cpwu 已提交
355
        tdSql.query(f"select c1, abs(c1),c5, floor(c5) from {dbname}.ct4 ")
W
wenzhouwww@live.cn 已提交
356 357 358 359 360 361 362 363 364
        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)
365

C
cpwu 已提交
366
        tdSql.query(f"select c1, abs(c1),c5, floor(c5) from {dbname}.stb1 ")
367 368

        # mix with agg functions , not support
C
cpwu 已提交
369 370 371 372 373 374
        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 ")
375 376 377

        # agg functions mix with agg functions

C
cpwu 已提交
378 379
        tdSql.query(f"select max(c5), count(c5) from {dbname}.stb1")
        tdSql.query(f"select max(c5), count(c5) from {dbname}.ct1")
380 381

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

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

W
wenzhouwww@live.cn 已提交
419
        tdSql.query(
C
cpwu 已提交
420
            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 已提交
421
        tdSql.checkRows(1)
W
wenzhouwww@live.cn 已提交
422 423 424 425 426 427 428
        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 已提交
429
            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 已提交
430
        tdSql.checkRows(1)
W
wenzhouwww@live.cn 已提交
431 432 433 434 435 436 437
        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 已提交
438
            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 已提交
439
        tdSql.checkRows(1)
W
wenzhouwww@live.cn 已提交
440 441 442 443 444 445
        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 已提交
446

447 448
    def abs_Arithmetic(self):
        pass
W
wenzhouwww@live.cn 已提交
449

450 451
    def check_boundary_values(self):

C
cpwu 已提交
452 453 454
        dbname = "bound_test"

        tdSql.execute(f"drop database if exists {dbname}")
455
        tdSql.execute(f"create database if not exists {dbname}  replica {self.replicaVar}  ")
456
        time.sleep(3)
C
cpwu 已提交
457
        tdSql.execute(f"use {dbname}")
458
        tdSql.execute(
C
cpwu 已提交
459
            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);"
460
        )
C
cpwu 已提交
461
        tdSql.execute(f'create table {dbname}.sub1_bound using {dbname}.stb_bound tags ( 1 )')
462
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
463
            f"insert into {dbname}.sub1_bound values ( now()-10s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
W
wenzhouwww@live.cn 已提交
464
        )
465
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
466
            f"insert into {dbname}.sub1_bound values ( now()-5s, -2147483647, -9223372036854775807, -32767, -127, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
W
wenzhouwww@live.cn 已提交
467
        )
468
        tdSql.execute(
C
cpwu 已提交
469
            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 已提交
470
        )
471
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
472
            f"insert into {dbname}.sub1_bound values ( now()+5s, -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
W
wenzhouwww@live.cn 已提交
473
        )
474
        tdSql.error(
W
update  
wenzhouwww@live.cn 已提交
475
            f"insert into {dbname}.sub1_bound values ( now()+10s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
W
wenzhouwww@live.cn 已提交
476
        )
C
cpwu 已提交
477 478 479 480
        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 已提交
481
        self.check_result_auto(
C
cpwu 已提交
482
            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 已提交
483

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

        # check  + - * / in functions
W
wenzhouwww@live.cn 已提交
513
        tdSql.query(
C
cpwu 已提交
514
            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 已提交
515 516 517 518
        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 已提交
519
        tdSql.checkData(0, 4, 169999997607218212453866206899682148352.000000000)
W
wenzhouwww@live.cn 已提交
520 521 522 523 524 525
        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 已提交
526
        tdSql.checkData(1, 4, 169999997607218212453866206899682148352.000000000)
W
wenzhouwww@live.cn 已提交
527

C
cpwu 已提交
528 529
        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 ")
530

531
    def test_tag_compute_for_scalar_function(self):
C
cpwu 已提交
532
        dbname = "testdb"
W
wenzhouwww@live.cn 已提交
533

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

C
cpwu 已提交
536 537 538 539 540 541
        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")
542

W
wenzhouwww@live.cn 已提交
543
        # bug need fix
544

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

        # tag filter with abs function
C
cpwu 已提交
560
        tdSql.query(f"select t1 from {dbname}.stb1 where abs(t1)=1")
561
        tdSql.checkRows(0)
C
cpwu 已提交
562
        tdSql.query(f"select t1 from {dbname}.stb1 where abs(c1+t1)=1")
W
wenzhouwww@live.cn 已提交
563
        tdSql.checkRows(1)
W
wenzhouwww@live.cn 已提交
564
        tdSql.checkData(0,0,0)
C
cpwu 已提交
565 566

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

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

572
    def support_super_table_test(self):
C
cpwu 已提交
573 574 575 576 577 578 579 580 581 582 583
        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" )
584 585 586
        pass


587
    def run(self):  # sourcery skip: extract-duplicate-method, remove-redundant-fstring
588
        tdSql.prepare(replica=f"{self.replicaVar}")
589 590

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

592
        self.prepare_datas()
593
        self.prepare_tag_datas()
594

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

597
        self.test_errors()
W
wenzhouwww@live.cn 已提交
598 599

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

601 602
        self.support_types()

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

605
        self.basic_abs_function()
606

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

609
        self.check_boundary_values()
610

W
wenzhouwww@live.cn 已提交
611
        tdLog.printNoPrefix("==========step6: abs filter query ============")
W
wenzhouwww@live.cn 已提交
612 613 614

        self.abs_func_filter()

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

617 618
        self.test_tag_compute_for_scalar_function()

W
wenzhouwww@live.cn 已提交
619 620 621 622
        tdLog.printNoPrefix("==========step7: check result of query ============")

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

623 624 625 626
        tdLog.printNoPrefix("==========step8: check abs result of  stable query ============")

        self.support_super_table_test()

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

W
wenzhouwww@live.cn 已提交
631

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