bottom.py 5.8 KB
Newer Older
J
jiacy-jcy 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13
###################################################################
#           Copyright (c) 2016 by TAOS Technologies, Inc.
#                     All rights reserved.
#
#  This file is proprietary and confidential to TAOS Technologies.
#  No part of this file may be reproduced, stored, transmitted,
#  disclosed or used in any form or by any means other than as
#  expressly provided by the written permission from Jianhui Tao
#
###################################################################

# -*- coding: utf-8 -*-

J
jiacy-jcy 已提交
14 15
import random
import string
J
jiacy-jcy 已提交
16 17 18
from util.log import *
from util.cases import *
from util.sql import *
J
jiacy-jcy 已提交
19
from util.common import *
J
jiacy-jcy 已提交
20
from util.sqlset import *
J
jiacy-jcy 已提交
21 22 23 24 25 26


class TDTestCase:
    def init(self, conn, logSql):
        tdLog.debug("start to execute %s" % __file__)
        tdSql.init(conn.cursor())
J
jiacy-jcy 已提交
27 28
        self.dbname = 'db_test'
        self.setsql = TDSetSql()
C
cpwu 已提交
29
        self.ntbname = f'{self.dbname}.ntb'
J
jiacy-jcy 已提交
30
        self.rowNum = 10
J
update  
jiacy-jcy 已提交
31
        self.tbnum = 20
J
jiacy-jcy 已提交
32
        self.ts = 1537146000000
J
jiacy-jcy 已提交
33 34
        self.binary_str = 'taosdata'
        self.nchar_str = '涛思数据'
J
jiacy-jcy 已提交
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
        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',
            'col9': 'float',
            'col10': 'double',
            'col11': 'bool',
            'col12': 'binary(20)',
            'col13': 'nchar(20)'
        }
G
Ganlin Zhao 已提交
51

J
jiacy-jcy 已提交
52 53
        self.param_list = [1,100]
    def insert_data(self,column_dict,tbname,row_num):
J
jiacy-jcy 已提交
54
        insert_sql = self.setsql.set_insertsql(column_dict,tbname,self.binary_str,self.nchar_str)
J
jiacy-jcy 已提交
55 56
        for i in range(row_num):
            insert_list = []
J
jiacy-jcy 已提交
57
            self.setsql.insert_values(column_dict,i,insert_sql,insert_list,self.ts)
J
jiacy-jcy 已提交
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
    def bottom_check_data(self,tbname,tb_type):
        new_column_dict = {}
        for param in self.param_list:
            for k,v in self.column_dict.items():
                if v.lower() in ['tinyint','smallint','int','bigint','tinyint unsigned','smallint unsigned','int unsigned','bigint unsigned']:
                    tdSql.query(f'select bottom({k},{param}) from {tbname} order by {k}')
                    if param >= self.rowNum:
                        if tb_type in ['normal_table','child_table']:
                            tdSql.checkRows(self.rowNum)
                            values_list = []
                            for i in range(self.rowNum):
                                tp = (i,)
                                values_list.append(tp)
                            tdSql.checkEqual(tdSql.queryResult,values_list)
                        elif tb_type == 'stable':
                            tdSql.checkRows(param)
                    elif param < self.rowNum:
                        if tb_type in ['normal_table','child_table']:
                            tdSql.checkRows(param)
                            values_list = []
                            for i in range(param):
                                tp = (i,)
                                values_list.append(tp)
                            tdSql.checkEqual(tdSql.queryResult,values_list)
                        elif tb_type == 'stable':
                            tdSql.checkRows(param)
                    for i in [self.param_list[0]-1,self.param_list[-1]+1]:
                        tdSql.error(f'select top({k},{i}) from {tbname}')
                    new_column_dict.update({k:v})
                elif v.lower() == 'bool' or 'binary' in v.lower() or 'nchar' in v.lower():
                    tdSql.error(f'select top({k},{param}) from {tbname}')
                tdSql.error(f'select * from {tbname} where top({k},{param})=1')
        pass
    def bottom_check_ntb(self):
        tdSql.execute(f'create database if not exists {self.dbname} vgroups 1')
        tdSql.execute(f'use {self.dbname}')
        tdSql.execute(self.setsql.set_create_normaltable_sql(self.ntbname,self.column_dict))
        self.insert_data(self.column_dict,self.ntbname,self.rowNum)
        self.bottom_check_data(self.ntbname,'normal_table')
        tdSql.execute(f'drop database {self.dbname}')
    def bottom_check_stb(self):
C
cpwu 已提交
99
        stbname = f'{self.dbname}.{tdCom.getLongName(5, "letters")}'
J
jiacy-jcy 已提交
100 101 102 103 104 105 106 107 108 109 110
        tag_dict = {
            't0':'int'
        }
        tag_values = [
            f'1'
            ]
        tdSql.execute(f"create database if not exists {self.dbname} vgroups 2")
        tdSql.execute(f'use {self.dbname}')
        tdSql.execute(self.setsql.set_create_stable_sql(stbname,self.column_dict,tag_dict))
        for i in range(self.tbnum):
            tdSql.execute(f"create table {stbname}_{i} using {stbname} tags({tag_values[0]})")
J
jiacy-jcy 已提交
111
            self.insert_data(self.column_dict,f'{stbname}_{i}',self.rowNum)
C
cpwu 已提交
112
        tdSql.query(f'show {self.dbname}.tables')
J
update  
jiacy-jcy 已提交
113 114 115 116 117 118
        vgroup_list = []
        for i in range(len(tdSql.queryResult)):
            vgroup_list.append(tdSql.queryResult[i][6])
        vgroup_list_set = set(vgroup_list)
        for i in vgroup_list_set:
            vgroups_num = vgroup_list.count(i)
J
jiacy-jcy 已提交
119
            if vgroups_num >= 2:
J
update  
jiacy-jcy 已提交
120 121
                tdLog.info(f'This scene with {vgroups_num} vgroups is ok!')
            else:
J
jiacy-jcy 已提交
122 123 124 125 126 127
                tdLog.exit(
                    'This scene does not meet the requirements with {vgroups_num} vgroup!\n')
        for i in range(self.tbnum):
            self.bottom_check_data(f'{stbname}_{i}','child_table')
        self.bottom_check_data(f'{stbname}','stable')
        tdSql.execute(f'drop database {self.dbname}')
G
Ganlin Zhao 已提交
128

J
jiacy-jcy 已提交
129
    def run(self):
J
jiacy-jcy 已提交
130 131
        self.bottom_check_ntb()
        self.bottom_check_stb()
G
Ganlin Zhao 已提交
132

J
jiacy-jcy 已提交
133 134 135 136 137 138
    def stop(self):
        tdSql.close()
        tdLog.success("%s successfully executed" % __file__)

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