avg.py 21.1 KB
Newer Older
1 2
import taos
import sys
J
jiacy-jcy 已提交
3
import numpy as np
4 5 6
from util.log import *
from util.sql import *
from util.cases import *
J
jiacy-jcy 已提交
7 8
from util.sqlset import TDSetSql
from util.common import *
9
class TDTestCase:
C
cpwu 已提交
10 11 12
    # 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}
13
    def init(self, conn, logSql, replicaVar=1):
14
        self.replicaVar = int(replicaVar)
15
        tdLog.debug(f"start to excute {__file__}")
C
cpwu 已提交
16
        tdSql.init(conn.cursor(), False)
J
jiacy-jcy 已提交
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
        self.setsql = TDSetSql()
        self.column_dict = {
            'ts':'timestamp',
            'col1': 'tinyint',
            'col2': 'smallint',
            'col3': 'int',
            'col4': 'bigint',
            'col5': 'tinyint unsigned',
            'col6': 'smallint unsigned',
            'col7': 'int unsigned',
            'col8': 'bigint unsigned',
    
        }
        self.dbname = tdCom.getLongName(3,"letters")
        self.row_num = 10
        self.ts = 1537146000000
    def insert_data(self,column_dict,tbname,row_num):
        insert_sql = self.setsql.set_insertsql(column_dict,tbname)
        for i in range(row_num):
            insert_list = []
            self.setsql.insert_values(column_dict,i,insert_sql,insert_list,self.ts)

    def avg_check_unsigned(self):
        stbname = f'{self.dbname}.{tdCom.getLongName(5,"letters")}'
        tag_dict = {
            't0':'int'
        }
        tag_values = [
            f'1'
            ]
        tdSql.execute(f"create database if not exists {self.dbname}")
        tdSql.execute(self.setsql.set_create_stable_sql(stbname,self.column_dict,tag_dict))
        tdSql.execute(f"create table {stbname}_1 using {stbname} tags({tag_values[0]})")
        self.insert_data(self.column_dict,f'{stbname}_1',self.row_num)
        for col in self.column_dict.keys():
            col_val_list = []
            if col.lower() != 'ts':
                tdSql.query(f'select {col} from {stbname}_1')
                sum_val = 0
                for col_val in tdSql.queryResult:
                    col_val_list.append(col_val[0])
                col_avg = np.mean(col_val_list)
                tdSql.query(f'select avg({col}) from {stbname}_1')
                tdSql.checkEqual(col_avg,tdSql.queryResult[0][0])
        tdSql.execute(f'drop database {self.dbname}')
G
Ganlin Zhao 已提交
62

C
cpwu 已提交
63
    def prepare_datas(self, dbname="db"):
64
        tdSql.execute(
C
cpwu 已提交
65
            f'''create table {dbname}.stb1
66 67 68 69
            (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 已提交
70

71
        tdSql.execute(
C
cpwu 已提交
72 73
            f'''
            create table {dbname}.t1
74 75 76 77
            (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 已提交
78
            tdSql.execute(f'create table {dbname}.ct{i+1} using {dbname}.stb1 tags ( {i+1} )')
79 80 81

        for i in range(9):
            tdSql.execute(
C
cpwu 已提交
82
                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 )"
83 84
            )
            tdSql.execute(
C
cpwu 已提交
85
                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 )"
86
            )
C
cpwu 已提交
87 88 89 90
        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 )")
91

C
cpwu 已提交
92 93 94
        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  ) ")
95 96

        tdSql.execute(
C
cpwu 已提交
97
            f'''insert into {dbname}.t1 values
98 99 100 101 102 103 104 105 106 107 108 109 110 111
            ( '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 已提交
112

113 114 115 116
    def check_avg(self ,origin_query , check_query):
        avg_result = tdSql.getResult(origin_query)
        origin_result = tdSql.getResult(check_query)

W
update  
wenzhouwww@live.cn 已提交
117
        tdSql.query(origin_query)
118 119
        for row_index , row in enumerate(avg_result):
            for col_index , elem in enumerate(row):
W
update  
wenzhouwww@live.cn 已提交
120
                tdSql.checkData(row_index,col_index,origin_result[row_index][col_index])
G
Ganlin Zhao 已提交
121

C
cpwu 已提交
122
    def test_errors(self, dbname="db"):
123
        error_sql_lists = [
C
cpwu 已提交
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
            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"
152 153 154
        ]
        for error_sql in error_sql_lists:
            tdSql.error(error_sql)
G
Ganlin Zhao 已提交
155

C
cpwu 已提交
156
    def support_types(self, dbname="db"):
157
        type_error_sql_lists = [
C
cpwu 已提交
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 183
            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"
184 185

        ]
G
Ganlin Zhao 已提交
186

187 188
        for type_sql in type_error_sql_lists:
            tdSql.error(type_sql)
G
Ganlin Zhao 已提交
189 190


191
        type_sql_lists = [
C
cpwu 已提交
192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221
            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",
222 223 224 225
        ]

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

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

G
Ganlin Zhao 已提交
229
        # basic query
C
cpwu 已提交
230
        tdSql.query(f"select c1 from {dbname}.ct3")
231
        tdSql.checkRows(0)
C
cpwu 已提交
232
        tdSql.query(f"select c1 from {dbname}.t1")
233
        tdSql.checkRows(12)
C
cpwu 已提交
234
        tdSql.query(f"select c1 from {dbname}.stb1")
235 236 237
        tdSql.checkRows(25)

        # used for empty table  , ct3 is empty
C
cpwu 已提交
238
        tdSql.query(f"select avg(c1) from {dbname}.ct3")
239
        tdSql.checkRows(0)
C
cpwu 已提交
240
        tdSql.query(f"select avg(c2) from {dbname}.ct3")
241
        tdSql.checkRows(0)
C
cpwu 已提交
242
        tdSql.query(f"select avg(c3) from {dbname}.ct3")
243
        tdSql.checkRows(0)
C
cpwu 已提交
244
        tdSql.query(f"select avg(c4) from {dbname}.ct3")
245
        tdSql.checkRows(0)
C
cpwu 已提交
246
        tdSql.query(f"select avg(c5) from {dbname}.ct3")
247
        tdSql.checkRows(0)
C
cpwu 已提交
248
        tdSql.query(f"select avg(c6) from {dbname}.ct3")
G
Ganlin Zhao 已提交
249

250
        # used for regular table
C
cpwu 已提交
251
        tdSql.query(f"select avg(c1) from {dbname}.t1")
252
        tdSql.checkData(0, 0, 5.000000000)
G
Ganlin Zhao 已提交
253 254


C
cpwu 已提交
255
        tdSql.query(f"select ts,c1, c2, c3 , c4, c5 from {dbname}.t1")
256 257 258
        tdSql.checkData(1, 5, 1.11000)
        tdSql.checkData(3, 4, 33)
        tdSql.checkData(5, 5, None)
C
cpwu 已提交
259
        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 已提交
260

261
        # used for sub table
C
cpwu 已提交
262
        tdSql.query(f"select avg(c1) from {dbname}.ct1")
263 264
        tdSql.checkData(0, 0, 4.846153846)

C
cpwu 已提交
265
        tdSql.query(f"select avg(c1) from {dbname}.ct3")
266 267
        tdSql.checkRows(0)

C
cpwu 已提交
268 269
        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 ")
270

G
Ganlin Zhao 已提交
271 272
        # used for stable table

C
cpwu 已提交
273
        tdSql.query(f"select avg(c1) from {dbname}.stb1")
274 275
        tdSql.checkRows(1)

C
cpwu 已提交
276
        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 ")
277 278

        # used for not exists table
C
cpwu 已提交
279 280 281
        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")
282

G
Ganlin Zhao 已提交
283
        # mix with common col
C
cpwu 已提交
284 285
        tdSql.error(f"select c1, avg(c1) from {dbname}.ct1")
        tdSql.error(f"select c1, avg(c1) from {dbname}.ct4")
G
Ganlin Zhao 已提交
286

287 288

        # mix with common functions
C
cpwu 已提交
289 290
        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 ")
291 292

        # mix with agg functions , not support
C
cpwu 已提交
293 294 295 296
        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 ")
297 298 299

        # agg functions mix with agg functions

C
cpwu 已提交
300
        tdSql.query(f" select max(c5), count(c5) , avg(c5) from {dbname}.stb1 ")
301 302 303 304
        tdSql.checkData(0, 0, 8.88000 )
        tdSql.checkData(0, 1, 22 )
        tdSql.checkData(0, 2, 2.270454591 )

C
cpwu 已提交
305
        tdSql.query(f" select max(c5), count(c5) , avg(c5) ,elapsed(ts) , spread(c1)  from {dbname}.ct1; ")
306 307 308 309 310
        tdSql.checkData(0, 0, 8.88000 )
        tdSql.checkData(0, 1, 13 )
        tdSql.checkData(0, 2, 0.768461603 )

        # bug fix for count
C
cpwu 已提交
311
        tdSql.query(f"select count(c1) from {dbname}.ct4 ")
312
        tdSql.checkData(0,0,9)
C
cpwu 已提交
313
        tdSql.query(f"select count(*) from {dbname}.ct4 ")
314
        tdSql.checkData(0,0,12)
C
cpwu 已提交
315
        tdSql.query(f"select count(c1) from {dbname}.stb1 ")
316
        tdSql.checkData(0,0,22)
C
cpwu 已提交
317
        tdSql.query(f"select count(*) from {dbname}.stb1 ")
318 319
        tdSql.checkData(0,0,25)

G
Ganlin Zhao 已提交
320
        # bug fix for compute
C
cpwu 已提交
321 322
        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")
323

G
Ganlin Zhao 已提交
324
        # mix with nest query
C
cpwu 已提交
325 326
        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")
327

C
cpwu 已提交
328
        tdSql.query(f" select abs(avg(abs(abs(c1)))) from {dbname}.stb1 ")
329
        tdSql.checkData(0, 0, 4.500000000)
C
cpwu 已提交
330
        tdSql.query(f" select abs(avg(abs(abs(c1)))) from {dbname}.t1 ")
331 332
        tdSql.checkData(0, 0, 5.000000000)

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

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

G
Ganlin Zhao 已提交
339

C
cpwu 已提交
340 341 342
    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 ")
343 344 345 346 347 348 349
        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 已提交
350
        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 ")
351 352 353 354 355 356 357
        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 已提交
358
        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 ")
359 360 361 362 363
        tdSql.checkRows(1)
        tdSql.checkData(0, 0, 4.500000000)
        tdSql.checkData(0, 1, 49999.500000000)
        tdSql.checkData(0, 5, 1.625000000)

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

C
cpwu 已提交
366 367
        tdSql.execute(f"drop database if exists {dbname}")
        tdSql.execute(f"create database if not exists {dbname}")
368
        time.sleep(3)
C
cpwu 已提交
369
        tdSql.execute(f"use {dbname}")
370
        tdSql.execute(
C
cpwu 已提交
371
            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);"
372
        )
C
cpwu 已提交
373
        tdSql.execute(f'create table {dbname}.sub1_bound using {dbname}.stb_bound tags ( 1 )')
374
        tdSql.execute(
C
cpwu 已提交
375
                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() )"
376 377
            )
        tdSql.execute(
C
cpwu 已提交
378
                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() )"
379 380
            )
        tdSql.execute(
C
cpwu 已提交
381
                f"insert into {dbname}.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
382
            )
G
Ganlin Zhao 已提交
383

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

388
        tdSql.execute(
C
cpwu 已提交
389
                f"insert into {dbname}.sub1_bound values ( now(), 2147483644, 9223372036854775804, 32764, 124, 3.40E+37, 1.7e+307, True, 'binary_tb1', 'nchar_tb1', now() )"
390 391 392
            )

        tdSql.execute(
C
cpwu 已提交
393
                f"insert into {dbname}.sub1_bound values ( now(), -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
394 395
            )
        tdSql.execute(
C
cpwu 已提交
396
                f"insert into {dbname}.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
397
            )
G
Ganlin Zhao 已提交
398

399 400

        tdSql.error(
C
cpwu 已提交
401
                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() )"
402
            )
G
Ganlin Zhao 已提交
403
        #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 ")
404

G
Ganlin Zhao 已提交
405

406
        # check basic elem for table per row
C
cpwu 已提交
407
        tdSql.query(f"select avg(c1) ,avg(c2) , avg(c3) , avg(c4), avg(c5), avg(c6) from {dbname}.sub1_bound ")
408 409 410 411 412 413
        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)
G
Ganlin Zhao 已提交
414
        tdSql.checkData(0,5,None)
G
Ganlin Zhao 已提交
415 416


417
        # check  + - * / in functions
C
cpwu 已提交
418
        tdSql.query(f" select avg(c1+1) ,avg(c2) , avg(c3*1) , avg(c4/2), avg(c5)/2, avg(c6) from {dbname}.sub1_bound ")
419 420 421 422 423
        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)
G
Ganlin Zhao 已提交
424
        tdSql.checkData(0,5,None)
G
Ganlin Zhao 已提交
425 426


427 428 429 430 431

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

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

433 434
        self.prepare_datas()

G
Ganlin Zhao 已提交
435
        tdLog.printNoPrefix("==========step2:test errors ==============")
436 437

        self.test_errors()
G
Ganlin Zhao 已提交
438 439

        tdLog.printNoPrefix("==========step3:support types ============")
440 441 442

        self.support_types()

G
Ganlin Zhao 已提交
443
        tdLog.printNoPrefix("==========step4: avg basic query ============")
444 445 446

        self.basic_avg_function()

G
Ganlin Zhao 已提交
447
        tdLog.printNoPrefix("==========step5: avg boundary query ============")
448 449 450

        self.check_boundary_values()

G
Ganlin Zhao 已提交
451
        tdLog.printNoPrefix("==========step6: avg filter query ============")
452 453

        self.avg_func_filter()
J
jiacy-jcy 已提交
454
        self.avg_check_unsigned()
455 456 457 458 459 460 461

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

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