avg.py 21.4 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 117 118 119 120
    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 已提交
121
                    check_status = False
122 123 124 125 126
        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 已提交
127

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

C
cpwu 已提交
162
    def support_types(self, dbname="db"):
163
        type_error_sql_lists = [
C
cpwu 已提交
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
            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"
190 191

        ]
G
Ganlin Zhao 已提交
192

193 194
        for type_sql in type_error_sql_lists:
            tdSql.error(type_sql)
G
Ganlin Zhao 已提交
195 196


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

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

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

G
Ganlin Zhao 已提交
235
        # basic query
C
cpwu 已提交
236
        tdSql.query(f"select c1 from {dbname}.ct3")
237
        tdSql.checkRows(0)
C
cpwu 已提交
238
        tdSql.query(f"select c1 from {dbname}.t1")
239
        tdSql.checkRows(12)
C
cpwu 已提交
240
        tdSql.query(f"select c1 from {dbname}.stb1")
241 242 243
        tdSql.checkRows(25)

        # used for empty table  , ct3 is empty
C
cpwu 已提交
244
        tdSql.query(f"select avg(c1) from {dbname}.ct3")
245
        tdSql.checkRows(0)
C
cpwu 已提交
246
        tdSql.query(f"select avg(c2) from {dbname}.ct3")
247
        tdSql.checkRows(0)
C
cpwu 已提交
248
        tdSql.query(f"select avg(c3) from {dbname}.ct3")
249
        tdSql.checkRows(0)
C
cpwu 已提交
250
        tdSql.query(f"select avg(c4) from {dbname}.ct3")
251
        tdSql.checkRows(0)
C
cpwu 已提交
252
        tdSql.query(f"select avg(c5) from {dbname}.ct3")
253
        tdSql.checkRows(0)
C
cpwu 已提交
254
        tdSql.query(f"select avg(c6) from {dbname}.ct3")
G
Ganlin Zhao 已提交
255

256
        # used for regular table
C
cpwu 已提交
257
        tdSql.query(f"select avg(c1) from {dbname}.t1")
258
        tdSql.checkData(0, 0, 5.000000000)
G
Ganlin Zhao 已提交
259 260


C
cpwu 已提交
261
        tdSql.query(f"select ts,c1, c2, c3 , c4, c5 from {dbname}.t1")
262 263 264
        tdSql.checkData(1, 5, 1.11000)
        tdSql.checkData(3, 4, 33)
        tdSql.checkData(5, 5, None)
C
cpwu 已提交
265
        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 已提交
266

267
        # used for sub table
C
cpwu 已提交
268
        tdSql.query(f"select avg(c1) from {dbname}.ct1")
269 270
        tdSql.checkData(0, 0, 4.846153846)

C
cpwu 已提交
271
        tdSql.query(f"select avg(c1) from {dbname}.ct3")
272 273
        tdSql.checkRows(0)

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

G
Ganlin Zhao 已提交
277 278
        # used for stable table

C
cpwu 已提交
279
        tdSql.query(f"select avg(c1) from {dbname}.stb1")
280 281
        tdSql.checkRows(1)

C
cpwu 已提交
282
        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 ")
283 284

        # used for not exists table
C
cpwu 已提交
285 286 287
        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")
288

G
Ganlin Zhao 已提交
289
        # mix with common col
C
cpwu 已提交
290 291
        tdSql.error(f"select c1, avg(c1) from {dbname}.ct1")
        tdSql.error(f"select c1, avg(c1) from {dbname}.ct4")
G
Ganlin Zhao 已提交
292

293 294

        # mix with common functions
C
cpwu 已提交
295 296
        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 ")
297 298

        # mix with agg functions , not support
C
cpwu 已提交
299 300 301 302
        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 ")
303 304 305

        # agg functions mix with agg functions

C
cpwu 已提交
306
        tdSql.query(f" select max(c5), count(c5) , avg(c5) from {dbname}.stb1 ")
307 308 309 310
        tdSql.checkData(0, 0, 8.88000 )
        tdSql.checkData(0, 1, 22 )
        tdSql.checkData(0, 2, 2.270454591 )

C
cpwu 已提交
311
        tdSql.query(f" select max(c5), count(c5) , avg(c5) ,elapsed(ts) , spread(c1)  from {dbname}.ct1; ")
312 313 314 315 316
        tdSql.checkData(0, 0, 8.88000 )
        tdSql.checkData(0, 1, 13 )
        tdSql.checkData(0, 2, 0.768461603 )

        # bug fix for count
C
cpwu 已提交
317
        tdSql.query(f"select count(c1) from {dbname}.ct4 ")
318
        tdSql.checkData(0,0,9)
C
cpwu 已提交
319
        tdSql.query(f"select count(*) from {dbname}.ct4 ")
320
        tdSql.checkData(0,0,12)
C
cpwu 已提交
321
        tdSql.query(f"select count(c1) from {dbname}.stb1 ")
322
        tdSql.checkData(0,0,22)
C
cpwu 已提交
323
        tdSql.query(f"select count(*) from {dbname}.stb1 ")
324 325
        tdSql.checkData(0,0,25)

G
Ganlin Zhao 已提交
326
        # bug fix for compute
C
cpwu 已提交
327 328
        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")
329

G
Ganlin Zhao 已提交
330
        # mix with nest query
C
cpwu 已提交
331 332
        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")
333

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

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

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

G
Ganlin Zhao 已提交
345

C
cpwu 已提交
346 347 348
    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 ")
349 350 351 352 353 354 355
        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 已提交
356
        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 ")
357 358 359 360 361 362 363
        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 已提交
364
        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 ")
365 366 367 368 369
        tdSql.checkRows(1)
        tdSql.checkData(0, 0, 4.500000000)
        tdSql.checkData(0, 1, 49999.500000000)
        tdSql.checkData(0, 5, 1.625000000)

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

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

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

394
        tdSql.execute(
C
cpwu 已提交
395
                f"insert into {dbname}.sub1_bound values ( now(), 2147483644, 9223372036854775804, 32764, 124, 3.40E+37, 1.7e+307, True, 'binary_tb1', 'nchar_tb1', now() )"
396 397 398
            )

        tdSql.execute(
C
cpwu 已提交
399
                f"insert into {dbname}.sub1_bound values ( now(), -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
400 401
            )
        tdSql.execute(
C
cpwu 已提交
402
                f"insert into {dbname}.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
403
            )
G
Ganlin Zhao 已提交
404

405 406

        tdSql.error(
C
cpwu 已提交
407
                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() )"
408
            )
G
Ganlin Zhao 已提交
409
        #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 ")
410

G
Ganlin Zhao 已提交
411

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


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


433 434 435 436 437

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

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

439 440
        self.prepare_datas()

G
Ganlin Zhao 已提交
441
        tdLog.printNoPrefix("==========step2:test errors ==============")
442 443

        self.test_errors()
G
Ganlin Zhao 已提交
444 445

        tdLog.printNoPrefix("==========step3:support types ============")
446 447 448

        self.support_types()

G
Ganlin Zhao 已提交
449
        tdLog.printNoPrefix("==========step4: avg basic query ============")
450 451 452

        self.basic_avg_function()

G
Ganlin Zhao 已提交
453
        tdLog.printNoPrefix("==========step5: avg boundary query ============")
454 455 456

        self.check_boundary_values()

G
Ganlin Zhao 已提交
457
        tdLog.printNoPrefix("==========step6: avg filter query ============")
458 459

        self.avg_func_filter()
J
jiacy-jcy 已提交
460
        self.avg_check_unsigned()
461 462 463 464 465 466 467

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

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