openTsdbTelnetLinesInsert.py 73.0 KB
Newer Older
J
jiajingbin 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
###################################################################
#           Copyright (c) 2021 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 -*-

import traceback
import random
16
from taos.error import SchemalessError
J
jiajingbin 已提交
17 18 19 20 21 22
import time
import numpy as np
from util.log import *
from util.cases import *
from util.sql import *
from util.common import tdCom
J
jiajingbin 已提交
23
from util.types import TDSmlProtocolType, TDSmlTimestampType
J
jiajingbin 已提交
24 25 26 27 28 29 30
import threading

class TDTestCase:
    def init(self, conn, logSql):
        tdLog.debug("start to execute %s" % __file__)
        tdSql.init(conn.cursor(), logSql)
        self._conn = conn 
31
        self.smlChildTableName_value = tdSql.getVariable("smlChildTableName")[0].upper()
J
jiajingbin 已提交
32 33 34 35 36 37 38 39 40 41

    def createDb(self, name="test", db_update_tag=0):
        if db_update_tag == 0:
            tdSql.execute(f"drop database if exists {name}")
            tdSql.execute(f"create database if not exists {name} precision 'us'")
        else:
            tdSql.execute(f"drop database if exists {name}")
            tdSql.execute(f"create database if not exists {name} precision 'us' update 1")
        tdSql.execute(f'use {name}')

J
jiajingbin 已提交
42 43
    def timeTrans(self, time_value, ts_type):
        if int(time_value) == 0:
J
jiajingbin 已提交
44 45
            ts = time.time()
        else:
J
jiajingbin 已提交
46 47 48 49
            if ts_type == TDSmlTimestampType.MILLI_SECOND.value or ts_type == None:
                ts = int(''.join(list(filter(str.isdigit, time_value))))/1000
            elif ts_type == TDSmlTimestampType.SECOND.value:
                ts = int(''.join(list(filter(str.isdigit, time_value))))/1
J
jiajingbin 已提交
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
        ulsec = repr(ts).split('.')[1][:6]
        if len(ulsec) < 6 and int(ulsec) != 0:
            ulsec = int(ulsec) * (10 ** (6 - len(ulsec)))
        elif int(ulsec) == 0:
            ulsec *= 6
            # * follow two rows added for tsCheckCase
            td_ts = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(ts))
            return td_ts
        #td_ts = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(ts))
        td_ts = time.strftime("%Y-%m-%d %H:%M:%S.{}".format(ulsec), time.localtime(ts))
        return td_ts
        #return repr(datetime.datetime.strptime(td_ts, "%Y-%m-%d %H:%M:%S.%f"))
    
    def dateToTs(self, datetime_input):
        return int(time.mktime(time.strptime(datetime_input, "%Y-%m-%d %H:%M:%S.%f")))

J
jiajingbin 已提交
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 99 100 101 102 103 104 105
    def getTdTypeValue(self, value, vtype="col"):
        if vtype == "col":
            if value.lower().endswith("i8"):
                td_type = "TINYINT"
                td_tag_value = ''.join(list(value)[:-2])
            elif value.lower().endswith("i16"):
                td_type = "SMALLINT"
                td_tag_value = ''.join(list(value)[:-3])
            elif value.lower().endswith("i32"):
                td_type = "INT"
                td_tag_value = ''.join(list(value)[:-3])
            elif value.lower().endswith("i64"):
                td_type = "BIGINT"
                td_tag_value = ''.join(list(value)[:-3])
            elif value.lower().endswith("u64"):
                td_type = "BIGINT UNSIGNED"
                td_tag_value = ''.join(list(value)[:-3])
            elif value.lower().endswith("f32"):
                td_type = "FLOAT"
                td_tag_value = ''.join(list(value)[:-3])
                td_tag_value = '{}'.format(np.float32(td_tag_value))
            elif value.lower().endswith("f64"):
                td_type = "DOUBLE"
                td_tag_value = ''.join(list(value)[:-3])
                if "e" in value.lower():
                    td_tag_value = str(float(td_tag_value))
            elif value.lower().startswith('l"'):
                td_type = "NCHAR"
                td_tag_value = ''.join(list(value)[2:-1])
            elif value.startswith('"') and value.endswith('"'):
                td_type = "BINARY"
                td_tag_value = ''.join(list(value)[1:-1])
            elif value.lower() == "t" or value.lower() == "true":
                td_type = "BOOL"
                td_tag_value = "True"
            elif value.lower() == "f" or value.lower() == "false":
                td_type = "BOOL"
                td_tag_value = "False"
            elif value.isdigit():
                td_type = "DOUBLE"
106 107
                td_tag_value = str(float(value))
            else:
J
jiajingbin 已提交
108 109 110 111 112 113 114 115
                td_type = "DOUBLE"
                if "e" in value.lower():
                    td_tag_value = str(float(value))
                else:
                    td_tag_value = value
        elif vtype == "tag":
            td_type = "NCHAR"
            td_tag_value = str(value)
J
jiajingbin 已提交
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
        return td_type, td_tag_value

    def typeTrans(self, type_list):
        type_num_list = []
        for tp in type_list:
            if tp.upper() == "TIMESTAMP":
                type_num_list.append(9)
            elif tp.upper() == "BOOL":
                type_num_list.append(1)
            elif tp.upper() == "TINYINT":
                type_num_list.append(2)
            elif tp.upper() == "SMALLINT":
                type_num_list.append(3)
            elif tp.upper() == "INT":
                type_num_list.append(4)
            elif tp.upper() == "BIGINT":
                type_num_list.append(5)
            elif tp.upper() == "FLOAT":
                type_num_list.append(6)
            elif tp.upper() == "DOUBLE":
                type_num_list.append(7)
            elif tp.upper() == "BINARY":
                type_num_list.append(8)
            elif tp.upper() == "NCHAR":
                type_num_list.append(10)
            elif tp.upper() == "BIGINT UNSIGNED":
                type_num_list.append(14)
        return type_num_list

J
jiajingbin 已提交
145
    def inputHandle(self, input_sql, ts_type):
J
jiajingbin 已提交
146 147
        input_sql_split_list = input_sql.split(" ")
        stb_name = input_sql_split_list[0]
148
        stb_tag_list = input_sql_split_list[3:]
J
jiajingbin 已提交
149
        stb_col_value = input_sql_split_list[2]
J
jiajingbin 已提交
150
        ts_value = self.timeTrans(input_sql_split_list[1], ts_type)
J
jiajingbin 已提交
151 152 153 154 155 156 157 158 159 160 161 162

        tag_name_list = []
        tag_value_list = []
        td_tag_value_list = []
        td_tag_type_list = []

        col_name_list = []
        col_value_list = []
        td_col_value_list = []
        td_col_type_list = []

        for elm in stb_tag_list:
163 164 165 166 167 168 169 170 171
            if self.smlChildTableName_value == "ID":
                if "id=" in elm.lower():
                    tb_name = elm.split('=')[1]
                else:
                    tag_name_list.append(elm.split("=")[0].lower())
                    tag_value_list.append(elm.split("=")[1])
                    tb_name = ""
                    td_tag_value_list.append(self.getTdTypeValue(elm.split("=")[1], "tag")[1])
                    td_tag_type_list.append(self.getTdTypeValue(elm.split("=")[1], "tag")[0])
J
jiajingbin 已提交
172
            else:
173 174 175 176 177 178 179 180 181 182 183
                if "id" == elm.split("=")[0].lower():
                    tag_name_list.insert(0, elm.split("=")[0])
                    tag_value_list.insert(0, elm.split("=")[1])
                    td_tag_value_list.insert(0, self.getTdTypeValue(elm.split("=")[1], "tag")[1])
                    td_tag_type_list.insert(0, self.getTdTypeValue(elm.split("=")[1], "tag")[0])
                else:
                    tag_name_list.append(elm.split("=")[0])
                    tag_value_list.append(elm.split("=")[1])
                    tb_name = ""
                    td_tag_value_list.append(self.getTdTypeValue(elm.split("=")[1], "tag")[1])
                    td_tag_type_list.append(self.getTdTypeValue(elm.split("=")[1], "tag")[0])
J
jiajingbin 已提交
184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208
        
        col_name_list.append('value')
        col_value_list.append(stb_col_value)

        td_col_value_list.append(self.getTdTypeValue(stb_col_value)[1])
        td_col_type_list.append(self.getTdTypeValue(stb_col_value)[0])

        final_field_list = []
        final_field_list.extend(col_name_list)
        final_field_list.extend(tag_name_list)

        final_type_list = []
        final_type_list.append("TIMESTAMP")
        final_type_list.extend(td_col_type_list)
        final_type_list.extend(td_tag_type_list)
        final_type_list = self.typeTrans(final_type_list)

        final_value_list = []
        final_value_list.append(ts_value)
        final_value_list.extend(td_col_value_list)
        final_value_list.extend(td_tag_value_list)
        return final_value_list, final_field_list, final_type_list, stb_name, tb_name

    def genFullTypeSql(self, stb_name="", tb_name="", value="", t0="", t1="127i8", t2="32767i16", t3="2147483647i32",
                        t4="9223372036854775807i64", t5="11.12345f32", t6="22.123456789f64", t7="\"binaryTagValue\"",
J
jiajingbin 已提交
209 210 211
                        t8="L\"ncharTagValue\"", ts="1626006833641",
                        id_noexist_tag=None, id_change_tag=None, id_upper_tag=None, id_mixul_tag=None, id_double_tag=None,
                        t_add_tag=None, t_mul_tag=None, c_multi_tag=None, c_blank_tag=None, t_blank_tag=None, 
212
                        chinese_tag=None, multi_field_tag=None, point_trans_tag=None):
J
jiajingbin 已提交
213 214 215 216 217
        if stb_name == "":
            stb_name = tdCom.getLongName(len=6, mode="letters")
        if tb_name == "":
            tb_name = f'{stb_name}_{random.randint(0, 65535)}_{random.randint(0, 65535)}'
        if t0 == "":
218
            t0 = "t"
J
jiajingbin 已提交
219 220 221 222 223 224
        if value == "":
            value = random.choice(["f", "F", "false", "False", "t", "T", "true", "True", "TRUE", "FALSE"])
        if id_upper_tag is not None:
            id = "ID"
        else:
            id = "id"
J
jiajingbin 已提交
225 226 227 228 229
        if id_mixul_tag is not None:
            id = random.choice(["iD", "Id"])
        else:
            id = "id"
        sql_seq = f'{stb_name} {ts} {value} {id}={tb_name} t0={t0} t1={t1} t2={t2} t3={t3} t4={t4} t5={t5} t6={t6} t7={t7} t8={t8}'
J
jiajingbin 已提交
230
        if id_noexist_tag is not None:
231
            sql_seq = f'{stb_name} {ts} {value} t0={t0} t1={t1} t2={t2} t3={t3} t4={t4} t5={t5} t6={t6} t7={t7} t8={t8}'
J
jiajingbin 已提交
232
            if t_add_tag is not None:
233
                sql_seq = f'{stb_name} {ts} {value} t0={t0} t1={t1} t2={t2} t3={t3} t4={t4} t5={t5} t6={t6} t7={t7} t8={t8} t9={t8}'
J
jiajingbin 已提交
234
        if id_change_tag is not None:
J
jiajingbin 已提交
235
            sql_seq = f'{stb_name} {ts} {value} t0={t0} {id}={tb_name} t1={t1} t2={t2} t3={t3} t4={t4} t5={t5} t6={t6} t7={t7} t8={t8}'
J
jiajingbin 已提交
236
        if id_double_tag is not None:
237
            sql_seq = f'{stb_name} {ts} {value} {id}=\"{tb_name}_1\" t0={t0} t1={t1} {id}=\"{tb_name}_2\" t2={t2} t3={t3} t4={t4} t5={t5} t6={t6} t7={t7} t8={t8}'
J
jiajingbin 已提交
238
        if t_add_tag is not None:
J
jiajingbin 已提交
239
            sql_seq = f'{stb_name} {ts} {value} {id}={tb_name} t0={t0} t1={t1} t2={t2} t3={t3} t4={t4} t5={t5} t6={t6} t7={t7} t8={t8} t11={t1} t10={t8}'
J
jiajingbin 已提交
240
        if t_mul_tag is not None:
J
jiajingbin 已提交
241
            sql_seq = f'{stb_name} {ts} {value} {id}={tb_name} t0={t0} t1={t1} t2={t2} t3={t3} t4={t4} t5={t5} t6={t6}'
J
jiajingbin 已提交
242
            if id_noexist_tag is not None:
243
                sql_seq = f'{stb_name} {ts} {value} t0={t0} t1={t1} t2={t2} t3={t3} t4={t4} t5={t5} t6={t6}'
J
jiajingbin 已提交
244 245
        if c_multi_tag is not None:
            sql_seq = f'{stb_name} {ts} {value} {value} {id}={tb_name} t0={t0} t1={t1} t2={t2} t3={t3} t4={t4} t5={t5} t6={t6}'
246
        if c_blank_tag is not None:
J
jiajingbin 已提交
247
            sql_seq = f'{stb_name} {ts} {id}={tb_name} t0={t0} t1={t1} t2={t2} t3={t3} t4={t4} t5={t5} t6={t6} t7={t7} t8={t8}'
248
        if t_blank_tag is not None:
249
            sql_seq = f'{stb_name} {ts} {value}'
250
        if chinese_tag is not None:
251
            sql_seq = f'{stb_name} {ts} L"涛思数据" t0={t0} t1=L"涛思数据"'
252
        if multi_field_tag is not None:
J
jiajingbin 已提交
253
            sql_seq = f'{stb_name} {ts} {value} {id}={tb_name} t0={t0} {value}'
254
        if point_trans_tag is not None:
J
jiajingbin 已提交
255
            sql_seq = f'.point.trans.test {ts} {value} t0={t0}'
J
jiajingbin 已提交
256 257 258 259 260 261 262 263 264 265 266
        return sql_seq, stb_name
    
    def genMulTagColStr(self, genType, count=1):
        """
            genType must be tag/col
        """
        tag_str = ""
        col_str = ""
        if genType == "tag":
            for i in range(0, count):
                if i < (count-1):
267
                    tag_str += f't{i}=f '
J
jiajingbin 已提交
268 269 270 271 272 273 274 275 276 277 278
                else:
                    tag_str += f't{i}=f'
            return tag_str
        if genType == "col":
            col_str = "t"
            return col_str

    def genLongSql(self, tag_count):
        stb_name = tdCom.getLongName(7, mode="letters")
        tag_str = self.genMulTagColStr("tag", tag_count)
        col_str = self.genMulTagColStr("col")
J
jiajingbin 已提交
279
        ts = "1626006833641"
280
        long_sql = stb_name + ' ' + ts + ' ' + col_str + ' ' + ' ' + tag_str
J
jiajingbin 已提交
281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301
        return long_sql, stb_name

    def getNoIdTbName(self, stb_name):
        query_sql = f"select tbname from {stb_name}"
        tb_name = self.resHandle(query_sql, True)[0][0]
        return tb_name

    def resHandle(self, query_sql, query_tag):
        tdSql.execute('reset query cache')
        row_info = tdSql.query(query_sql, query_tag)
        col_info = tdSql.getColNameList(query_sql, query_tag)
        res_row_list = []
        sub_list = []
        for row_mem in row_info:
            for i in row_mem:
                sub_list.append(str(i))
            res_row_list.append(sub_list)
        res_field_list_without_ts = col_info[0][1:]
        res_type_list = col_info[1]
        return res_row_list, res_field_list_without_ts, res_type_list

J
jiajingbin 已提交
302 303 304 305 306 307
    def resCmp(self, input_sql, stb_name, query_sql="select * from", condition="", ts=None, ts_type=None, id=True, none_check_tag=None, precision=None):
        expect_list = self.inputHandle(input_sql, ts_type)
        if precision == None:
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, ts_type)
        else:
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, precision)
J
jiajingbin 已提交
308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333
        query_sql = f"{query_sql} {stb_name} {condition}"
        res_row_list, res_field_list_without_ts, res_type_list = self.resHandle(query_sql, True)
        if ts == 0:
            res_ts = self.dateToTs(res_row_list[0][0])
            current_time = time.time()
            if current_time - res_ts < 60:
                tdSql.checkEqual(res_row_list[0][1:], expect_list[0][1:])
            else:
                print("timeout")
                tdSql.checkEqual(res_row_list[0], expect_list[0])
        else:
            if none_check_tag is not None:
                none_index_list = [i for i,x in enumerate(res_row_list[0]) if x=="None"]
                none_index_list.reverse()
                for j in none_index_list:
                    res_row_list[0].pop(j)
                    expect_list[0].pop(j)
            tdSql.checkEqual(res_row_list[0], expect_list[0])
        tdSql.checkEqual(res_field_list_without_ts, expect_list[1])
        for i in range(len(res_type_list)):
            tdSql.checkEqual(res_type_list[i], expect_list[2][i])

    def initCheckCase(self):
        """
            normal tags and cols, one for every elm
        """
J
jiajingbin 已提交
334
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
335 336 337 338 339 340 341 342
        tdCom.cleanTb()
        input_sql, stb_name = self.genFullTypeSql()
        self.resCmp(input_sql, stb_name)

    def boolTypeCheckCase(self):
        """
            check all normal type
        """
J
jiajingbin 已提交
343
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
344 345 346 347 348 349 350 351 352 353 354 355 356 357
        tdCom.cleanTb()
        full_type_list = ["f", "F", "false", "False", "t", "T", "true", "True"]
        for t_type in full_type_list:
            input_sql, stb_name = self.genFullTypeSql(t0=t_type)
            self.resCmp(input_sql, stb_name)
        
    def symbolsCheckCase(self):
        """
            check symbols = `~!@#$%^&*()_-+={[}]\|:;'\",<.>/? 
        """
        '''
            please test :
            binary_symbols = '\"abcd`~!@#$%^&*()_-{[}]|:;<.>?lfjal"\'\'"\"'
        '''
J
jiajingbin 已提交
358
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
359
        tdCom.cleanTb()
360
        binary_symbols = '"abcd`~!@#$%^&*()_-{[}]|:;<.>?lfjal"'
J
jiajingbin 已提交
361 362
        nchar_symbols = f'L{binary_symbols}'
        input_sql1, stb_name1 = self.genFullTypeSql(value=binary_symbols, t7=binary_symbols, t8=nchar_symbols)
363
        input_sql2, stb_name2 = self.genFullTypeSql(value=nchar_symbols, t7=binary_symbols, t8=nchar_symbols)
J
jiajingbin 已提交
364
        self.resCmp(input_sql1, stb_name1)
365
        self.resCmp(input_sql2, stb_name2)
J
jiajingbin 已提交
366 367 368

    def tsCheckCase(self):
        """
J
jiajingbin 已提交
369
            test ts list --> ["1626006833640ms", "1626006834s", "1626006822639022"]
J
jiajingbin 已提交
370
        """
J
jiajingbin 已提交
371
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
372
        tdCom.cleanTb()
J
jiajingbin 已提交
373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389
        input_sql, stb_name = self.genFullTypeSql(ts=1626006833640)
        self.resCmp(input_sql, stb_name, ts_type=TDSmlTimestampType.MILLI_SECOND.value)
        input_sql, stb_name = self.genFullTypeSql(ts=1626006833640)
        self.resCmp(input_sql, stb_name, ts_type=None)
        input_sql, stb_name = self.genFullTypeSql(ts=1626006834)
        self.resCmp(input_sql, stb_name, ts_type=TDSmlTimestampType.SECOND.value)

        tdSql.execute(f"drop database if exists test_ts")
        tdSql.execute(f"create database if not exists test_ts precision 'ms'")
        tdSql.execute("use test_ts")
        input_sql = ['test_ms 1626006833640 t t0=t', 'test_ms 1626006833641 f t0=t']
        self._conn.schemaless_insert(input_sql, TDSmlProtocolType.TELNET.value, None)
        res = tdSql.query('select * from test_ms', True)
        tdSql.checkEqual(str(res[0][0]), "2021-07-11 20:33:53.640000")
        tdSql.checkEqual(str(res[1][0]), "2021-07-11 20:33:53.641000")

    def openTstbTelnetTsCheckCase(self):
J
jiajingbin 已提交
390
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407
        tdCom.cleanTb()
        input_sql = f'{tdCom.getLongName(len=10, mode="letters")} 0 127 t0=127 t1=32767I16 t2=2147483647I32 t3=9223372036854775807 t4=11.12345027923584F32 t5=22.123456789F64'
        stb_name = input_sql.split(" ")[0]
        self.resCmp(input_sql, stb_name, ts=0)
        input_sql = f'{tdCom.getLongName(len=10, mode="letters")} 1626006833640 127 t0=127 t1=32767I16 t2=2147483647I32 t3=9223372036854775807 t4=11.12345027923584F32 t5=22.123456789F64'
        stb_name = input_sql.split(" ")[0]
        self.resCmp(input_sql, stb_name, ts_type=TDSmlTimestampType.MILLI_SECOND.value)
        input_sql = f'{tdCom.getLongName(len=10, mode="letters")} 1626006834 127 t0=127 t1=32767I16 t2=2147483647I32 t3=9223372036854775807 t4=11.12345027923584F32 t5=22.123456789F64'
        stb_name = input_sql.split(" ")[0]
        self.resCmp(input_sql, stb_name, ts_type=TDSmlTimestampType.SECOND.value)
        for ts in [1, 12, 123, 1234, 12345, 123456, 1234567, 12345678, 162600683, 16260068341, 162600683412, 16260068336401]:
            try:
                input_sql = f'{tdCom.getLongName(len=10, mode="letters")} {ts} 127 t0=127 t1=32767I16 t2=2147483647I32 t3=9223372036854775807 t4=11.12345027923584F32 t5=22.123456789F64'
                self._conn.schemaless_insert(input_sql, TDSmlProtocolType.TELNET.value, None)
                raise Exception("should not reach here")
            except SchemalessError as err:
                tdSql.checkNotEqual(err.errno, 0)
J
jiajingbin 已提交
408 409 410 411 412 413
    
    def idSeqCheckCase(self):
        """
            check id.index in tags
            eg: t0=**,id=**,t1=**
        """
J
jiajingbin 已提交
414
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
415 416 417 418
        tdCom.cleanTb()
        input_sql, stb_name = self.genFullTypeSql(id_change_tag=True)
        self.resCmp(input_sql, stb_name)
    
J
jiajingbin 已提交
419
    def idLetterCheckCase(self):
J
jiajingbin 已提交
420 421 422 423
        """
            check id param
            eg: id and ID
        """
J
jiajingbin 已提交
424
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
425 426 427
        tdCom.cleanTb()
        input_sql, stb_name = self.genFullTypeSql(id_upper_tag=True)
        self.resCmp(input_sql, stb_name)
J
jiajingbin 已提交
428 429
        input_sql, stb_name = self.genFullTypeSql(id_mixul_tag=True)
        self.resCmp(input_sql, stb_name)
J
jiajingbin 已提交
430 431 432 433 434 435 436
        input_sql, stb_name = self.genFullTypeSql(id_change_tag=True, id_upper_tag=True)
        self.resCmp(input_sql, stb_name)

    def noIdCheckCase(self):
        """
            id not exist
        """
J
jiajingbin 已提交
437
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
438 439 440 441 442 443 444 445 446 447 448 449 450 451
        tdCom.cleanTb()
        input_sql, stb_name = self.genFullTypeSql(id_noexist_tag=True)
        self.resCmp(input_sql, stb_name)
        query_sql = f"select tbname from {stb_name}"
        res_row_list = self.resHandle(query_sql, True)[0]
        if len(res_row_list[0][0]) > 0:
            tdSql.checkColNameList(res_row_list, res_row_list)
        else:
            tdSql.checkColNameList(res_row_list, "please check noIdCheckCase")

    def maxColTagCheckCase(self):
        """
            max tag count is 128
        """
J
jiajingbin 已提交
452
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
453 454
        for input_sql in [self.genLongSql(128)[0]]:
            tdCom.cleanTb()
J
jiajingbin 已提交
455
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
J
jiajingbin 已提交
456 457 458
        for input_sql in [self.genLongSql(129)[0]]:
            tdCom.cleanTb()
            try:
J
jiajingbin 已提交
459
                self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
460
                raise Exception("should not reach here")
461
            except SchemalessError as err:
462 463
                tdSql.checkNotEqual(err.errno, 0)

J
jiajingbin 已提交
464
    def stbTbNameCheckCase(self):
J
jiajingbin 已提交
465 466
        """
            test illegal id name
467
            mix "`~!@#$¥%^&*()-+{}|[]、「」【】:;《》<>?"
J
jiajingbin 已提交
468
        """
J
jiajingbin 已提交
469
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
470
        tdCom.cleanTb()
471
        rstr = list("~!@#$¥%^&*()-+{}|[]、「」【】:;《》<>?")
J
jiajingbin 已提交
472
        for i in rstr:
J
jiajingbin 已提交
473 474 475
            input_sql, stb_name = self.genFullTypeSql(tb_name=f"\"aaa{i}bbb\"")
            self.resCmp(input_sql, f'`{stb_name}`')
            tdSql.execute(f'drop table if exists `{stb_name}`')
J
jiajingbin 已提交
476 477 478 479 480

    def idStartWithNumCheckCase(self):
        """
            id is start with num
        """
J
jiajingbin 已提交
481
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
482
        tdCom.cleanTb()
J
jiajingbin 已提交
483 484
        input_sql, stb_name = self.genFullTypeSql(tb_name="1aaabbb")
        self.resCmp(input_sql, stb_name)
J
jiajingbin 已提交
485 486 487 488 489

    def nowTsCheckCase(self):
        """
            check now unsupported
        """
J
jiajingbin 已提交
490
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
491 492 493
        tdCom.cleanTb()
        input_sql = self.genFullTypeSql(ts="now")[0]
        try:
J
jiajingbin 已提交
494
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
495
            raise Exception("should not reach here")
496
        except SchemalessError as err:
497
            tdSql.checkNotEqual(err.errno, 0)
J
jiajingbin 已提交
498 499 500 501 502

    def dateFormatTsCheckCase(self):
        """
            check date format ts unsupported
        """
J
jiajingbin 已提交
503
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
504 505 506
        tdCom.cleanTb()
        input_sql = self.genFullTypeSql(ts="2021-07-21\ 19:01:46.920")[0]
        try:
J
jiajingbin 已提交
507
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
508
            raise Exception("should not reach here")
509
        except SchemalessError as err:
510
            tdSql.checkNotEqual(err.errno, 0)
J
jiajingbin 已提交
511 512 513 514 515
    
    def illegalTsCheckCase(self):
        """
            check ts format like 16260068336390us19
        """
J
jiajingbin 已提交
516
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
517 518 519
        tdCom.cleanTb()
        input_sql = self.genFullTypeSql(ts="16260068336390us19")[0]
        try:
J
jiajingbin 已提交
520
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
521
            raise Exception("should not reach here")
522
        except SchemalessError as err:
523
            tdSql.checkNotEqual(err.errno, 0)
J
jiajingbin 已提交
524

J
jiajingbin 已提交
525
    def tbnameCheckCase(self):
J
jiajingbin 已提交
526
        """
J
jiajingbin 已提交
527 528 529 530
            check length 192
            check upper tbname
            chech upper tag
            length of stb_name tb_name <= 192
J
jiajingbin 已提交
531
        """
J
jiajingbin 已提交
532
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
533 534
        stb_name_192 = tdCom.getLongName(len=192, mode="letters")
        tb_name_192 = tdCom.getLongName(len=192, mode="letters")
J
jiajingbin 已提交
535
        tdCom.cleanTb()
J
jiajingbin 已提交
536 537 538 539
        input_sql, stb_name = self.genFullTypeSql(stb_name=stb_name_192, tb_name=tb_name_192)
        self.resCmp(input_sql, stb_name)
        tdSql.query(f'select * from {stb_name}')
        tdSql.checkRows(1)
540 541 542 543 544 545 546 547 548 549
        if self.smlChildTableName_value == "ID":
            for input_sql in [self.genFullTypeSql(stb_name=tdCom.getLongName(len=193, mode="letters"), tb_name=tdCom.getLongName(len=5, mode="letters"))[0], self.genFullTypeSql(tb_name=tdCom.getLongName(len=193, mode="letters"))[0]]:
                try:
                    self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
                    raise Exception("should not reach here")
                except SchemalessError as err:
                    tdSql.checkNotEqual(err.errno, 0)
            input_sql = 'Abcdffgg 1626006833640 False T1=127i8 id=Abcddd'
        else:
            input_sql = self.genFullTypeSql(stb_name=tdCom.getLongName(len=193, mode="letters"), tb_name=tdCom.getLongName(len=5, mode="letters"))[0]
J
jiajingbin 已提交
550
            try:
J
jiajingbin 已提交
551
                self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
J
jiajingbin 已提交
552
                raise Exception("should not reach here")
553
            except SchemalessError as err:
J
jiajingbin 已提交
554
                tdSql.checkNotEqual(err.errno, 0)
555 556
            input_sql = 'Abcdffgg 1626006833640 False T1=127i8'
        stb_name = f'`{input_sql.split(" ")[0]}`'
J
jiajingbin 已提交
557
        self.resCmp(input_sql, stb_name)
558
        tdSql.execute('drop table `Abcdffgg`')
J
jiajingbin 已提交
559

J
jiajingbin 已提交
560 561
    def tagNameLengthCheckCase(self):
        """
J
jiajingbin 已提交
562
            check tag name limit <= 62
J
jiajingbin 已提交
563
        """
J
jiajingbin 已提交
564
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
565
        tdCom.cleanTb()
J
jiajingbin 已提交
566
        tag_name = tdCom.getLongName(61, "letters")
J
jiajingbin 已提交
567
        tag_name = f'T{tag_name}'
J
jiajingbin 已提交
568
        stb_name = tdCom.getLongName(7, "letters")
J
jiajingbin 已提交
569 570 571
        input_sql = f'{stb_name} 1626006833640 L"bcdaaa" {tag_name}=f'
        self.resCmp(input_sql, stb_name)
        input_sql = f'{stb_name} 1626006833640 L"gggcdaaa" {tdCom.getLongName(65, "letters")}=f'
J
jiajingbin 已提交
572
        try:
J
jiajingbin 已提交
573
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
J
jiajingbin 已提交
574
            raise Exception("should not reach here")
575
        except SchemalessError as err:
J
jiajingbin 已提交
576 577 578 579 580 581
            tdSql.checkNotEqual(err.errno, 0)   

    def tagValueLengthCheckCase(self):
        """
            check full type tag value limit
        """
J
jiajingbin 已提交
582
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
583
        tdCom.cleanTb()
J
jiajingbin 已提交
584 585 586
        # nchar
        # * legal nchar could not be larger than 16374/4
        stb_name = tdCom.getLongName(7, "letters")
J
jiajingbin 已提交
587 588
        input_sql = f'{stb_name} 1626006833640 t t0=t t1={tdCom.getLongName(4093, "letters")}'
        self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
J
jiajingbin 已提交
589

J
jiajingbin 已提交
590
        input_sql = f'{stb_name} 1626006833640 t t0=t t1={tdCom.getLongName(4094, "letters")}'
J
jiajingbin 已提交
591
        try:
J
jiajingbin 已提交
592
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
J
jiajingbin 已提交
593
            raise Exception("should not reach here")
594
        except SchemalessError as err:
J
jiajingbin 已提交
595 596 597 598 599 600
            tdSql.checkNotEqual(err.errno, 0)

    def colValueLengthCheckCase(self):
        """
            check full type col value limit
        """
J
jiajingbin 已提交
601
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
602 603
        tdCom.cleanTb()
        # i8
604 605
        for value in ["-127i8", "127i8"]:
            input_sql, stb_name = self.genFullTypeSql(value=value)
J
jiajingbin 已提交
606
            self.resCmp(input_sql, stb_name)
607 608 609
        tdCom.cleanTb()
        for value in ["-128i8", "128i8"]:
            input_sql = self.genFullTypeSql(value=value)[0]
J
jiajingbin 已提交
610
            try:
J
jiajingbin 已提交
611
                self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
J
jiajingbin 已提交
612
                raise Exception("should not reach here")
613
            except SchemalessError as err:
J
jiajingbin 已提交
614 615
                tdSql.checkNotEqual(err.errno, 0)
        # i16
616 617 618
        tdCom.cleanTb()
        for value in ["-32767i16"]:
            input_sql, stb_name = self.genFullTypeSql(value=value)
J
jiajingbin 已提交
619
            self.resCmp(input_sql, stb_name)
620 621 622
        tdCom.cleanTb()
        for value in ["-32768i16", "32768i16"]:
            input_sql = self.genFullTypeSql(value=value)[0]
J
jiajingbin 已提交
623
            try:
J
jiajingbin 已提交
624
                self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
J
jiajingbin 已提交
625
                raise Exception("should not reach here")
626
            except SchemalessError as err:
J
jiajingbin 已提交
627 628 629
                tdSql.checkNotEqual(err.errno, 0)

        # i32
630 631 632
        tdCom.cleanTb()
        for value in ["-2147483647i32"]:
            input_sql, stb_name = self.genFullTypeSql(value=value)
J
jiajingbin 已提交
633
            self.resCmp(input_sql, stb_name)
634 635 636
        tdCom.cleanTb()
        for value in ["-2147483648i32", "2147483648i32"]:
            input_sql = self.genFullTypeSql(value=value)[0]
J
jiajingbin 已提交
637
            try:
J
jiajingbin 已提交
638
                self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
J
jiajingbin 已提交
639
                raise Exception("should not reach here")
640
            except SchemalessError as err:
J
jiajingbin 已提交
641 642 643
                tdSql.checkNotEqual(err.errno, 0)

        # i64
644 645 646
        tdCom.cleanTb()
        for value in ["-9223372036854775807i64"]:
            input_sql, stb_name = self.genFullTypeSql(value=value)
J
jiajingbin 已提交
647
            self.resCmp(input_sql, stb_name)
648 649 650
        tdCom.cleanTb()
        for value in ["-9223372036854775808i64", "9223372036854775808i64"]:
            input_sql = self.genFullTypeSql(value=value)[0]
J
jiajingbin 已提交
651
            try:
J
jiajingbin 已提交
652
                self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
J
jiajingbin 已提交
653
                raise Exception("should not reach here")
654
            except SchemalessError as err:
J
jiajingbin 已提交
655 656 657
                tdSql.checkNotEqual(err.errno, 0)

        # f32       
658 659 660
        tdCom.cleanTb()
        for value in [f"{-3.4028234663852885981170418348451692544*(10**38)}f32", f"{3.4028234663852885981170418348451692544*(10**38)}f32"]:
            input_sql, stb_name = self.genFullTypeSql(value=value)
J
jiajingbin 已提交
661 662
            self.resCmp(input_sql, stb_name)
        # * limit set to 4028234664*(10**38)
663 664 665
        tdCom.cleanTb()
        for value in [f"{-3.4028234664*(10**38)}f32", f"{3.4028234664*(10**38)}f32"]:
            input_sql = self.genFullTypeSql(value=value)[0]
J
jiajingbin 已提交
666
            try:
J
jiajingbin 已提交
667
                self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
J
jiajingbin 已提交
668
                raise Exception("should not reach here")
669
            except SchemalessError as err:
J
jiajingbin 已提交
670 671 672
                tdSql.checkNotEqual(err.errno, 0)

        # f64
673 674 675
        tdCom.cleanTb()
        for value in [f'{-1.79769313486231570814527423731704356798070567525844996598917476803157260780*(10**308)}f64', f'{-1.79769313486231570814527423731704356798070567525844996598917476803157260780*(10**308)}f64']:
            input_sql, stb_name = self.genFullTypeSql(value=value)
J
jiajingbin 已提交
676 677
            self.resCmp(input_sql, stb_name)
        # * limit set to 1.797693134862316*(10**308)
678 679 680
        tdCom.cleanTb()
        for value in [f'{-1.797693134862316*(10**308)}f64', f'{-1.797693134862316*(10**308)}f64']:
            input_sql = self.genFullTypeSql(value=value)[0]
J
jiajingbin 已提交
681
            try:
J
jiajingbin 已提交
682
                self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
J
jiajingbin 已提交
683
                raise Exception("should not reach here")
684
            except SchemalessError as err:
J
jiajingbin 已提交
685 686 687
                tdSql.checkNotEqual(err.errno, 0)

        # # binary 
688
        tdCom.cleanTb()
J
jiajingbin 已提交
689
        stb_name = tdCom.getLongName(7, "letters")
J
jiajingbin 已提交
690 691
        input_sql = f'{stb_name} 1626006833640 "{tdCom.getLongName(16374, "letters")}" t0=t'
        self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
J
jiajingbin 已提交
692
        
693
        tdCom.cleanTb()
J
jiajingbin 已提交
694
        input_sql = f'{stb_name} 1626006833640 "{tdCom.getLongName(16375, "letters")}" t0=t'
J
jiajingbin 已提交
695
        try:
J
jiajingbin 已提交
696
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
J
jiajingbin 已提交
697
            raise Exception("should not reach here")
698
        except SchemalessError as err:
J
jiajingbin 已提交
699 700 701 702
            tdSql.checkNotEqual(err.errno, 0)

        # nchar
        # * legal nchar could not be larger than 16374/4
703
        tdCom.cleanTb()
J
jiajingbin 已提交
704
        stb_name = tdCom.getLongName(7, "letters")
J
jiajingbin 已提交
705 706
        input_sql = f'{stb_name} 1626006833640 L"{tdCom.getLongName(4093, "letters")}" t0=t'
        self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
J
jiajingbin 已提交
707

708
        tdCom.cleanTb()
J
jiajingbin 已提交
709
        input_sql = f'{stb_name} 1626006833640 L"{tdCom.getLongName(4094, "letters")}" t0=t'
J
jiajingbin 已提交
710
        try:
J
jiajingbin 已提交
711
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
J
jiajingbin 已提交
712
            raise Exception("should not reach here")
713
        except SchemalessError as err:
J
jiajingbin 已提交
714 715 716 717 718 719 720
            tdSql.checkNotEqual(err.errno, 0)

    def tagColIllegalValueCheckCase(self):

        """
            test illegal tag col value
        """
J
jiajingbin 已提交
721
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
722 723 724
        tdCom.cleanTb()
        # bool
        for i in ["TrUe", "tRue", "trUe", "truE", "FalsE", "fAlse", "faLse", "falSe", "falsE"]:
725 726 727 728
            input_sql1, stb_name = self.genFullTypeSql(t0=i)
            self.resCmp(input_sql1, stb_name)
            input_sql2, stb_name = self.genFullTypeSql(value=i)
            self.resCmp(input_sql2, stb_name)
J
jiajingbin 已提交
729 730 731

        # i8 i16 i32 i64 f32 f64
        for input_sql in [
J
jiajingbin 已提交
732 733 734 735 736 737
                self.genFullTypeSql(value="1s2i8")[0], 
                self.genFullTypeSql(value="1s2i16")[0],
                self.genFullTypeSql(value="1s2i32")[0],
                self.genFullTypeSql(value="1s2i64")[0],
                self.genFullTypeSql(value="11.1s45f32")[0],
                self.genFullTypeSql(value="11.1s45f64")[0], 
J
jiajingbin 已提交
738 739
            ]:
            try:
J
jiajingbin 已提交
740
                self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
741
                raise Exception("should not reach here")
742
            except SchemalessError as err:
743
                tdSql.checkNotEqual(err.errno, 0)
J
jiajingbin 已提交
744 745 746 747

        # check accepted binary and nchar symbols 
        # # * ~!@#$¥%^&*()-+={}|[]、「」:;
        for symbol in list('~!@#$¥%^&*()-+={}|[]、「」:;'):
J
jiajingbin 已提交
748 749 750 751
            input_sql1 = f'{tdCom.getLongName(7, "letters")} 1626006833640 "abc{symbol}aaa" t0=t'
            input_sql2 = f'{tdCom.getLongName(7, "letters")} 1626006833640 t t0=t t1="abc{symbol}aaa"'
            self._conn.schemaless_insert([input_sql1], TDSmlProtocolType.TELNET.value, None)
            self._conn.schemaless_insert([input_sql2], TDSmlProtocolType.TELNET.value, None)
752 753 754 755 756
    
    def blankCheckCase(self):
        '''
            check blank case
        '''
J
jiajingbin 已提交
757
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
758
        tdCom.cleanTb()
J
jiajingbin 已提交
759 760 761 762
        input_sql_list = [f'{tdCom.getLongName(7, "letters")}   1626006833640 "abc aaa" t0=t',
                        f'{tdCom.getLongName(7, "letters")} 1626006833640   t t0="abaaa"',
                        f'{tdCom.getLongName(7, "letters")} 1626006833640 t   t0=L"abaaa"',
                        f'{tdCom.getLongName(7, "letters")}  1626006833640   L"aba aa"   t0=L"abcaaa3"   ']
763
        for input_sql in input_sql_list:
J
jiajingbin 已提交
764 765 766 767
            stb_name = input_sql.split(" ")[0]
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
            tdSql.query(f'select * from {stb_name}')
            tdSql.checkRows(1)
J
jiajingbin 已提交
768 769 770 771 772

    def duplicateIdTagColInsertCheckCase(self):
        """
            check duplicate Id Tag Col
        """
J
jiajingbin 已提交
773
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
774 775 776
        tdCom.cleanTb()
        input_sql_id = self.genFullTypeSql(id_double_tag=True)[0]
        try:
J
jiajingbin 已提交
777
            self._conn.schemaless_insert([input_sql_id], TDSmlProtocolType.TELNET.value, None)
J
jiajingbin 已提交
778
            raise Exception("should not reach here")
779
        except SchemalessError as err:
J
jiajingbin 已提交
780 781 782 783 784
            tdSql.checkNotEqual(err.errno, 0)

        input_sql = self.genFullTypeSql()[0]
        input_sql_tag = input_sql.replace("t5", "t6")
        try:
J
jiajingbin 已提交
785
            self._conn.schemaless_insert([input_sql_tag], TDSmlProtocolType.TELNET.value, None)
J
jiajingbin 已提交
786
            raise Exception("should not reach here")
787
        except SchemalessError as err:
J
jiajingbin 已提交
788 789 790
            tdSql.checkNotEqual(err.errno, 0)

    ##### stb exist #####
791
    @tdCom.smlPass
J
jiajingbin 已提交
792 793 794 795
    def noIdStbExistCheckCase(self):
        """
            case no id when stb exist
        """
J
jiajingbin 已提交
796
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
797 798 799 800 801 802 803 804 805 806 807 808
        tdCom.cleanTb()
        input_sql, stb_name = self.genFullTypeSql(tb_name="sub_table_0123456", t0="f", value="f")
        self.resCmp(input_sql, stb_name)
        input_sql, stb_name = self.genFullTypeSql(stb_name=stb_name, id_noexist_tag=True, t0="f", value="f")
        self.resCmp(input_sql, stb_name, condition='where tbname like "t_%"')
        tdSql.query(f"select * from {stb_name}")
        tdSql.checkRows(2)

    def duplicateInsertExistCheckCase(self):
        """
            check duplicate insert when stb exist
        """
J
jiajingbin 已提交
809
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
810 811 812
        tdCom.cleanTb()
        input_sql, stb_name = self.genFullTypeSql()
        self.resCmp(input_sql, stb_name)
J
jiajingbin 已提交
813
        self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
J
jiajingbin 已提交
814 815
        self.resCmp(input_sql, stb_name)

816
    @tdCom.smlPass
J
jiajingbin 已提交
817 818 819 820
    def tagColBinaryNcharLengthCheckCase(self):
        """
            check length increase
        """
J
jiajingbin 已提交
821
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
822 823 824 825
        tdCom.cleanTb()
        input_sql, stb_name = self.genFullTypeSql()
        self.resCmp(input_sql, stb_name)
        tb_name = tdCom.getLongName(5, "letters")
826
        input_sql, stb_name = self.genFullTypeSql(stb_name=stb_name, tb_name=tb_name,t7="\"binaryTagValuebinaryTagValue\"", t8="L\"ncharTagValuencharTagValue\"")
J
jiajingbin 已提交
827 828
        self.resCmp(input_sql, stb_name, condition=f'where tbname like "{tb_name}"')

829
    @tdCom.smlPass
J
jiajingbin 已提交
830 831
    def tagColAddDupIDCheckCase(self):
        """
832
            check tag count add, stb and tb duplicate
J
jiajingbin 已提交
833 834 835 836 837 838
            * tag: alter table ...
            * col: when update==0 and ts is same, unchange
            * so this case tag&&value will be added, 
            * col is added without value when update==0
            * col is added with value when update==1
        """
J
jiajingbin 已提交
839
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
840 841 842 843 844
        tdCom.cleanTb()
        tb_name = tdCom.getLongName(7, "letters")
        for db_update_tag in [0, 1]:
            if db_update_tag == 1 :
                self.createDb("test_update", db_update_tag=db_update_tag)
J
jiajingbin 已提交
845
            input_sql, stb_name = self.genFullTypeSql(tb_name=tb_name, t0="t", value="t")
J
jiajingbin 已提交
846
            self.resCmp(input_sql, stb_name)
J
jiajingbin 已提交
847
            input_sql, stb_name = self.genFullTypeSql(stb_name=stb_name, tb_name=tb_name, t0="t", value="f", t_add_tag=True)
J
jiajingbin 已提交
848 849
            if db_update_tag == 1 :
                self.resCmp(input_sql, stb_name, condition=f'where tbname like "{tb_name}"', none_check_tag=True)
J
jiajingbin 已提交
850 851 852 853 854 855 856 857 858
                tdSql.query(f'select * from {stb_name} where tbname like "{tb_name}"')
                tdSql.checkData(0, 11, None)  
                tdSql.checkData(0, 12, None)  
            else:
                self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
                tdSql.query(f'select * from {stb_name} where tbname like "{tb_name}"')
                tdSql.checkData(0, 1, True)  
                tdSql.checkData(0, 11, None)  
                tdSql.checkData(0, 12, None)  
859
            self.createDb()
J
jiajingbin 已提交
860

861
    @tdCom.smlPass
J
jiajingbin 已提交
862 863
    def tagColAddCheckCase(self):
        """
864
            check tag count add
J
jiajingbin 已提交
865
        """
J
jiajingbin 已提交
866
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
867 868 869 870 871
        tdCom.cleanTb()
        tb_name = tdCom.getLongName(7, "letters")
        input_sql, stb_name = self.genFullTypeSql(tb_name=tb_name, t0="f", value="f")
        self.resCmp(input_sql, stb_name)
        tb_name_1 = tdCom.getLongName(7, "letters")
872
        input_sql, stb_name = self.genFullTypeSql(stb_name=stb_name, tb_name=tb_name_1, t0="f", value="f", t_add_tag=True)
J
jiajingbin 已提交
873
        self.resCmp(input_sql, stb_name, condition=f'where tbname like "{tb_name_1}"')
874 875
        res_row_list = self.resHandle(f"select t10,t11 from {tb_name}", True)[0]
        tdSql.checkEqual(res_row_list[0], ['None', 'None'])
J
jiajingbin 已提交
876 877 878 879 880 881 882
        self.resCmp(input_sql, stb_name, condition=f'where tbname like "{tb_name}"', none_check_tag=True)

    def tagMd5Check(self):
        """
            condition: stb not change
            insert two table, keep tag unchange, change col
        """
J
jiajingbin 已提交
883
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
884 885 886 887 888 889 890 891 892 893
        tdCom.cleanTb()
        input_sql, stb_name = self.genFullTypeSql(t0="f", value="f", id_noexist_tag=True)
        self.resCmp(input_sql, stb_name)
        tb_name1 = self.getNoIdTbName(stb_name)
        input_sql, stb_name = self.genFullTypeSql(stb_name=stb_name, t0="f", value="f", id_noexist_tag=True)
        self.resCmp(input_sql, stb_name)
        tb_name2 = self.getNoIdTbName(stb_name)
        tdSql.query(f"select * from {stb_name}")
        tdSql.checkRows(1)
        tdSql.checkEqual(tb_name1, tb_name2)
894
        input_sql, stb_name = self.genFullTypeSql(stb_name=stb_name, t0="f", value="f", id_noexist_tag=True, t_add_tag=True)
J
jiajingbin 已提交
895
        self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
J
jiajingbin 已提交
896 897 898 899 900 901 902 903 904 905
        tb_name3 = self.getNoIdTbName(stb_name)
        tdSql.query(f"select * from {stb_name}")
        tdSql.checkRows(2)
        tdSql.checkNotEqual(tb_name1, tb_name3)

    # * tag nchar max is 16374/4, col+ts nchar max  49151
    def tagColNcharMaxLengthCheckCase(self):
        """
            check nchar length limit
        """
J
jiajingbin 已提交
906
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
907 908
        tdCom.cleanTb()
        stb_name = tdCom.getLongName(7, "letters")
909
        input_sql = f'{stb_name} 1626006833640 f t2={tdCom.getLongName(1, "letters")}'
J
jiajingbin 已提交
910
        self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
J
jiajingbin 已提交
911 912

        # * legal nchar could not be larger than 16374/4
J
jiajingbin 已提交
913 914
        input_sql = f'{stb_name} 1626006833640 f t1={tdCom.getLongName(4093, "letters")} t2={tdCom.getLongName(1, "letters")}'
        self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
J
jiajingbin 已提交
915 916
        tdSql.query(f"select * from {stb_name}")
        tdSql.checkRows(2)
J
jiajingbin 已提交
917
        input_sql = f'{stb_name} 1626006833640 f t1={tdCom.getLongName(4093, "letters")} t2={tdCom.getLongName(2, "letters")}'
J
jiajingbin 已提交
918
        try:
J
jiajingbin 已提交
919
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
J
jiajingbin 已提交
920
            raise Exception("should not reach here")
921
        except SchemalessError as err:
J
jiajingbin 已提交
922 923 924 925 926 927 928 929
            tdSql.checkNotEqual(err.errno, 0)
        tdSql.query(f"select * from {stb_name}")
        tdSql.checkRows(2)

    def batchInsertCheckCase(self):
        """
            test batch insert
        """
J
jiajingbin 已提交
930
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
931 932 933
        tdCom.cleanTb()
        stb_name = tdCom.getLongName(8, "letters")
        tdSql.execute(f'create stable {stb_name}(ts timestamp, f int) tags(t1 bigint)')
934
        
J
jiajingbin 已提交
935 936 937 938 939 940 941 942 943
        lines = ["st123456 1626006833640 1i64 t1=3i64 t2=4f64 t3=\"t3\"",
                "st123456 1626006833641 2i64 t1=4i64 t3=\"t4\" t2=5f64 t4=5f64",
                f'{stb_name} 1626006833642 3i64 t2=5f64 t3=L\"ste\"',
                "stf567890 1626006833643 4i64 t1=4i64 t3=\"t4\" t2=5f64 t4=5f64",
                "st123456 1626006833644 5i64 t1=4i64 t2=5f64 t3=\"t4\"",
                f'{stb_name} 1626006833645 6i64 t2=5f64 t3=L\"ste2\"',
                f'{stb_name} 1626006833646 7i64 t2=5f64 t3=L\"ste2\"',
                "st123456 1626006833647 8i64 t1=4i64 t3=\"t4\" t2=5f64 t4=5f64",
                "st123456 1626006833648 9i64 t1=4i64 t3=\"t4\" t2=5f64 t4=5f64"
J
jiajingbin 已提交
944
                ]
J
jiajingbin 已提交
945
        self._conn.schemaless_insert(lines, TDSmlProtocolType.TELNET.value, None)
946 947 948 949 950 951
        tdSql.query('show stables')
        tdSql.checkRows(3)
        tdSql.query('show tables')
        tdSql.checkRows(6)
        tdSql.query('select * from st123456')
        tdSql.checkRows(5)
J
jiajingbin 已提交
952 953
    
    def multiInsertCheckCase(self, count):
J
jiajingbin 已提交
954 955 956
        """
            test multi insert
        """
J
jiajingbin 已提交
957
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
958 959 960 961 962 963 964 965 966 967
        tdCom.cleanTb()
        sql_list = []
        stb_name = tdCom.getLongName(8, "letters")
        tdSql.execute(f'create stable {stb_name}(ts timestamp, f int) tags(t1 nchar(10))')
        for i in range(count):
            input_sql = self.genFullTypeSql(stb_name=stb_name, t7=f'"{tdCom.getLongName(8, "letters")}"', value=f'"{tdCom.getLongName(8, "letters")}"', id_noexist_tag=True)[0]
            sql_list.append(input_sql)
        self._conn.schemaless_insert(sql_list, TDSmlProtocolType.TELNET.value, None)
        tdSql.query('show tables')
        tdSql.checkRows(count)
J
jiajingbin 已提交
968 969 970 971 972

    def batchErrorInsertCheckCase(self):
        """
            test batch error insert
        """
J
jiajingbin 已提交
973
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
974 975
        tdCom.cleanTb()
        stb_name = tdCom.getLongName(8, "letters")
J
jiajingbin 已提交
976
        lines = ["st123456 1626006833640 3i 64 t1=3i64 t2=4f64 t3=\"t3\"",
977
                f"{stb_name} 1626056811823316532ns tRue t2=5f64 t3=L\"ste\""]
J
jiajingbin 已提交
978
        try:
J
jiajingbin 已提交
979
            self._conn.schemaless_insert(lines, TDSmlProtocolType.TELNET.value, None)
J
jiajingbin 已提交
980
            raise Exception("should not reach here")
981
        except SchemalessError as err:
J
jiajingbin 已提交
982 983
            tdSql.checkNotEqual(err.errno, 0)

984 985 986 987
    def multiColsInsertCheckCase(self):
        """
            test multi cols insert
        """
J
jiajingbin 已提交
988
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
989
        tdCom.cleanTb()
J
jiajingbin 已提交
990
        input_sql = self.genFullTypeSql(c_multi_tag=True)[0]
991
        try:
J
jiajingbin 已提交
992
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
993
            raise Exception("should not reach here")
994
        except SchemalessError as err:
995 996 997 998 999 1000
            tdSql.checkNotEqual(err.errno, 0)
    
    def blankColInsertCheckCase(self):
        """
            test blank col insert
        """
J
jiajingbin 已提交
1001
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
1002 1003 1004
        tdCom.cleanTb()
        input_sql = self.genFullTypeSql(c_blank_tag=True)[0]
        try:
J
jiajingbin 已提交
1005
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
1006
            raise Exception("should not reach here")
1007
        except SchemalessError as err:
1008 1009 1010 1011 1012 1013
            tdSql.checkNotEqual(err.errno, 0)

    def blankTagInsertCheckCase(self):
        """
            test blank tag insert
        """
J
jiajingbin 已提交
1014
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
1015 1016 1017
        tdCom.cleanTb()
        input_sql = self.genFullTypeSql(t_blank_tag=True)[0]
        try:
J
jiajingbin 已提交
1018
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
1019
            raise Exception("should not reach here")
1020
        except SchemalessError as err:
1021 1022 1023 1024 1025 1026
            tdSql.checkNotEqual(err.errno, 0)
    
    def chineseCheckCase(self):
        """
            check nchar ---> chinese
        """
J
jiajingbin 已提交
1027
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
1028 1029 1030 1031 1032 1033 1034 1035
        tdCom.cleanTb()
        input_sql, stb_name = self.genFullTypeSql(chinese_tag=True)
        self.resCmp(input_sql, stb_name)

    def multiFieldCheckCase(self):
        '''
            multi_field
        '''
J
jiajingbin 已提交
1036
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
1037 1038 1039
        tdCom.cleanTb()
        input_sql = self.genFullTypeSql(multi_field_tag=True)[0]
        try:
J
jiajingbin 已提交
1040
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
1041
            raise Exception("should not reach here")
1042
        except SchemalessError as err:
1043 1044
            tdSql.checkNotEqual(err.errno, 0)

J
jiajingbin 已提交
1045
    def spellCheckCase(self):
J
jiajingbin 已提交
1046 1047
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
        tdCom.cleanTb()
J
jiajingbin 已提交
1048
        stb_name = tdCom.getLongName(8, "letters")
J
jiajingbin 已提交
1049 1050 1051 1052 1053 1054 1055 1056 1057 1058
        input_sql_list = [f'{stb_name}_1 1626006833640 127I8 t0=127I8 t1=32767I16 t2=2147483647I32 t3=9223372036854775807I64 t4=11.12345027923584F32 t5=22.123456789F64',
                            f'{stb_name}_2 1626006833640 32767I16 t0=127I8 t1=32767I16 t2=2147483647I32 t3=9223372036854775807I64 t4=11.12345027923584F32 t5=22.123456789F64',
                            f'{stb_name}_3 1626006833640 2147483647I32 t0=127I8 t1=32767I16 t2=2147483647I32 t3=9223372036854775807I64 t4=11.12345027923584F32 t5=22.123456789F64',
                            f'{stb_name}_4 1626006833640 9223372036854775807I64 t0=127I8 t1=32767I16 t2=2147483647I32 t3=9223372036854775807I64 t4=11.12345027923584F32 t5=22.123456789F64',
                            f'{stb_name}_5 1626006833640 11.12345027923584F32 t0=127I8 t1=32767I16 t2=2147483647I32 t3=9223372036854775807I64 t4=11.12345027923584F32 t5=22.123456789F64',
                            f'{stb_name}_6 1626006833640 22.123456789F64 t0=127I8 t1=32767I16 t2=2147483647I32 t3=9223372036854775807I64 t4=11.12345027923584F32 t5=22.123456789F64',
                            f'{stb_name}_7 1626006833640 22.123456789F64 t0=127I8 t1=32767I16 t2=2147483647I32 t3=9223372036854775807I64 t4=11.12345027923584F32 t5=22.123456789F64',
                            f'{stb_name}_8 1626006833640 22.123456789F64 t0=127I8 t1=32767I16 t2=2147483647I32 t3=9223372036854775807I64 t4=11.12345027923584F32 t5=22.123456789F64',
                            f'{stb_name}_9 1626006833640 22.123456789F64 t0=127I8 t1=32767I16 t2=2147483647I32 t3=9223372036854775807I64 t4=11.12345027923584F32 t5=22.123456789F64',
                            f'{stb_name}_10 1626006833640 22.123456789F64 t0=127I8 t1=32767I16 t2=2147483647I32 t3=9223372036854775807I64 t4=11.12345027923584F32 t5=22.123456789F64']
J
jiajingbin 已提交
1059
        for input_sql in input_sql_list:
J
jiajingbin 已提交
1060
            stb_name = input_sql.split(' ')[0]
1061 1062 1063 1064 1065 1066
            self.resCmp(input_sql, stb_name)

    def pointTransCheckCase(self):
        """
            metric value "." trans to "_"
        """
J
jiajingbin 已提交
1067
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
1068 1069
        tdCom.cleanTb()
        input_sql = self.genFullTypeSql(point_trans_tag=True)[0]
J
jiajingbin 已提交
1070
        stb_name = f'`{input_sql.split(" ")[0]}`'
1071
        self.resCmp(input_sql, stb_name)
J
jiajingbin 已提交
1072
        tdSql.execute("drop table `.point.trans.test`")
1073 1074

    def defaultTypeCheckCase(self):
J
jiajingbin 已提交
1075
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
1076
        tdCom.cleanTb()
1077
        stb_name = tdCom.getLongName(8, "letters")
J
jiajingbin 已提交
1078 1079 1080 1081 1082
        input_sql_list = [f'{stb_name}_1 1626006833640 9223372036854775807 t0=f t1=127 t2=32767i16 t3=2147483647i32 t4=9223372036854775807 t5=11.12345f32 t6=22.123456789f64 t7="vozamcts" t8=L"ncharTagValue"', \
                        f'{stb_name}_2 1626006833641 22.123456789 t0=f t1=127i8 t2=32767I16 t3=2147483647i32 t4=9223372036854775807i64 t5=11.12345f32 t6=22.123456789 t7="vozamcts" t8=L"ncharTagValue"', \
                        f'{stb_name}_3 1626006833642 10e5F32 t0=f t1=127i8 t2=32767I16 t3=2147483647i32 t4=9223372036854775807i64 t5=11.12345f32 t6=10e5F64 t7="vozamcts" t8=L"ncharTagValue"', \
                        f'{stb_name}_4 1626006833643 10.0e5F64 t0=f t1=127i8 t2=32767I16 t3=2147483647i32 t4=9223372036854775807i64 t5=11.12345f32 t6=10.0e5F32 t7="vozamcts" t8=L"ncharTagValue"', \
                        f'{stb_name}_5 1626006833644 -10.0e5 t0=f t1=127i8 t2=32767I16 t3=2147483647i32 t4=9223372036854775807i64 t5=11.12345f32 t6=-10.0e5 t7="vozamcts" t8=L"ncharTagValue"']
1083 1084 1085
        for input_sql in input_sql_list:
            stb_name = input_sql.split(" ")[0]
            self.resCmp(input_sql, stb_name)
J
jiajingbin 已提交
1086

J
jiajingbin 已提交
1087
    def tbnameTagsColsNameCheckCase(self):
J
jiajingbin 已提交
1088 1089
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
        tdCom.cleanTb()
1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107
        if self.smlChildTableName_value == "ID":
            input_sql = 'rFa$sta 1626006834 9223372036854775807 id=rFas$ta_1 Tt!0=true tT@1=127Ii8 t#2=32767i16 "t$3"=2147483647i32 t%4=9223372036854775807i64 t^5=11.12345f32 t&6=22.123456789f64 t*7=\"ddzhiksj\" t!@#$%^&*()_+[];:<>?,9=L\"ncharTagValue\"'
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
            query_sql = 'select * from `rFa$sta`'
            query_res = tdSql.query(query_sql, True)
            tdSql.checkEqual(query_res, [(datetime.datetime(2021, 7, 11, 20, 33, 54), 9.223372036854776e+18, 'true', '127Ii8', '32767i16', '2147483647i32', '9223372036854775807i64', '11.12345f32', '22.123456789f64', '"ddzhiksj"', 'L"ncharTagValue"')])
            col_tag_res = tdSql.getColNameList(query_sql)
            tdSql.checkEqual(col_tag_res, ['ts', 'value', 'tt!0', 'tt@1', 't#2', '"t$3"', 't%4', 't^5', 't&6', 't*7', 't!@#$%^&*()_+[];:<>?,9'])
            tdSql.execute('drop table `rFa$sta`')
        else:
            input_sql = 'rFa$sta 1626006834 9223372036854775807 Tt!0=true tT@1=127Ii8 t#2=32767i16 "t$3"=2147483647i32 t%4=9223372036854775807i64 t^5=11.12345f32 t&6=22.123456789f64 t*7=\"ddzhiksj\" t!@#$%^&*()_+[];:<>?,9=L\"ncharTagValue\"'
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
            query_sql = 'select * from `rFa$sta`'
            query_res = tdSql.query(query_sql, True)
            tdSql.checkEqual(query_res, [(datetime.datetime(2021, 7, 11, 20, 33, 54), 9.223372036854776e+18, '2147483647i32', 'L"ncharTagValue"', '32767i16', '9223372036854775807i64', '22.123456789f64', '"ddzhiksj"', '11.12345f32', 'true', '127Ii8')])
            col_tag_res = tdSql.getColNameList(query_sql)
            tdSql.checkEqual(col_tag_res, ['ts', 'value', '"t$3"', 't!@#$%^&*()_+[];:<>?,9', 't#2', 't%4', 't&6', 't*7', 't^5', 'Tt!0', 'tT@1'])
            tdSql.execute('drop table `rFa$sta`')
J
jiajingbin 已提交
1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121
    def genSqlList(self, count=5, stb_name="", tb_name=""):
        """
            stb --> supertable
            tb  --> table
            ts  --> timestamp, same default
            col --> column, same default
            tag --> tag, same default
            d   --> different
            s   --> same
            a   --> add
            m   --> minus
        """
        d_stb_d_tb_list = list()
        s_stb_s_tb_list = list()
1122 1123
        s_stb_s_tb_a_tag_list = list()
        s_stb_s_tb_m_tag_list = list()
J
jiajingbin 已提交
1124
        s_stb_d_tb_list = list()
1125 1126
        s_stb_d_tb_m_tag_list = list()
        s_stb_d_tb_a_tag_list = list()
J
jiajingbin 已提交
1127
        s_stb_s_tb_d_ts_list = list()
1128 1129
        s_stb_s_tb_d_ts_m_tag_list = list()
        s_stb_s_tb_d_ts_a_tag_list = list()
J
jiajingbin 已提交
1130
        s_stb_d_tb_d_ts_list = list()
1131 1132
        s_stb_d_tb_d_ts_m_tag_list = list()
        s_stb_d_tb_d_ts_a_tag_list = list()
J
jiajingbin 已提交
1133
        for i in range(count):
1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151
            d_stb_d_tb_list.append(self.genFullTypeSql(t0="f", value="f"))
            s_stb_s_tb_list.append(self.genFullTypeSql(stb_name=stb_name, tb_name=tb_name, t7=f'"{tdCom.getLongName(8, "letters")}"', value=f'"{tdCom.getLongName(8, "letters")}"'))
            s_stb_s_tb_a_tag_list.append(self.genFullTypeSql(stb_name=stb_name, tb_name=tb_name, t7=f'"{tdCom.getLongName(8, "letters")}"', value=f'"{tdCom.getLongName(8, "letters")}"', t_add_tag=True))
            s_stb_s_tb_m_tag_list.append(self.genFullTypeSql(stb_name=stb_name, tb_name=tb_name, t7=f'"{tdCom.getLongName(8, "letters")}"', value=f'"{tdCom.getLongName(8, "letters")}"', t_mul_tag=True))
            s_stb_d_tb_list.append(self.genFullTypeSql(stb_name=stb_name, t7=f'"{tdCom.getLongName(8, "letters")}"', value=f'"{tdCom.getLongName(8, "letters")}"', id_noexist_tag=True))
            s_stb_d_tb_m_tag_list.append(self.genFullTypeSql(stb_name=stb_name, t7=f'"{tdCom.getLongName(8, "letters")}"', value=f'"{tdCom.getLongName(8, "letters")}"', id_noexist_tag=True, t_mul_tag=True))
            s_stb_d_tb_a_tag_list.append(self.genFullTypeSql(stb_name=stb_name, t7=f'"{tdCom.getLongName(8, "letters")}"', value=f'"{tdCom.getLongName(8, "letters")}"', id_noexist_tag=True, t_add_tag=True))
            s_stb_s_tb_d_ts_list.append(self.genFullTypeSql(stb_name=stb_name, tb_name=tb_name, t7=f'"{tdCom.getLongName(8, "letters")}"', value=f'"{tdCom.getLongName(8, "letters")}"', ts=0))
            s_stb_s_tb_d_ts_m_tag_list.append(self.genFullTypeSql(stb_name=stb_name, tb_name=tb_name, t7=f'"{tdCom.getLongName(8, "letters")}"', value=f'"{tdCom.getLongName(8, "letters")}"', ts=0, t_mul_tag=True))
            s_stb_s_tb_d_ts_a_tag_list.append(self.genFullTypeSql(stb_name=stb_name, tb_name=tb_name, t7=f'"{tdCom.getLongName(8, "letters")}"', value=f'"{tdCom.getLongName(8, "letters")}"', ts=0, t_add_tag=True))
            s_stb_d_tb_d_ts_list.append(self.genFullTypeSql(stb_name=stb_name, t7=f'"{tdCom.getLongName(8, "letters")}"', value=f'"{tdCom.getLongName(8, "letters")}"', id_noexist_tag=True, ts=0))
            s_stb_d_tb_d_ts_m_tag_list.append(self.genFullTypeSql(stb_name=stb_name, t7=f'"{tdCom.getLongName(8, "letters")}"', value=f'"{tdCom.getLongName(8, "letters")}"', id_noexist_tag=True, ts=0, t_mul_tag=True))
            s_stb_d_tb_d_ts_a_tag_list.append(self.genFullTypeSql(stb_name=stb_name, t7=f'"{tdCom.getLongName(8, "letters")}"', value=f'"{tdCom.getLongName(8, "letters")}"', id_noexist_tag=True, ts=0, t_add_tag=True))

        return d_stb_d_tb_list, s_stb_s_tb_list, s_stb_s_tb_a_tag_list, s_stb_s_tb_m_tag_list, \
            s_stb_d_tb_list, s_stb_d_tb_m_tag_list, s_stb_d_tb_a_tag_list, s_stb_s_tb_d_ts_list, \
            s_stb_s_tb_d_ts_m_tag_list, s_stb_s_tb_d_ts_a_tag_list, s_stb_d_tb_d_ts_list, \
            s_stb_d_tb_d_ts_m_tag_list, s_stb_d_tb_d_ts_a_tag_list
J
jiajingbin 已提交
1152 1153 1154 1155 1156


    def genMultiThreadSeq(self, sql_list):
        tlist = list()
        for insert_sql in sql_list:
J
jiajingbin 已提交
1157
            t = threading.Thread(target=self._conn.schemaless_insert,args=([insert_sql[0]], TDSmlProtocolType.TELNET.value, None))
J
jiajingbin 已提交
1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170
            tlist.append(t)
        return tlist

    def multiThreadRun(self, tlist):
        for t in tlist:
            t.start()
        for t in tlist:
            t.join()

    def stbInsertMultiThreadCheckCase(self):
        """
            thread input different stb
        """
J
jiajingbin 已提交
1171
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
1172 1173 1174 1175 1176 1177 1178 1179 1180 1181
        tdCom.cleanTb()
        input_sql = self.genSqlList()[0]
        self.multiThreadRun(self.genMultiThreadSeq(input_sql))
        tdSql.query(f"show tables;")
        tdSql.checkRows(5)
    
    def sStbStbDdataInsertMultiThreadCheckCase(self):
        """
            thread input same stb tb, different data, result keep first data
        """
J
jiajingbin 已提交
1182
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
1183 1184
        tdCom.cleanTb()
        tb_name = tdCom.getLongName(7, "letters")
1185
        input_sql, stb_name = self.genFullTypeSql(tb_name=tb_name, value="\"binaryTagValue\"")
J
jiajingbin 已提交
1186 1187 1188 1189
        self.resCmp(input_sql, stb_name)
        s_stb_s_tb_list = self.genSqlList(stb_name=stb_name, tb_name=tb_name)[1]
        self.multiThreadRun(self.genMultiThreadSeq(s_stb_s_tb_list))
        tdSql.query(f"show tables;")
1190 1191 1192 1193
        tdSql.checkRows(1) if self.smlChildTableName_value == "ID" else tdSql.checkRows(6)
        if self.smlChildTableName_value == "ID":
            expected_tb_name = self.getNoIdTbName(stb_name)[0]
            tdSql.checkEqual(tb_name, expected_tb_name)
J
jiajingbin 已提交
1194
        tdSql.query(f"select * from {stb_name};")
1195
        tdSql.checkRows(1) if self.smlChildTableName_value == "ID" else tdSql.checkRows(6)
J
jiajingbin 已提交
1196

1197
    def sStbStbDdataAtInsertMultiThreadCheckCase(self):
J
jiajingbin 已提交
1198 1199 1200
        """
            thread input same stb tb, different data, add columes and tags,  result keep first data
        """
J
jiajingbin 已提交
1201
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
1202 1203
        tdCom.cleanTb()
        tb_name = tdCom.getLongName(7, "letters")
1204
        input_sql, stb_name = self.genFullTypeSql(tb_name=tb_name, value="\"binaryTagValue\"")
J
jiajingbin 已提交
1205
        self.resCmp(input_sql, stb_name)
1206 1207
        s_stb_s_tb_a_tag_list = self.genSqlList(stb_name=stb_name, tb_name=tb_name)[2]
        self.multiThreadRun(self.genMultiThreadSeq(s_stb_s_tb_a_tag_list))
J
jiajingbin 已提交
1208
        tdSql.query(f"show tables;")
1209 1210 1211 1212
        tdSql.checkRows(1) if self.smlChildTableName_value == "ID" else tdSql.checkRows(6)
        if self.smlChildTableName_value == "ID":
            expected_tb_name = self.getNoIdTbName(stb_name)[0]
            tdSql.checkEqual(tb_name, expected_tb_name)
J
jiajingbin 已提交
1213
        tdSql.query(f"select * from {stb_name};")
1214
        tdSql.checkRows(1) if self.smlChildTableName_value == "ID" else tdSql.checkRows(6)
J
jiajingbin 已提交
1215
    
1216
    def sStbStbDdataMtInsertMultiThreadCheckCase(self):
J
jiajingbin 已提交
1217 1218 1219
        """
            thread input same stb tb, different data, minus columes and tags,  result keep first data
        """
J
jiajingbin 已提交
1220
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
1221 1222
        tdCom.cleanTb()
        tb_name = tdCom.getLongName(7, "letters")
1223
        input_sql, stb_name = self.genFullTypeSql(tb_name=tb_name, value="\"binaryTagValue\"")
J
jiajingbin 已提交
1224
        self.resCmp(input_sql, stb_name)
1225 1226
        s_stb_s_tb_m_tag_list = self.genSqlList(stb_name=stb_name, tb_name=tb_name)[3]
        self.multiThreadRun(self.genMultiThreadSeq(s_stb_s_tb_m_tag_list))
J
jiajingbin 已提交
1227
        tdSql.query(f"show tables;")
1228 1229 1230 1231
        tdSql.checkRows(1) if self.smlChildTableName_value == "ID" else tdSql.checkRows(2)
        if self.smlChildTableName_value == "ID":
            expected_tb_name = self.getNoIdTbName(stb_name)[0]
            tdSql.checkEqual(tb_name, expected_tb_name)
J
jiajingbin 已提交
1232
        tdSql.query(f"select * from {stb_name};")
1233
        tdSql.checkRows(1) if self.smlChildTableName_value == "ID" else tdSql.checkRows(2)
J
jiajingbin 已提交
1234 1235 1236 1237 1238

    def sStbDtbDdataInsertMultiThreadCheckCase(self):
        """
            thread input same stb, different tb, different data
        """
J
jiajingbin 已提交
1239
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
1240
        tdCom.cleanTb()
1241
        input_sql, stb_name = self.genFullTypeSql(value="\"binaryTagValue\"")
J
jiajingbin 已提交
1242 1243 1244 1245 1246 1247
        self.resCmp(input_sql, stb_name)
        s_stb_d_tb_list = self.genSqlList(stb_name=stb_name)[4]
        self.multiThreadRun(self.genMultiThreadSeq(s_stb_d_tb_list))
        tdSql.query(f"show tables;")
        tdSql.checkRows(6)

1248
    def sStbDtbDdataMtInsertMultiThreadCheckCase(self):
J
jiajingbin 已提交
1249 1250 1251
        """
            thread input same stb, different tb, different data, add col, mul tag
        """
J
jiajingbin 已提交
1252
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
1253
        tdCom.cleanTb()
1254
        input_sql, stb_name = self.genFullTypeSql(value="\"binaryTagValue\"")
J
jiajingbin 已提交
1255
        self.resCmp(input_sql, stb_name)
J
jiajingbin 已提交
1256 1257 1258 1259 1260
        s_stb_d_tb_m_tag_list = [(f'{stb_name} 1626006833640 "omfdhyom" t0=F t1=127i8 t2=32767i16 t3=2147483647i32 t4=9223372036854775807i64 t5=11.12345f32 t6=22.123456789f64', 'yzwswz'),  \
                                (f'{stb_name} 1626006833640 "vqowydbc" t0=F t1=127i8 t2=32767i16 t3=2147483647i32 t4=9223372036854775807i64 t5=11.12345f32 t6=22.123456789f64', 'yzwswz'),  \
                                (f'{stb_name} 1626006833640 "plgkckpv" t0=F t1=127i8 t2=32767i16 t3=2147483647i32 t4=9223372036854775807i64 t5=11.12345f32 t6=22.123456789f64', 'yzwswz'),  \
                                (f'{stb_name} 1626006833640 "cujyqvlj" t0=F t1=127i8 t2=32767i16 t3=2147483647i32 t4=9223372036854775807i64 t5=11.12345f32 t6=22.123456789f64', 'yzwswz'),  \
                                (f'{stb_name} 1626006833640 "twjxisat" t0=T t1=127i8 t2=32767i16 t3=2147483647i32 t4=9223372036854775807i64 t5=11.12345f32 t6=22.123456789f64', 'yzwswz')]
1261
        self.multiThreadRun(self.genMultiThreadSeq(s_stb_d_tb_m_tag_list))
J
jiajingbin 已提交
1262
        tdSql.query(f"show tables;")
1263
        tdSql.checkRows(3)
J
jiajingbin 已提交
1264

1265
    def sStbDtbDdataAtInsertMultiThreadCheckCase(self):
J
jiajingbin 已提交
1266 1267 1268
        """
            thread input same stb, different tb, different data, add tag, mul col
        """
J
jiajingbin 已提交
1269
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
1270
        tdCom.cleanTb()
1271
        input_sql, stb_name = self.genFullTypeSql(value="\"binaryTagValue\"")
J
jiajingbin 已提交
1272
        self.resCmp(input_sql, stb_name)
1273 1274
        s_stb_d_tb_a_tag_list = self.genSqlList(stb_name=stb_name)[6]
        self.multiThreadRun(self.genMultiThreadSeq(s_stb_d_tb_a_tag_list))
J
jiajingbin 已提交
1275 1276 1277 1278 1279 1280 1281
        tdSql.query(f"show tables;")
        tdSql.checkRows(6)

    def sStbStbDdataDtsInsertMultiThreadCheckCase(self):
        """
            thread input same stb tb, different ts
        """
J
jiajingbin 已提交
1282
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
1283 1284
        tdCom.cleanTb()
        tb_name = tdCom.getLongName(7, "letters")
1285
        input_sql, stb_name = self.genFullTypeSql(tb_name=tb_name, value="\"binaryTagValue\"")
J
jiajingbin 已提交
1286
        self.resCmp(input_sql, stb_name)
J
jiajingbin 已提交
1287 1288 1289 1290 1291
        s_stb_s_tb_d_ts_list = [(f'{stb_name} 0 "hkgjiwdj" id={tb_name} t0=f t1=127i8 t2=32767i16 t3=2147483647i32 t4=9223372036854775807i64 t5=11.12345f32 t6=22.123456789f64 t7="vozamcts" t8=L"ncharTagValue"', 'dwpthv'), \
                                (f'{stb_name} 0 "rljjrrul" id={tb_name} t0=False t1=127i8 t2=32767i16 t3=2147483647i32 t4=9223372036854775807i64 t5=11.12345f32 t6=22.123456789f64 t7="bmcanhbs" t8=L"ncharTagValue"', 'dwpthv'), \
                                (f'{stb_name} 0 "basanglx" id={tb_name} t0=False t1=127i8 t2=32767i16 t3=2147483647i32 t4=9223372036854775807i64 t5=11.12345f32 t6=22.123456789f64 t7="enqkyvmb" t8=L"ncharTagValue"', 'dwpthv'), \
                                (f'{stb_name} 0 "clsajzpp" id={tb_name} t0=F t1=127i8 t2=32767i16 t3=2147483647i32 t4=9223372036854775807i64 t5=11.12345f32 t6=22.123456789f64 t7="eivaegjk" t8=L"ncharTagValue"', 'dwpthv'), \
                                (f'{stb_name} 0 "jitwseso" id={tb_name} t0=T t1=127i8 t2=32767i16 t3=2147483647i32 t4=9223372036854775807i64 t5=11.12345f32 t6=22.123456789f64 t7="yhlwkddq" t8=L"ncharTagValue"', 'dwpthv')]
J
jiajingbin 已提交
1292 1293
        self.multiThreadRun(self.genMultiThreadSeq(s_stb_s_tb_d_ts_list))
        tdSql.query(f"show tables;")
1294
        tdSql.checkRows(1) if self.smlChildTableName_value == "ID" else tdSql.checkRows(6)
J
jiajingbin 已提交
1295 1296 1297
        tdSql.query(f"select * from {stb_name}")
        tdSql.checkRows(6)

1298
    def sStbStbDdataDtsMtInsertMultiThreadCheckCase(self):
J
jiajingbin 已提交
1299 1300 1301
        """
            thread input same stb tb, different ts, add col, mul tag
        """
J
jiajingbin 已提交
1302
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
1303 1304
        tdCom.cleanTb()
        tb_name = tdCom.getLongName(7, "letters")
1305
        input_sql, stb_name = self.genFullTypeSql(tb_name=tb_name, value="\"binaryTagValue\"")
J
jiajingbin 已提交
1306
        self.resCmp(input_sql, stb_name)
1307 1308
        s_stb_s_tb_d_ts_m_tag_list = self.genSqlList(stb_name=stb_name, tb_name=tb_name)[8]
        self.multiThreadRun(self.genMultiThreadSeq(s_stb_s_tb_d_ts_m_tag_list))
J
jiajingbin 已提交
1309
        tdSql.query(f"show tables;")
1310
        tdSql.checkRows(1) if self.smlChildTableName_value == "ID" else tdSql.checkRows(2)
J
jiajingbin 已提交
1311 1312 1313
        tdSql.query(f"select * from {stb_name}")
        tdSql.checkRows(6)
        tdSql.query(f"select * from {stb_name} where t8 is not NULL")
1314
        tdSql.checkRows(6) if self.smlChildTableName_value == "ID" else tdSql.checkRows(1)
J
jiajingbin 已提交
1315

1316
    def sStbStbDdataDtsAtInsertMultiThreadCheckCase(self):
J
jiajingbin 已提交
1317 1318 1319
        """
            thread input same stb tb, different ts, add tag, mul col
        """
J
jiajingbin 已提交
1320
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
1321 1322
        tdCom.cleanTb()
        tb_name = tdCom.getLongName(7, "letters")
1323
        input_sql, stb_name = self.genFullTypeSql(tb_name=tb_name, value="\"binaryTagValue\"")
J
jiajingbin 已提交
1324
        self.resCmp(input_sql, stb_name)
J
jiajingbin 已提交
1325 1326 1327 1328 1329
        s_stb_s_tb_d_ts_a_tag_list = [(f'{stb_name} 0 "clummqfy" id={tb_name} t0=False t1=127i8 t2=32767i16 t3=2147483647i32 t4=9223372036854775807i64 t5=11.12345f32 t6=22.123456789f64 t7="hpxzrdiw" t8=L"ncharTagValue" t11=127i8 t10=L"ncharTagValue"', 'bokaxl'), \
                                    (f'{stb_name} 0 "yqeztggb" id={tb_name} t0=F t1=127i8 t2=32767i16 t3=2147483647i32 t4=9223372036854775807i64 t5=11.12345f32 t6=22.123456789f64 t7="gdtblmrc" t8=L"ncharTagValue" t11=127i8 t10=L"ncharTagValue"', 'bokaxl'), \
                                    (f'{stb_name} 0 "gbkinqdk" id={tb_name} t0=f t1=127i8 t2=32767i16 t3=2147483647i32 t4=9223372036854775807i64 t5=11.12345f32 t6=22.123456789f64 t7="iqniuvco" t8=L"ncharTagValue" t11=127i8 t10=L"ncharTagValue"', 'bokaxl'), \
                                    (f'{stb_name} 0 "ldxxejbd" id={tb_name} t0=f t1=127i8 t2=32767i16 t3=2147483647i32 t4=9223372036854775807i64 t5=11.12345f32 t6=22.123456789f64 t7="vxkipags" t8=L"ncharTagValue" t11=127i8 t10=L"ncharTagValue"', 'bokaxl'), \
                                    (f'{stb_name} 0 "tlvzwjes" id={tb_name} t0=true t1=127i8 t2=32767i16 t3=2147483647i32 t4=9223372036854775807i64 t5=11.12345f32 t6=22.123456789f64 t7="enwrlrtj" t8=L"ncharTagValue" t11=127i8 t10=L"ncharTagValue"', 'bokaxl')]
1330
        self.multiThreadRun(self.genMultiThreadSeq(s_stb_s_tb_d_ts_a_tag_list))
J
jiajingbin 已提交
1331
        tdSql.query(f"show tables;")
1332
        tdSql.checkRows(1) if self.smlChildTableName_value == "ID" else tdSql.checkRows(6)
J
jiajingbin 已提交
1333 1334 1335 1336
        tdSql.query(f"select * from {stb_name}")
        tdSql.checkRows(6)
        for t in ["t10", "t11"]:
            tdSql.query(f"select * from {stb_name} where {t} is not NULL;")
1337
            tdSql.checkRows(0) if self.smlChildTableName_value == "ID" else tdSql.checkRows(5)
J
jiajingbin 已提交
1338 1339 1340 1341 1342

    def sStbDtbDdataDtsInsertMultiThreadCheckCase(self):
        """
            thread input same stb, different tb, data, ts
        """
J
jiajingbin 已提交
1343
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
1344
        tdCom.cleanTb()
1345
        input_sql, stb_name = self.genFullTypeSql(value="\"binaryTagValue\"")
J
jiajingbin 已提交
1346 1347 1348 1349 1350 1351
        self.resCmp(input_sql, stb_name)
        s_stb_d_tb_d_ts_list = self.genSqlList(stb_name=stb_name)[10]
        self.multiThreadRun(self.genMultiThreadSeq(s_stb_d_tb_d_ts_list))
        tdSql.query(f"show tables;")
        tdSql.checkRows(6)

1352
    def sStbDtbDdataDtsMtInsertMultiThreadCheckCase(self):
J
jiajingbin 已提交
1353 1354 1355
        """
            thread input same stb, different tb, data, ts, add col, mul tag
        """
J
jiajingbin 已提交
1356
        tdLog.info(f'{sys._getframe().f_code.co_name}() function is running')
J
jiajingbin 已提交
1357
        tdCom.cleanTb()
1358
        input_sql, stb_name = self.genFullTypeSql(value="\"binaryTagValue\"")
J
jiajingbin 已提交
1359
        self.resCmp(input_sql, stb_name)
J
jiajingbin 已提交
1360 1361 1362 1363 1364
        s_stb_d_tb_d_ts_m_tag_list = [(f'{stb_name} 0 "mnpmtzul" t0=False t1=127i8 t2=32767i16 t3=2147483647i32 t4=9223372036854775807i64 t5=11.12345f32 t6=22.123456789f64', 'pcppkg'), \
                                    (f'{stb_name} 0 "zbvwckcd" t0=True t1=126i8 t2=32767i16 t3=2147483647i32 t4=9223372036854775807i64 t5=11.12345f32 t6=22.123456789f64', 'pcppkg'), \
                                    (f'{stb_name} 0 "vymcjfwc" t0=False t1=125i8 t2=32767i16 t3=2147483647i32 t4=9223372036854775807i64 t5=11.12345f32 t6=22.123456789f64', 'pcppkg'), \
                                    (f'{stb_name} 0 "laumkwfn" t0=False t1=124i8 t2=32767i16 t3=2147483647i32 t4=9223372036854775807i64 t5=11.12345f32 t6=22.123456789f64', 'pcppkg'), \
                                    (f'{stb_name} 0 "nyultzxr" t0=false t1=123i8 t2=32767i16 t3=2147483647i32 t4=9223372036854775807i64 t5=11.12345f32 t6=22.123456789f64', 'pcppkg')]
1365
        self.multiThreadRun(self.genMultiThreadSeq(s_stb_d_tb_d_ts_m_tag_list))
J
jiajingbin 已提交
1366
        tdSql.query(f"show tables;")
J
jiajingbin 已提交
1367
        tdSql.checkRows(6)
J
jiajingbin 已提交
1368 1369 1370

    def test(self):
        try:
1371
            input_sql = f'test_nchar 0 L"涛思数据" t0=f t1=L"涛思数据" t2=32767i16 t3=2147483647i32 t4=9223372036854775807i64 t5=11.12345f32 t6=22.123456789f64'
J
jiajingbin 已提交
1372
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.TELNET.value, None)
1373
        except SchemalessError as err:
J
jiajingbin 已提交
1374 1375 1376
            print(err.errno)

    def runAll(self):
1377 1378
        self.initCheckCase()
        self.boolTypeCheckCase()
1379
        self.symbolsCheckCase()
1380
        self.tsCheckCase()
J
jiajingbin 已提交
1381
        self.openTstbTelnetTsCheckCase()
1382
        self.idSeqCheckCase()
J
jiajingbin 已提交
1383
        self.idLetterCheckCase()
1384 1385
        self.noIdCheckCase()
        self.maxColTagCheckCase()
J
jiajingbin 已提交
1386
        self.stbTbNameCheckCase()
1387 1388 1389 1390
        self.idStartWithNumCheckCase()
        self.nowTsCheckCase()
        self.dateFormatTsCheckCase()
        self.illegalTsCheckCase()
J
jiajingbin 已提交
1391
        self.tbnameCheckCase()
J
jiajingbin 已提交
1392
        self.tagNameLengthCheckCase()
1393 1394 1395
        self.tagValueLengthCheckCase()
        self.colValueLengthCheckCase()
        self.tagColIllegalValueCheckCase()
1396
        self.blankCheckCase()
1397 1398 1399 1400 1401 1402 1403 1404 1405
        self.duplicateIdTagColInsertCheckCase()
        self.noIdStbExistCheckCase()
        self.duplicateInsertExistCheckCase()
        self.tagColBinaryNcharLengthCheckCase()
        self.tagColAddDupIDCheckCase()
        self.tagColAddCheckCase()
        self.tagMd5Check()
        self.tagColNcharMaxLengthCheckCase()
        self.batchInsertCheckCase()
1406
        self.multiInsertCheckCase(10)
1407 1408 1409 1410 1411 1412
        self.batchErrorInsertCheckCase()
        self.multiColsInsertCheckCase()
        self.blankColInsertCheckCase()
        self.blankTagInsertCheckCase()
        self.chineseCheckCase()
        self.multiFieldCheckCase()
J
jiajingbin 已提交
1413
        self.spellCheckCase()
1414 1415
        self.pointTransCheckCase()
        self.defaultTypeCheckCase()
J
jiajingbin 已提交
1416 1417
        self.tbnameTagsColsNameCheckCase()
        # # # MultiThreads
1418 1419 1420 1421 1422 1423 1424 1425
        self.stbInsertMultiThreadCheckCase()
        self.sStbStbDdataInsertMultiThreadCheckCase()
        self.sStbStbDdataAtInsertMultiThreadCheckCase()
        self.sStbStbDdataMtInsertMultiThreadCheckCase()
        self.sStbDtbDdataInsertMultiThreadCheckCase()
        self.sStbDtbDdataMtInsertMultiThreadCheckCase()
        self.sStbDtbDdataAtInsertMultiThreadCheckCase()
        self.sStbStbDdataDtsInsertMultiThreadCheckCase()
1426
        # self.sStbStbDdataDtsMtInsertMultiThreadCheckCase()
1427 1428 1429
        self.sStbStbDdataDtsAtInsertMultiThreadCheckCase()
        self.sStbDtbDdataDtsInsertMultiThreadCheckCase()
        self.sStbDtbDdataDtsMtInsertMultiThreadCheckCase()
J
jiajingbin 已提交
1430 1431 1432 1433 1434

    def run(self):
        print("running {}".format(__file__))
        self.createDb()
        try:
1435
            # self.blankTagInsertCheckCase()
J
jiajingbin 已提交
1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446
            self.runAll()
        except Exception as err:
            print(''.join(traceback.format_exception(None, err, err.__traceback__)))
            raise err

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

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