max.py 10.8 KB
Newer Older
J
jiacy-jcy 已提交
1 2 3 4 5 6 7
from util.log import *
from util.cases import *
from util.sql import *
import numpy as np


class TDTestCase:
C
cpwu 已提交
8
    updatecfgDict = {"maxTablesPerVnode":2 ,"minTablesPerVnode":2,"tableIncStepPerVnode":2 }
9
    def init(self, conn, logSql, replicaVar=1):
10
        self.replicaVar = int(replicaVar)
J
jiacy-jcy 已提交
11 12 13 14 15
        tdLog.debug("start to execute %s" % __file__)
        tdSql.init(conn.cursor())

        self.rowNum = 10
        self.ts = 1537146000000
J
jiacy-jcy 已提交
16 17
        self.binary_str = 'taosdata'
        self.nchar_str = '涛思数据'
C
cpwu 已提交
18
    def max_check_stb_and_tb_base(self, dbname="db"):
J
jiacy-jcy 已提交
19
        tdSql.prepare()
G
Ganlin Zhao 已提交
20
        intData = []
J
jiacy-jcy 已提交
21
        floatData = []
C
cpwu 已提交
22
        tdSql.execute(f'''create table {dbname}.stb(ts timestamp, col1 tinyint, col2 smallint, col3 int, col4 bigint, col5 tinyint unsigned, col6 smallint unsigned,
J
jiacy-jcy 已提交
23
                    col7 int unsigned, col8 bigint unsigned, col9 float, col10 double, col11 bool, col12 binary(20), col13 nchar(20)) tags(loc nchar(20))''')
C
cpwu 已提交
24
        tdSql.execute(f"create table {dbname}.stb_1 using {dbname}.stb tags('beijing')")
J
jiacy-jcy 已提交
25
        for i in range(self.rowNum):
C
cpwu 已提交
26
            tdSql.execute(f"insert into {dbname}.stb_1 values(%d, %d, %d, %d, %d, %d, %d, %d, %d, %f, %f, %d, '{self.binary_str}%d', '{self.nchar_str}%d')"
J
jiacy-jcy 已提交
27
                          % (self.ts + i, i + 1, i + 1, i + 1, i + 1, i + 1, i + 1, i + 1, i + 1, i + 0.1, i + 0.1, i % 2, i + 1, i + 1))
G
Ganlin Zhao 已提交
28
            intData.append(i + 1)
J
jiacy-jcy 已提交
29
            floatData.append(i + 0.1)
G
Ganlin Zhao 已提交
30
        for i in ['col11','col12','col13']:
C
cpwu 已提交
31 32
            for j in ['stb','stb_1']:
                tdSql.error(f'select max({i} from {dbname}.{j} )')
J
jiacy-jcy 已提交
33 34

        for i in range(1,11):
C
cpwu 已提交
35 36
            for j in ['stb', 'stb_1']:
                tdSql.query(f"select max(col{i}) from {dbname}.{j}")
J
jiacy-jcy 已提交
37 38 39 40
                if i<9:
                    tdSql.checkData(0, 0, np.max(intData))
                elif i>=9:
                    tdSql.checkData(0, 0, np.max(floatData))
G
Ganlin Zhao 已提交
41

G
Ganlin Zhao 已提交
42
        tdSql.error(f"select max(now()) from {dbname}.stb_1")
G
Ganlin Zhao 已提交
43

C
cpwu 已提交
44
        tdSql.query(f"select max(col1) from {dbname}.stb_1 where col2<=5")
J
jiacy-jcy 已提交
45
        tdSql.checkData(0,0,5)
C
cpwu 已提交
46
        tdSql.query(f"select max(col1) from {dbname}.stb where col2<=5")
J
jiacy-jcy 已提交
47
        tdSql.checkData(0,0,5)
G
Ganlin Zhao 已提交
48

49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
        tdSql.query(f"select ts, max(col1) from {dbname}.stb")
        tdSql.checkRows(1)
        tdSql.checkData(0, 1, np.max(intData))

        tdSql.query(f"select ts, max(col1) from {dbname}.stb_1")
        tdSql.checkRows(1)
        tdSql.checkData(0, 1, np.max(intData))

        tdSql.query(f"select ts, min(col9) from {dbname}.stb")
        tdSql.checkRows(1)        
        tdSql.checkData(0, 1, np.min(floatData))

        tdSql.query(f"select ts, min(col9) from {dbname}.stb_1")
        tdSql.checkRows(1)        
        tdSql.checkData(0, 1, np.min(floatData))

C
cpwu 已提交
65
    def max_check_ntb_base(self, dbname="db"):
J
jiacy-jcy 已提交
66
        tdSql.prepare()
G
Ganlin Zhao 已提交
67
        intData = []
J
jiacy-jcy 已提交
68
        floatData = []
C
cpwu 已提交
69
        tdSql.execute(f'''create table {dbname}.ntb(ts timestamp, col1 tinyint, col2 smallint, col3 int, col4 bigint, col5 tinyint unsigned, col6 smallint unsigned,
J
jiacy-jcy 已提交
70 71
                    col7 int unsigned, col8 bigint unsigned, col9 float, col10 double, col11 bool, col12 binary(20), col13 nchar(20))''')
        for i in range(self.rowNum):
C
cpwu 已提交
72
            tdSql.execute(f"insert into {dbname}.ntb values(%d, %d, %d, %d, %d, %d, %d, %d, %d, %f, %f, %d, '{self.binary_str}%d', '{self.nchar_str}%d')"
J
jiacy-jcy 已提交
73
                          % (self.ts + i, i + 1, i + 1, i + 1, i + 1, i + 1, i + 1, i + 1, i + 1, i + 0.1, i + 0.1, i % 2, i + 1, i + 1))
G
Ganlin Zhao 已提交
74
            intData.append(i + 1)
J
jiacy-jcy 已提交
75
            floatData.append(i + 0.1)
G
Ganlin Zhao 已提交
76
        for i in ['col11','col12','col13']:
C
cpwu 已提交
77 78
            for j in ['ntb']:
                tdSql.error(f'select max({i} from {dbname}.{j} )')
J
jiacy-jcy 已提交
79
        for i in range(1,11):
C
cpwu 已提交
80 81
            for j in ['ntb']:
                tdSql.query(f"select max(col{i}) from {dbname}.{j}")
J
jiacy-jcy 已提交
82 83 84 85
                if i<9:
                    tdSql.checkData(0, 0, np.max(intData))
                elif i>=9:
                    tdSql.checkData(0, 0, np.max(floatData))
G
Ganlin Zhao 已提交
86

G
Ganlin Zhao 已提交
87
        tdSql.error(f"select max(now()) from {dbname}.ntb")
G
Ganlin Zhao 已提交
88

C
cpwu 已提交
89
        tdSql.query(f"select max(col1) from {dbname}.ntb where col2<=5")
J
jiacy-jcy 已提交
90
        tdSql.checkData(0,0,5)
91 92 93 94 95 96 97 98

    def check_max_functions(self, tbname , col_name):

        max_sql = f"select max({col_name}) from {tbname};"

        same_sql = f"select {col_name} from {tbname} order by {col_name} desc limit 1"

        tdSql.query(max_sql)
G
Ganlin Zhao 已提交
99
        max_result = tdSql.queryResult
100 101 102 103 104 105 106 107 108 109

        tdSql.query(same_sql)
        same_result = tdSql.queryResult

        if max_result !=same_result:
            tdLog.exit(" max function work not as expected, sql : %s "% max_sql)
        else:
            tdLog.info(" max function work as expected, sql : %s "% max_sql)


C
cpwu 已提交
110
    def support_distributed_aggregate(self, dbname="testdb"):
G
Ganlin Zhao 已提交
111

112
        # prepate datas for  20 tables distributed at different vgroups
C
cpwu 已提交
113 114
        tdSql.execute(f"create database if not exists {dbname} keep 3650 duration 1000 vgroups 5")
        tdSql.execute(f"use {dbname} ")
115
        tdSql.execute(
C
cpwu 已提交
116
            f'''create table {dbname}.stb1
117 118 119 120 121 122
            (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 已提交
123 124
            f'''
            create table {dbname}.t1
125 126 127 128
            (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(20):
C
cpwu 已提交
129
            tdSql.execute(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}" )')
130 131 132

        for i in range(9):
            tdSql.execute(
C
cpwu 已提交
133
                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 )"
134 135
            )
            tdSql.execute(
C
cpwu 已提交
136
                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 )"
137 138 139 140 141 142
            )

        for i in range(1,21):
            if i ==1 or i == 4:
                continue
            else:
C
cpwu 已提交
143
                tbname = f"{dbname}.ct{i}"
144 145 146 147
                for j in range(9):
                    tdSql.execute(
                f"insert into {tbname} values ( now()-{(i+j)*10}s, {1*(j+i)}, {11111*(j+i)}, {111*(j+i)}, {11*(j)}, {1.11*(j+i)}, {11.11*(j+i)}, {(j+i)%2}, 'binary{j}', 'nchar{j}', now()+{1*j}a )"
            )
C
cpwu 已提交
148 149 150 151
        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 )")
152

C
cpwu 已提交
153 154 155
        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  ) ")
156 157

        tdSql.execute(
C
cpwu 已提交
158
            f'''insert into {dbname}.t1 values
159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176
            ( '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 )
            '''
        )

        tdLog.info(" prepare data for distributed_aggregate done! ")

        # get vgroup_ids of all
C
cpwu 已提交
177
        tdSql.query(f"show {dbname}.vgroups ")
178 179 180
        vgroups = tdSql.queryResult

        vnode_tables={}
G
Ganlin Zhao 已提交
181

182 183
        for vgroup_id in vgroups:
            vnode_tables[vgroup_id[0]]=[]
G
Ganlin Zhao 已提交
184

185 186

        # check sub_table of per vnode ,make sure sub_table has been distributed
C
cpwu 已提交
187
        tdSql.query(f"select * from information_schema.ins_tables where db_name = '{dbname}' and table_name like 'ct%'")
188 189 190
        table_names = tdSql.queryResult
        tablenames = []
        for table_name in table_names:
G
Ganlin Zhao 已提交
191
            vnode_tables[table_name[6]].append(table_name[0])
192 193 194 195 196 197 198 199

        count = 0
        for k ,v in vnode_tables.items():
            if len(v)>=2:
                count+=1
        if count < 2:
            tdLog.exit(" the datas of all not satisfy sub_table has been distributed ")

G
Ganlin Zhao 已提交
200 201
        # check max function work status

C
cpwu 已提交
202
        tdSql.query(f"show {dbname}.tables like 'ct%'")
203 204 205 206 207
        table_names = tdSql.queryResult
        tablenames = []
        for table_name in table_names:
            tablenames.append(table_name[0])

C
cpwu 已提交
208
        tdSql.query(f"desc {dbname}.stb1")
209
        col_names = tdSql.queryResult
G
Ganlin Zhao 已提交
210

211 212 213 214
        colnames = []
        for col_name in col_names:
            if col_name[1] in ["INT" ,"BIGINT" ,"SMALLINT" ,"TINYINT" , "FLOAT" ,"DOUBLE"]:
                colnames.append(col_name[0])
G
Ganlin Zhao 已提交
215

216 217
        for tablename in tablenames:
            for colname in colnames:
C
cpwu 已提交
218
                self.check_max_functions(f"{dbname}.{tablename}", colname)
219

G
Ganlin Zhao 已提交
220
    def run(self):
J
jiacy-jcy 已提交
221

G
Ganlin Zhao 已提交
222
        # max verifacation
J
jiacy-jcy 已提交
223 224
        self.max_check_stb_and_tb_base()
        self.max_check_ntb_base()
J
jiacy-jcy 已提交
225

226
        self.support_distributed_aggregate()
J
jiacy-jcy 已提交
227 228 229 230 231 232 233

    def stop(self):
        tdSql.close()
        tdLog.success("%s successfully executed" % __file__)

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