avg.py 19.5 KB
Newer Older
1 2 3 4 5 6 7 8 9 10
import taos
import sys
import datetime
import inspect

from util.log import *
from util.sql import *
from util.cases import *

class TDTestCase:
C
cpwu 已提交
11 12 13
    # 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}
14 15
    def init(self, conn, logSql):
        tdLog.debug(f"start to excute {__file__}")
C
cpwu 已提交
16
        tdSql.init(conn.cursor(), False)
G
Ganlin Zhao 已提交
17

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

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

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

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

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

68 69 70 71 72 73 74 75
    def check_avg(self ,origin_query , check_query):
        avg_result = tdSql.getResult(origin_query)
        origin_result = tdSql.getResult(check_query)

        check_status = True
        for row_index , row in enumerate(avg_result):
            for col_index , elem in enumerate(row):
                if avg_result[row_index][col_index] != origin_result[row_index][col_index]:
G
Ganlin Zhao 已提交
76
                    check_status = False
77 78 79 80 81
        if not check_status:
            tdLog.notice("avg function value has not as expected , sql is \"%s\" "%origin_query )
            sys.exit(1)
        else:
            tdLog.info("avg value check pass , it work as expected ,sql is \"%s\"   "%check_query )
G
Ganlin Zhao 已提交
82

C
cpwu 已提交
83
    def test_errors(self, dbname="db"):
84
        error_sql_lists = [
C
cpwu 已提交
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
            f"select avg from {dbname}.t1",
            # f"select avg(-+--+c1) from {dbname}.t1",
            # f"select +-avg(c1) from {dbname}.t1",
            # f"select ++-avg(c1) from {dbname}.t1",
            # f"select ++--avg(c1) from {dbname}.t1",
            # f"select - -avg(c1)*0 from {dbname}.t1",
            # f"select avg(tbname+1) from {dbname}.t1 ",
            f"select avg(123--123)==1 from {dbname}.t1",
            f"select avg(c1) as 'd1' from {dbname}.t1",
            f"select avg(c1 ,c2 ) from {dbname}.t1",
            f"select avg(c1 ,NULL) from {dbname}.t1",
            f"select avg(,) from {dbname}.t1;",
            f"select avg(avg(c1) ab from {dbname}.t1)",
            f"select avg(c1) as int from {dbname}.t1",
            f"select avg from {dbname}.stb1",
            # f"select avg(-+--+c1) from {dbname}.stb1",
            # f"select +-avg(c1) from {dbname}.stb1",
            # f"select ++-avg(c1) from {dbname}.stb1",
            # f"select ++--avg(c1) from {dbname}.stb1",
            # f"select - -avg(c1)*0 from {dbname}.stb1",
            # f"select avg(tbname+1) from {dbname}.stb1 ",
            f"select avg(123--123)==1 from {dbname}.stb1",
            f"select avg(c1) as 'd1' from {dbname}.stb1",
            f"select avg(c1 ,c2 ) from {dbname}.stb1",
            f"select avg(c1 ,NULL) from {dbname}.stb1",
            f"select avg(,) from {dbname}.stb1;",
            f"select avg(avg(c1) ab from {dbname}.stb1)",
            f"select avg(c1) as int from {dbname}.stb1"
113 114 115
        ]
        for error_sql in error_sql_lists:
            tdSql.error(error_sql)
G
Ganlin Zhao 已提交
116

C
cpwu 已提交
117
    def support_types(self, dbname="db"):
118
        type_error_sql_lists = [
C
cpwu 已提交
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
            f"select avg(ts) from {dbname}.t1" ,
            f"select avg(c7) from {dbname}.t1",
            f"select avg(c8) from {dbname}.t1",
            f"select avg(c9) from {dbname}.t1",
            f"select avg(ts) from {dbname}.ct1" ,
            f"select avg(c7) from {dbname}.ct1",
            f"select avg(c8) from {dbname}.ct1",
            f"select avg(c9) from {dbname}.ct1",
            f"select avg(ts) from {dbname}.ct3" ,
            f"select avg(c7) from {dbname}.ct3",
            f"select avg(c8) from {dbname}.ct3",
            f"select avg(c9) from {dbname}.ct3",
            f"select avg(ts) from {dbname}.ct4" ,
            f"select avg(c7) from {dbname}.ct4",
            f"select avg(c8) from {dbname}.ct4",
            f"select avg(c9) from {dbname}.ct4",
            f"select avg(ts) from {dbname}.stb1" ,
            f"select avg(c7) from {dbname}.stb1",
            f"select avg(c8) from {dbname}.stb1",
            f"select avg(c9) from {dbname}.stb1" ,

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

            f"select avg(ts) from {dbname}.tbname",
            f"select avg(c9) from {dbname}.tbname"
145 146

        ]
G
Ganlin Zhao 已提交
147

148 149
        for type_sql in type_error_sql_lists:
            tdSql.error(type_sql)
G
Ganlin Zhao 已提交
150 151


152
        type_sql_lists = [
C
cpwu 已提交
153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182
            f"select avg(c1) from {dbname}.t1",
            f"select avg(c2) from {dbname}.t1",
            f"select avg(c3) from {dbname}.t1",
            f"select avg(c4) from {dbname}.t1",
            f"select avg(c5) from {dbname}.t1",
            f"select avg(c6) from {dbname}.t1",

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

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

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

            f"select avg(c6) as alisb from {dbname}.stb1",
            f"select avg(c6) alisb from {dbname}.stb1",
183 184 185 186
        ]

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

C
cpwu 已提交
188
    def basic_avg_function(self, dbname="db"):
189

G
Ganlin Zhao 已提交
190
        # basic query
C
cpwu 已提交
191
        tdSql.query(f"select c1 from {dbname}.ct3")
192
        tdSql.checkRows(0)
C
cpwu 已提交
193
        tdSql.query(f"select c1 from {dbname}.t1")
194
        tdSql.checkRows(12)
C
cpwu 已提交
195
        tdSql.query(f"select c1 from {dbname}.stb1")
196 197 198
        tdSql.checkRows(25)

        # used for empty table  , ct3 is empty
C
cpwu 已提交
199
        tdSql.query(f"select avg(c1) from {dbname}.ct3")
200
        tdSql.checkRows(0)
C
cpwu 已提交
201
        tdSql.query(f"select avg(c2) from {dbname}.ct3")
202
        tdSql.checkRows(0)
C
cpwu 已提交
203
        tdSql.query(f"select avg(c3) from {dbname}.ct3")
204
        tdSql.checkRows(0)
C
cpwu 已提交
205
        tdSql.query(f"select avg(c4) from {dbname}.ct3")
206
        tdSql.checkRows(0)
C
cpwu 已提交
207
        tdSql.query(f"select avg(c5) from {dbname}.ct3")
208
        tdSql.checkRows(0)
C
cpwu 已提交
209
        tdSql.query(f"select avg(c6) from {dbname}.ct3")
G
Ganlin Zhao 已提交
210

211
        # used for regular table
C
cpwu 已提交
212
        tdSql.query(f"select avg(c1) from {dbname}.t1")
213
        tdSql.checkData(0, 0, 5.000000000)
G
Ganlin Zhao 已提交
214 215


C
cpwu 已提交
216
        tdSql.query(f"select ts,c1, c2, c3 , c4, c5 from {dbname}.t1")
217 218 219
        tdSql.checkData(1, 5, 1.11000)
        tdSql.checkData(3, 4, 33)
        tdSql.checkData(5, 5, None)
C
cpwu 已提交
220
        self.check_avg(f" select avg(c1) , avg(c2) , avg(c3) from {dbname}.t1 " , f" select sum(c1)/count(c1) , sum(c2)/count(c2) , sum(c3)/count(c3) from {dbname}.t1 ")
G
Ganlin Zhao 已提交
221

222
        # used for sub table
C
cpwu 已提交
223
        tdSql.query(f"select avg(c1) from {dbname}.ct1")
224 225
        tdSql.checkData(0, 0, 4.846153846)

C
cpwu 已提交
226
        tdSql.query(f"select avg(c1) from {dbname}.ct3")
227 228
        tdSql.checkRows(0)

C
cpwu 已提交
229 230
        self.check_avg(f" select avg(abs(c1)) , avg(abs(c2)) , avg(abs(c3)) from {dbname}.t1 " , f" select sum(abs(c1))/count(c1) , sum(abs(c2))/count(c2) , sum(abs(c3))/count(c3) from {dbname}.t1 ")
        self.check_avg(f" select avg(abs(c1)) , avg(abs(c2)) , avg(abs(c3)) from {dbname}.stb1 " , f" select sum(abs(c1))/count(c1) , sum(abs(c2))/count(c2) , sum(abs(c3))/count(c3) from {dbname}.stb1 ")
231

G
Ganlin Zhao 已提交
232 233
        # used for stable table

C
cpwu 已提交
234
        tdSql.query(f"select avg(c1) from {dbname}.stb1")
235 236
        tdSql.checkRows(1)

C
cpwu 已提交
237
        self.check_avg(f" select avg(abs(ceil(c1))) , avg(abs(ceil(c2))) , avg(abs(ceil(c3))) from {dbname}.stb1 " , f" select sum(abs(ceil(c1)))/count(c1) , sum(abs(ceil(c2)))/count(c2) , sum(abs(ceil(c3)))/count(c3) from {dbname}.stb1 ")
238 239

        # used for not exists table
C
cpwu 已提交
240 241 242
        tdSql.error(f"select avg(c1) from {dbname}.stbbb1")
        tdSql.error(f"select avg(c1) from {dbname}.tbname")
        tdSql.error(f"select avg(c1) from {dbname}.ct5")
243

G
Ganlin Zhao 已提交
244
        # mix with common col
C
cpwu 已提交
245 246
        tdSql.error(f"select c1, avg(c1) from {dbname}.ct1")
        tdSql.error(f"select c1, avg(c1) from {dbname}.ct4")
G
Ganlin Zhao 已提交
247

248 249

        # mix with common functions
C
cpwu 已提交
250 251
        tdSql.error(f"select c1, avg(c1),c5, floor(c5) from {dbname}.ct4 ")
        tdSql.error(f"select c1, avg(c1),c5, floor(c5) from {dbname}.stb1 ")
252 253

        # mix with agg functions , not support
C
cpwu 已提交
254 255 256 257
        tdSql.error(f"select c1, avg(c1),c5, count(c5) from {dbname}.stb1 ")
        tdSql.error(f"select c1, avg(c1),c5, 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 ")
258 259 260

        # agg functions mix with agg functions

C
cpwu 已提交
261
        tdSql.query(f" select max(c5), count(c5) , avg(c5) from {dbname}.stb1 ")
262 263 264 265
        tdSql.checkData(0, 0, 8.88000 )
        tdSql.checkData(0, 1, 22 )
        tdSql.checkData(0, 2, 2.270454591 )

C
cpwu 已提交
266
        tdSql.query(f" select max(c5), count(c5) , avg(c5) ,elapsed(ts) , spread(c1)  from {dbname}.ct1; ")
267 268 269 270 271
        tdSql.checkData(0, 0, 8.88000 )
        tdSql.checkData(0, 1, 13 )
        tdSql.checkData(0, 2, 0.768461603 )

        # bug fix for count
C
cpwu 已提交
272
        tdSql.query(f"select count(c1) from {dbname}.ct4 ")
273
        tdSql.checkData(0,0,9)
C
cpwu 已提交
274
        tdSql.query(f"select count(*) from {dbname}.ct4 ")
275
        tdSql.checkData(0,0,12)
C
cpwu 已提交
276
        tdSql.query(f"select count(c1) from {dbname}.stb1 ")
277
        tdSql.checkData(0,0,22)
C
cpwu 已提交
278
        tdSql.query(f"select count(*) from {dbname}.stb1 ")
279 280
        tdSql.checkData(0,0,25)

G
Ganlin Zhao 已提交
281
        # bug fix for compute
C
cpwu 已提交
282 283
        tdSql.error(f"select c1, avg(c1) -0 ,ceil(c1)-0 from {dbname}.ct4 ")
        tdSql.error(f" select c1, avg(c1) -0 ,avg(ceil(c1-0.1))-0.1 from {dbname}.ct4")
284

G
Ganlin Zhao 已提交
285
        # mix with nest query
C
cpwu 已提交
286 287
        self.check_avg(f"select avg(col) from (select abs(c1) col from {dbname}.stb1)" , f"select avg(abs(c1)) from {dbname}.stb1")
        self.check_avg(f"select avg(col) from (select ceil(abs(c1)) col from {dbname}.stb1)" , f"select avg(abs(c1)) from {dbname}.stb1")
288

C
cpwu 已提交
289
        tdSql.query(f" select abs(avg(abs(abs(c1)))) from {dbname}.stb1 ")
290
        tdSql.checkData(0, 0, 4.500000000)
C
cpwu 已提交
291
        tdSql.query(f" select abs(avg(abs(abs(c1)))) from {dbname}.t1 ")
292 293
        tdSql.checkData(0, 0, 5.000000000)

C
cpwu 已提交
294
        tdSql.query(f" select abs(avg(abs(abs(c1)))) from {dbname}.stb1 ")
295 296
        tdSql.checkData(0, 0, 4.500000000)

C
cpwu 已提交
297
        tdSql.query(f" select avg(c1) from {dbname}.stb1 where c1 is null ")
298
        tdSql.checkRows(1)
299

G
Ganlin Zhao 已提交
300

C
cpwu 已提交
301 302 303
    def avg_func_filter(self, dbname="db"):
        tdSql.execute(f"use {dbname}")
        tdSql.query(f" select avg(c1), avg(c1) -0 ,avg(ceil(c1-0.1))-0 ,avg(floor(c1+0.1))-0.1 ,avg(ceil(log(c1,2)-0.5)) from {dbname}.ct4 where c1>5 ")
304 305 306 307 308 309 310
        tdSql.checkRows(1)
        tdSql.checkData(0,0,7.000000000)
        tdSql.checkData(0,1,7.000000000)
        tdSql.checkData(0,2,7.000000000)
        tdSql.checkData(0,3,6.900000000)
        tdSql.checkData(0,4,3.000000000)

C
cpwu 已提交
311
        tdSql.query(f"select avg(c1), avg(c1) -0 ,avg(ceil(c1-0.1))-0 ,avg(floor(c1+0.1))-0.1 ,avg(ceil(log(c1,2)-0.5)) from {dbname}.ct4 where c1=5 ")
312 313 314 315 316 317 318
        tdSql.checkRows(1)
        tdSql.checkData(0,0,5.000000000)
        tdSql.checkData(0,1,5.000000000)
        tdSql.checkData(0,2,5.000000000)
        tdSql.checkData(0,3,4.900000000)
        tdSql.checkData(0,4,2.000000000)

C
cpwu 已提交
319
        tdSql.query(f"select avg(c1) ,avg(c2) , avg(c1) -0 , avg(ceil(c1-0.1))-0 ,avg(floor(c1+0.1))-0.1 ,avg(ceil(log(c1,2))-0.5) from {dbname}.ct4 where c1>log(c1,2) limit 1 ")
320 321 322 323 324
        tdSql.checkRows(1)
        tdSql.checkData(0, 0, 4.500000000)
        tdSql.checkData(0, 1, 49999.500000000)
        tdSql.checkData(0, 5, 1.625000000)

C
cpwu 已提交
325
    def check_boundary_values(self, dbname="bound_test"):
326

C
cpwu 已提交
327 328
        tdSql.execute(f"drop database if exists {dbname}")
        tdSql.execute(f"create database if not exists {dbname}")
329
        time.sleep(3)
C
cpwu 已提交
330
        tdSql.execute(f"use {dbname}")
331
        tdSql.execute(
C
cpwu 已提交
332
            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);"
333
        )
C
cpwu 已提交
334
        tdSql.execute(f'create table {dbname}.sub1_bound using {dbname}.stb_bound tags ( 1 )')
335
        tdSql.execute(
C
cpwu 已提交
336
                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() )"
337 338
            )
        tdSql.execute(
C
cpwu 已提交
339
                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() )"
340 341
            )
        tdSql.execute(
C
cpwu 已提交
342
                f"insert into {dbname}.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
343
            )
G
Ganlin Zhao 已提交
344

345
        tdSql.execute(
C
cpwu 已提交
346
                f"insert into {dbname}.sub1_bound values ( now(), 2147483645, 9223372036854775805, 32765, 125, 3.40E+37, 1.7e+307, True, 'binary_tb1', 'nchar_tb1', now() )"
347
            )
G
Ganlin Zhao 已提交
348

349
        tdSql.execute(
C
cpwu 已提交
350
                f"insert into {dbname}.sub1_bound values ( now(), 2147483644, 9223372036854775804, 32764, 124, 3.40E+37, 1.7e+307, True, 'binary_tb1', 'nchar_tb1', now() )"
351 352 353
            )

        tdSql.execute(
C
cpwu 已提交
354
                f"insert into {dbname}.sub1_bound values ( now(), -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
355 356
            )
        tdSql.execute(
C
cpwu 已提交
357
                f"insert into {dbname}.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
358
            )
G
Ganlin Zhao 已提交
359

360 361

        tdSql.error(
C
cpwu 已提交
362
                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() )"
363
            )
C
cpwu 已提交
364
        self.check_avg(f"select avg(c1), avg(c2), avg(c3) , avg(c4), avg(c5) ,avg(c6) from {dbname}.sub1_bound " , f" select sum(c1)/count(c1), sum(c2)/count(c2) ,sum(c3)/count(c3), sum(c4)/count(c4), sum(c5)/count(c5) ,sum(c6)/count(c6) from {dbname}.sub1_bound ")
365

G
Ganlin Zhao 已提交
366

367
        # check basic elem for table per row
C
cpwu 已提交
368
        tdSql.query(f"select avg(c1) ,avg(c2) , avg(c3) , avg(c4), avg(c5), avg(c6) from {dbname}.sub1_bound ")
369 370 371 372 373 374 375
        tdSql.checkRows(1)
        tdSql.checkData(0,0,920350133.571428537)
        tdSql.checkData(0,1,1.3176245766935393e+18)
        tdSql.checkData(0,2,14042.142857143)
        tdSql.checkData(0,3,53.571428571)
        tdSql.checkData(0,4,5.828571332045761e+37)
        # tdSql.checkData(0,5,None)
G
Ganlin Zhao 已提交
376 377


378
        # check  + - * / in functions
C
cpwu 已提交
379
        tdSql.query(f" select avg(c1+1) ,avg(c2) , avg(c3*1) , avg(c4/2), avg(c5)/2, avg(c6) from {dbname}.sub1_bound ")
380 381 382 383 384 385
        tdSql.checkData(0,0,920350134.5714285)
        tdSql.checkData(0,1,1.3176245766935393e+18)
        tdSql.checkData(0,2,14042.142857143)
        tdSql.checkData(0,3,26.785714286)
        tdSql.checkData(0,4,2.9142856660228804e+37)
        # tdSql.checkData(0,5,None)
G
Ganlin Zhao 已提交
386 387


388 389 390 391 392

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

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

394 395
        self.prepare_datas()

G
Ganlin Zhao 已提交
396
        tdLog.printNoPrefix("==========step2:test errors ==============")
397 398

        self.test_errors()
G
Ganlin Zhao 已提交
399 400

        tdLog.printNoPrefix("==========step3:support types ============")
401 402 403

        self.support_types()

G
Ganlin Zhao 已提交
404
        tdLog.printNoPrefix("==========step4: avg basic query ============")
405 406 407

        self.basic_avg_function()

G
Ganlin Zhao 已提交
408
        tdLog.printNoPrefix("==========step5: avg boundary query ============")
409 410 411

        self.check_boundary_values()

G
Ganlin Zhao 已提交
412
        tdLog.printNoPrefix("==========step6: avg filter query ============")
413 414 415 416 417 418 419 420 421

        self.avg_func_filter()

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

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