first.py 8.2 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
update  
jiacy-jcy 已提交
14 15
import random
import string
J
jiacy-jcy 已提交
16 17
import sys
import taos
J
jiacy-jcy 已提交
18
from util.common import *
J
jiacy-jcy 已提交
19 20 21 22 23 24 25 26 27 28 29 30
from util.log import *
from util.cases import *
from util.sql import *
import numpy as np


class TDTestCase:
    def init(self, conn, logSql):
        tdLog.debug("start to execute %s" % __file__)
        tdSql.init(conn.cursor())

        self.rowNum = 10
J
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
update  
jiacy-jcy 已提交
35
    
J
jiacy-jcy 已提交
36 37
    def first_check_base(self):
        tdSql.prepare()
J
jiacy-jcy 已提交
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
        column_dict = {
            '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)'
        }
J
jiacy-jcy 已提交
53 54 55 56
        tdSql.execute('''create table stb(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)) tags(loc nchar(20))''')
        tdSql.execute("create table stb_1 using stb tags('beijing')")
        tdSql.execute("insert into stb_1(ts) values(%d)" % (self.ts - 1))
J
jiacy-jcy 已提交
57
        column_list = ['col1','col2','col3','col4','col5','col6','col7','col8','col9','col10','col11','col12','col13']
J
jiacy-jcy 已提交
58 59 60 61 62
        for i in ['stb_1','db.stb_1','stb_1','db.stb_1']:
            tdSql.query(f"select first(*) from {i}")
            tdSql.checkRows(1)
            tdSql.checkData(0, 1, None)
        #!bug TD-16561
J
jiacy-jcy 已提交
63 64 65 66
        for i in ['stb','db.stb']:
            tdSql.query(f"select first(*) from {i}")
            tdSql.checkRows(1)
            tdSql.checkData(0, 1, None)
J
jiacy-jcy 已提交
67
        for i in column_list:
J
jiacy-jcy 已提交
68
            for j in ['stb_1','db.stb_1','stb_1','db.stb_1']:
J
jiacy-jcy 已提交
69
                tdSql.query(f"select first({i}) from {j}")
J
jiacy-jcy 已提交
70 71 72 73
                tdSql.checkRows(0)
        for i in range(self.rowNum):
            tdSql.execute(f"insert into stb_1 values(%d, %d, %d, %d, %d, %d, %d, %d, %d, %f, %f, %d, '{self.binary_str}%d', '{self.nchar_str}%d')"
                          % (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))
J
jiacy-jcy 已提交
74
        for k, v in column_dict.items():
J
update  
jiacy-jcy 已提交
75
            for j in ['stb_1', 'db.stb_1', 'stb', 'db.stb']:
J
jiacy-jcy 已提交
76
                tdSql.query(f"select first({k}) from {j}")
J
update  
jiacy-jcy 已提交
77 78
                tdSql.checkRows(1)
                # tinyint,smallint,int,bigint,tinyint unsigned,smallint unsigned,int unsigned,bigint unsigned
J
jiacy-jcy 已提交
79 80
                if v == 'tinyint' or v == 'smallint' or v == 'int' or v == 'bigint' or v == 'tinyint unsigned' or v == 'smallint unsigned'\
                        or v == 'int unsigned' or v == 'bigint unsigned':
J
update  
jiacy-jcy 已提交
81 82
                    tdSql.checkData(0, 0, 1)
                # float,double
J
jiacy-jcy 已提交
83
                elif v == 'float' or v == 'double':
J
update  
jiacy-jcy 已提交
84 85
                    tdSql.checkData(0, 0, 0.1)
                # bool
J
jiacy-jcy 已提交
86
                elif v == 'bool':
J
update  
jiacy-jcy 已提交
87 88
                    tdSql.checkData(0, 0, False)
                # binary
J
jiacy-jcy 已提交
89
                elif 'binary' in v:
J
update  
jiacy-jcy 已提交
90 91
                    tdSql.checkData(0, 0, f'{self.binary_str}1')
                # nchar
J
jiacy-jcy 已提交
92
                elif 'nchar' in v:
J
update  
jiacy-jcy 已提交
93
                    tdSql.checkData(0, 0, f'{self.nchar_str}1')
J
update  
jiacy-jcy 已提交
94
        #!bug TD-16569
J
jiacy-jcy 已提交
95 96
        tdSql.query("select first(*),last(*) from stb where ts < 23 interval(1s)")
        tdSql.checkRows(0)
J
jiacy-jcy 已提交
97
        tdSql.execute('drop database db')
J
update  
jiacy-jcy 已提交
98 99
    def first_check_stb_distribute(self):
        # prepare data for vgroup 4
J
jiacy-jcy 已提交
100 101
        dbname = tdCom.getLongName(10, "letters")
        stbname = tdCom.getLongName(5, "letters")
J
jiacy-jcy 已提交
102
        child_table_num = 20
J
update  
jiacy-jcy 已提交
103
        vgroup = 2
J
jiacy-jcy 已提交
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
        column_dict = {
            '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)'
        }
J
update  
jiacy-jcy 已提交
119
        tdSql.execute(f"create database if not exists {dbname} vgroups {vgroup}")
J
update  
jiacy-jcy 已提交
120 121 122 123
        tdSql.execute(f'use {dbname}')
        # build 20 child tables,every table insert 10 rows
        tdSql.execute(f'''create table {stbname}(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)) tags(loc nchar(20))''')
J
jiacy-jcy 已提交
124
        for i in range(child_table_num):
J
update  
jiacy-jcy 已提交
125 126
            tdSql.execute(f"create table {stbname}_{i} using {stbname} tags('beijing')")
            tdSql.execute(f"insert into {stbname}_{i}(ts) values(%d)" % (self.ts - 1-i))
J
jiacy-jcy 已提交
127
        #!bug TD-16561
J
jiacy-jcy 已提交
128 129 130 131
        for i in [f'{stbname}', f'{dbname}.{stbname}']:
            tdSql.query(f"select first(*) from {i}")
            tdSql.checkRows(1)
            tdSql.checkData(0, 1, None)
J
update  
jiacy-jcy 已提交
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
        tdSql.query('show tables')
        vgroup_list = []
        for i in range(len(tdSql.queryResult)):
            vgroup_list.append(tdSql.queryResult[i][6])
        vgroup_list_set = set(vgroup_list)
        # print(vgroup_list_set)
        # print(vgroup_list)
        for i in vgroup_list_set:
            vgroups_num = vgroup_list.count(i)
            if vgroups_num >=2:
                tdLog.info(f'This scene with {vgroups_num} vgroups is ok!')
                continue
            else:
                tdLog.exit('This scene does not meet the requirements with {vgroups_num} vgroup!\n')
        
J
jiacy-jcy 已提交
147
        for i in range(child_table_num):
J
update  
jiacy-jcy 已提交
148 149 150
            for j in range(self.rowNum):
                tdSql.execute(f"insert into {stbname}_{i} values(%d, %d, %d, %d, %d, %d, %d, %d, %d, %f, %f, %d, '{self.binary_str}%d', '{self.nchar_str}%d')"
                          % (self.ts + j + i, j + 1, j + 1, j + 1, j + 1, j + 1, j + 1, j + 1, j + 1, j + 0.1, j + 0.1, j % 2, j + 1, j + 1))
J
jiacy-jcy 已提交
151
        
J
jiacy-jcy 已提交
152
        for k, v in column_dict.items():
J
jiacy-jcy 已提交
153
            for j in [f'{stbname}_{i}', f'{dbname}.{stbname}_{i}', f'{stbname}', f'{dbname}.{stbname}']:
J
jiacy-jcy 已提交
154
                tdSql.query(f"select first({k}) from {j}")
J
update  
jiacy-jcy 已提交
155 156
                tdSql.checkRows(1)
                # tinyint,smallint,int,bigint,tinyint unsigned,smallint unsigned,int unsigned,bigint unsigned
J
jiacy-jcy 已提交
157 158
                if v == 'tinyint' or v == 'smallint' or v == 'int' or v == 'bigint' or v == 'tinyint unsigned' or v == 'smallint unsigned'\
                        or v == 'int unsigned' or v == 'bigint unsigned':
J
update  
jiacy-jcy 已提交
159 160
                    tdSql.checkData(0, 0, 1)
                # float,double
J
jiacy-jcy 已提交
161
                elif v == 'float' or v == 'double':
J
update  
jiacy-jcy 已提交
162 163
                    tdSql.checkData(0, 0, 0.1)
                # bool
J
jiacy-jcy 已提交
164
                elif v == 'bool':
J
update  
jiacy-jcy 已提交
165 166
                    tdSql.checkData(0, 0, False)
                # binary
J
jiacy-jcy 已提交
167
                elif 'binary' in v:
J
update  
jiacy-jcy 已提交
168 169
                    tdSql.checkData(0, 0, f'{self.binary_str}1')
                # nchar
J
jiacy-jcy 已提交
170
                elif 'nchar' in v:
J
update  
jiacy-jcy 已提交
171
                    tdSql.checkData(0, 0, f'{self.nchar_str}1')
J
update  
jiacy-jcy 已提交
172
        #!bug TD-16569
J
jiacy-jcy 已提交
173 174
        tdSql.query(f"select first(*),last(*) from {stbname} where ts < 23 interval(1s)")
        tdSql.checkRows(0)
J
jiacy-jcy 已提交
175
        tdSql.execute(f'drop database {dbname}')
J
update  
jiacy-jcy 已提交
176 177
        
        
J
jiacy-jcy 已提交
178
        
J
jiacy-jcy 已提交
179
        pass
J
jiacy-jcy 已提交
180
    def run(self):
J
update  
jiacy-jcy 已提交
181
        self.first_check_base()
J
jiacy-jcy 已提交
182
        self.first_check_stb_distribute()
J
jiacy-jcy 已提交
183 184 185 186 187 188 189 190
        
                
    def stop(self):
        tdSql.close()
        tdLog.success("%s successfully executed" % __file__)

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