schemalessInsert.py 85.8 KB
Newer Older
J
jiajingbin 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13
###################################################################
#           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 -*-

14
import traceback
J
jiajingbin 已提交
15
import random
16
from taos.error import SchemalessError
J
jiajingbin 已提交
17 18 19 20 21 22
import time
from copy import deepcopy
import numpy as np
from util.log import *
from util.cases import *
from util.sql import *
J
jiajingbin 已提交
23
from util.common import tdCom
24
from util.types import TDSmlProtocolType, TDSmlTimestampType
J
save  
jiajingbin 已提交
25
import threading
J
jiajingbin 已提交
26 27 28 29 30 31
class TDTestCase:
    def init(self, conn, logSql):
        tdLog.debug("start to execute %s" % __file__)
        tdSql.init(conn.cursor(), logSql)
        self._conn = conn 

J
jiajingbin 已提交
32 33 34 35 36 37 38 39 40
    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 已提交
41 42 43
    def timeTrans(self, time_value, ts_type):
        # TDSmlTimestampType.HOUR.value, TDSmlTimestampType.MINUTE.value, TDSmlTimestampType.SECOND.value, TDSmlTimestampType.MICRO_SECOND.value, TDSmlTimestampType.NANO_SECOND.value
        if int(time_value) == 0:
J
jiajingbin 已提交
44 45
            ts = time.time()
        else:
J
jiajingbin 已提交
46 47 48 49 50 51 52 53
            if ts_type == TDSmlTimestampType.NANO_SECOND.value or ts_type is None:
                ts = int(''.join(list(filter(str.isdigit, time_value))))/1000000000
            elif ts_type == TDSmlTimestampType.MICRO_SECOND.value:
                ts = int(''.join(list(filter(str.isdigit, time_value))))/1000000
            elif ts_type == TDSmlTimestampType.MILLI_SECOND.value:
                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 已提交
54 55 56 57 58
        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
59
            # * follow two rows added for tsCheckCase
J
jiajingbin 已提交
60 61 62 63 64 65 66 67 68 69
            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 已提交
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 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
    def getTdTypeValue(self, value, vtype="col"):
        """
            vtype must be col or tag
        """
        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().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"
                td_tag_value = str(float(value))
            else:
                td_type = "DOUBLE"
                if "e" in value.lower():
                    td_tag_value = str(float(value))
                else:
                    td_tag_value = value
        elif vtype == "tag":
J
jiajingbin 已提交
121
            td_type = "NCHAR"
J
jiajingbin 已提交
122
            td_tag_value = str(value)
J
jiajingbin 已提交
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
        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 已提交
152
    def inputHandle(self, input_sql, ts_type):
J
jiajingbin 已提交
153 154 155 156
        input_sql_split_list = input_sql.split(" ")

        stb_tag_list = input_sql_split_list[0].split(',')
        stb_col_list = input_sql_split_list[1].split(',')
J
jiajingbin 已提交
157
        ts_value = self.timeTrans(input_sql_split_list[2], ts_type)
J
jiajingbin 已提交
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175

        stb_name = stb_tag_list[0]
        stb_tag_list.pop(0)

        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:
            if "id=" in elm.lower():
                tb_name = elm.split('=')[1]
            else:
J
jiajingbin 已提交
176
                tag_name_list.append(elm.split("=")[0].lower())
J
jiajingbin 已提交
177 178
                tag_value_list.append(elm.split("=")[1])
                tb_name = ""
J
jiajingbin 已提交
179 180
                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 已提交
181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207
        
        for elm in stb_col_list:
            col_name_list.append(elm.split("=")[0])
            col_value_list.append(elm.split("=")[1])
            td_col_value_list.append(self.getTdTypeValue(elm.split("=")[1])[1])
            td_col_type_list.append(self.getTdTypeValue(elm.split("=")[1])[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="", t0="", t1="127i8", t2="32767i16", t3="2147483647i32",
                        t4="9223372036854775807i64", t5="11.12345f32", t6="22.123456789f64", t7="\"binaryTagValue\"",
                        t8="L\"ncharTagValue\"", c0="", c1="127i8", c2="32767i16", c3="2147483647i32",
                        c4="9223372036854775807i64", c5="11.12345f32", c6="22.123456789f64", c7="\"binaryColValue\"", 
J
jiajingbin 已提交
208 209 210 211
                        c8="L\"ncharColValue\"", c9="7u64", ts="1626006833639000000", ts_type=None,
                        id_noexist_tag=None, id_change_tag=None, id_upper_tag=None, id_mixul_tag=None, id_double_tag=None,
                        ct_add_tag=None, ct_am_tag=None, ct_ma_tag=None, ct_min_tag=None, c_multi_tag=None, t_multi_tag=None,
                        c_blank_tag=None, t_blank_tag=None, chinese_tag=None):
J
jiajingbin 已提交
212
        if stb_name == "":
J
jiajingbin 已提交
213
            stb_name = tdCom.getLongName(len=6, mode="letters")
J
jiajingbin 已提交
214 215 216
        if tb_name == "":
            tb_name = f'{stb_name}_{random.randint(0, 65535)}_{random.randint(0, 65535)}'
        if t0 == "":
J
jiajingbin 已提交
217
            t0 = "t"
J
jiajingbin 已提交
218 219
        if c0 == "":
            c0 = random.choice(["f", "F", "false", "False", "t", "T", "true", "True"])
J
jiajingbin 已提交
220
        #sql_seq = f'{stb_name},id=\"{tb_name}\",t0={t0},t1=127i8,t2=32767i16,t3=125.22f64,t4=11.321f32,t5=11.12345f32,t6=22.123456789f64,t7=\"binaryTagValue\",t8=L\"ncharTagValue\" c0={bool_value},c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=\"binaryValue\",c8=L\"ncharValue\" 1626006833639000000'
J
jiajingbin 已提交
221 222 223 224
        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},{id}={tb_name},t0={t0},t1={t1},t2={t2},t3={t3},t4={t4},t5={t5},t6={t6},t7={t7},t8={t8} c0={c0},c1={c1},c2={c2},c3={c3},c4={c4},c5={c5},c6={c6},c7={c7},c8={c8},c9={c9} {ts}'
J
jiajingbin 已提交
230 231
        if id_noexist_tag is not None:
            sql_seq = f'{stb_name},t0={t0},t1={t1},t2={t2},t3={t3},t4={t4},t5={t5},t6={t6},t7={t7},t8={t8} c0={c0},c1={c1},c2={c2},c3={c3},c4={c4},c5={c5},c6={c6},c7={c7},c8={c8},c9={c9} {ts}'
J
save  
jiajingbin 已提交
232
            if ct_add_tag is not None:
J
jiajingbin 已提交
233 234
                sql_seq = f'{stb_name},t0={t0},t1={t1},t2={t2},t3={t3},t4={t4},t5={t5},t6={t6},t7={t7},t8={t8},t9={t8} c0={c0},c1={c1},c2={c2},c3={c3},c4={c4},c5={c5},c6={c6},c7={c7},c8={c8},c9={c9} {ts}'
        if id_change_tag is not None:
J
jiajingbin 已提交
235
            sql_seq = f'{stb_name},t0={t0},t1={t1},{id}={tb_name},t2={t2},t3={t3},t4={t4},t5={t5},t6={t6},t7={t7},t8={t8} c0={c0},c1={c1},c2={c2},c3={c3},c4={c4},c5={c5},c6={c6},c7={c7},c8={c8},c9={c9} {ts}'
J
jiajingbin 已提交
236 237
        if id_double_tag is not None:
            sql_seq = f'{stb_name},{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} c0={c0},c1={c1},c2={c2},c3={c3},c4={c4},c5={c5},c6={c6},c7={c7},c8={c8},c9={c9} {ts}'
J
save  
jiajingbin 已提交
238
        if ct_add_tag is not None:
J
jiajingbin 已提交
239
            sql_seq = f'{stb_name},{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} c0={c0},c1={c1},c2={c2},c3={c3},c4={c4},c5={c5},c6={c6},c7={c7},c8={c8},c9={c9},c11={c8},c10={t0} {ts}'
J
save  
jiajingbin 已提交
240
        if ct_am_tag is not None:
J
jiajingbin 已提交
241
            sql_seq = f'{stb_name},{id}={tb_name},t0={t0},t1={t1},t2={t2},t3={t3},t4={t4},t5={t5},t6={t6} c0={c0},c1={c1},c2={c2},c3={c3},c4={c4},c5={c5},c6={c6},c7={c7},c8={c8},c9={c9},c11={c8},c10={t0} {ts}'
J
jiajingbin 已提交
242 243
            if id_noexist_tag is not None:
                    sql_seq = f'{stb_name},t0={t0},t1={t1},t2={t2},t3={t3},t4={t4},t5={t5},t6={t6} c0={c0},c1={c1},c2={c2},c3={c3},c4={c4},c5={c5},c6={c6},c7={c7},c8={c8},c9={c9},c11={c8},c10={t0} {ts}'
J
save  
jiajingbin 已提交
244
        if ct_ma_tag is not None:
J
jiajingbin 已提交
245
            sql_seq = f'{stb_name},{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} c0={c0},c1={c1},c2={c2},c3={c3},c4={c4},c5={c5},c6={c6} {ts}'
J
jiajingbin 已提交
246 247
            if id_noexist_tag is not None:
                sql_seq = f'{stb_name},t0={t0},t1={t1},t2={t2},t3={t3},t4={t4},t5={t5},t6={t6},t7={t7},t8={t8},t11={t1},t10={t8} c0={c0},c1={c1},c2={c2},c3={c3},c4={c4},c5={c5},c6={c6} {ts}'
J
save  
jiajingbin 已提交
248
        if ct_min_tag is not None:
J
jiajingbin 已提交
249 250 251 252 253 254 255 256 257 258 259
            sql_seq = f'{stb_name},{id}={tb_name},t0={t0},t1={t1},t2={t2},t3={t3},t4={t4},t5={t5},t6={t6} c0={c0},c1={c1},c2={c2},c3={c3},c4={c4},c5={c5},c6={c6} {ts}'
        if c_multi_tag is not None:
            sql_seq = f'{stb_name},{id}={tb_name},t0={t0},t1={t1},t2={t2},t3={t3},t4={t4},t5={t5},t6={t6},t7={t7},t8={t8} c0={c0},c1={c1},c2={c2},c3={c3},c4={c4},c5={c5},c6={c6},c7={c7},c8={c8},c9={c9} c10={c9} {ts}'
        if t_multi_tag is not None:
            sql_seq = f'{stb_name},{id}={tb_name},t0={t0},t1={t1},t2={t2},t3={t3},t4={t4},t5={t5},t6={t6},t7={t7},t8={t8} t9={t8} c0={c0},c1={c1},c2={c2},c3={c3},c4={c4},c5={c5},c6={c6},c7={c7},c8={c8},c9={c9} {ts}'
        if c_blank_tag is not None:
            sql_seq = f'{stb_name},{id}={tb_name},t0={t0},t1={t1},t2={t2},t3={t3},t4={t4},t5={t5},t6={t6},t7={t7},t8={t8} {ts}'
        if t_blank_tag is not None:
            sql_seq = f'{stb_name},{id}={tb_name} c0={c0},c1={c1},c2={c2},c3={c3},c4={c4},c5={c5},c6={c6},c7={c7},c8={c8},c9={c9} {ts}'
        if chinese_tag is not None:
            sql_seq = f'{stb_name},to=L"涛思数据" c0=L"涛思数据" {ts}'
J
jiajingbin 已提交
260
        return sql_seq, stb_name
J
jiajingbin 已提交
261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283
    
    def genMulTagColStr(self, genType, count):
        """
            genType must be tag/col
        """
        tag_str = ""
        col_str = ""
        if genType == "tag":
            for i in range(0, count):
                if i < (count-1):
                    tag_str += f't{i}=f,'
                else:
                    tag_str += f't{i}=f '
            return tag_str
        if genType == "col":
            for i in range(0, count):
                if i < (count-1):
                    col_str += f'c{i}=t,'
                else:
                    col_str += f'c{i}=t '
            return col_str

    def genLongSql(self, tag_count, col_count):
J
jiajingbin 已提交
284
        stb_name = tdCom.getLongName(7, mode="letters")
J
jiajingbin 已提交
285 286 287
        tb_name = f'{stb_name}_1'
        tag_str = self.genMulTagColStr("tag", tag_count)
        col_str = self.genMulTagColStr("col", col_count)
J
jiajingbin 已提交
288 289
        ts = "1626006833640000000"
        long_sql = stb_name + ',' + f'id={tb_name}' + ',' + tag_str + col_str + ts
J
jiajingbin 已提交
290 291 292 293 294 295 296 297
        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):
298
        tdSql.execute('reset query cache')
J
jiajingbin 已提交
299 300 301 302 303 304 305 306 307 308 309 310
        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 已提交
311 312 313 314 315 316
    def resCmp(self, input_sql, stb_name, query_sql="select * from", ts_type=None, condition="", ts=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.LINE.value, ts_type)
        else:
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, precision)
J
jiajingbin 已提交
317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335
        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])
336 337 338
        for i in range(len(res_type_list)):
            tdSql.checkEqual(res_type_list[i], expect_list[2][i])
        # tdSql.checkEqual(res_type_list, expect_list[2])
J
jiajingbin 已提交
339

J
jiajingbin 已提交
340 341
    def cleanStb(self):
        query_sql = "show stables"
J
jiajingbin 已提交
342 343 344
        res_row_list = tdSql.query(query_sql, True)
        stb_list = map(lambda x: x[0], res_row_list)
        for stb in stb_list:
J
jiajingbin 已提交
345 346
            tdSql.execute(f'drop table if exists {stb}')

J
jiajingbin 已提交
347 348 349 350
    def initCheckCase(self):
        """
            normal tags and cols, one for every elm
        """
J
jiajingbin 已提交
351
        tdCom.cleanTb()
J
jiajingbin 已提交
352
        input_sql, stb_name = self.genFullTypeSql()
J
jiajingbin 已提交
353 354 355 356 357 358
        self.resCmp(input_sql, stb_name)

    def boolTypeCheckCase(self):
        """
            check all normal type
        """
J
jiajingbin 已提交
359
        tdCom.cleanTb()
J
jiajingbin 已提交
360 361
        full_type_list = ["f", "F", "false", "False", "t", "T", "true", "True"]
        for t_type in full_type_list:
J
jiajingbin 已提交
362
            input_sql, stb_name = self.genFullTypeSql(c0=t_type, t0=t_type)
J
jiajingbin 已提交
363 364 365 366 367 368 369 370 371 372
            self.resCmp(input_sql, stb_name)
        
    def symbolsCheckCase(self):
        """
            check symbols = `~!@#$%^&*()_-+={[}]\|:;'\",<.>/? 
        """
        '''
            please test :
            binary_symbols = '\"abcd`~!@#$%^&*()_-{[}]|:;<.>?lfjal"\'\'"\"'
        '''
J
jiajingbin 已提交
373
        tdCom.cleanTb()
J
jiajingbin 已提交
374 375
        binary_symbols = '\"abcd`~!@#$%^&*()_-{[}]|:;<.>?lfjal"\"'
        nchar_symbols = f'L{binary_symbols}'
J
jiajingbin 已提交
376
        input_sql, stb_name = self.genFullTypeSql(c7=binary_symbols, c8=nchar_symbols, t7=binary_symbols, t8=nchar_symbols)
J
jiajingbin 已提交
377 378 379 380
        self.resCmp(input_sql, stb_name)

    def tsCheckCase(self):
        """
J
jiajingbin 已提交
381
            test ts list --> ["1626006833639000000", "1626006833639019us", "1626006833640ms", "1626006834s", "1626006822639022"]
J
jiajingbin 已提交
382 383
            # ! us级时间戳都为0时,数据库中查询显示,但python接口拿到的结果不显示 .000000的情况请确认,目前修改时间处理代码可以通过
        """
J
jiajingbin 已提交
384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432
        tdCom.cleanTb()
        input_sql, stb_name = self.genFullTypeSql(ts=1626006833639000000)
        self.resCmp(input_sql, stb_name, ts_type=TDSmlTimestampType.NANO_SECOND.value)
        input_sql, stb_name = self.genFullTypeSql(ts=1626006833639019)
        self.resCmp(input_sql, stb_name, ts_type=TDSmlTimestampType.MICRO_SECOND.value)
        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=1626006834)
        self.resCmp(input_sql, stb_name, ts_type=TDSmlTimestampType.SECOND.value)
        input_sql, stb_name = self.genFullTypeSql(ts=1626006833639000000)
        self.resCmp(input_sql, stb_name, ts_type=None)
        input_sql, stb_name = self.genFullTypeSql(ts=0)
        self.resCmp(input_sql, stb_name, ts=0)

        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,t0=t c0=t 1626006833640', 'test_ms,t0=t c0=f 1626006833641']
        self._conn.schemaless_insert(input_sql, TDSmlProtocolType.LINE.value, TDSmlTimestampType.MILLI_SECOND.value)
        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")

        tdSql.execute(f"drop database if exists test_ts")
        tdSql.execute(f"create database if not exists test_ts precision 'us'")
        tdSql.execute("use test_ts")
        input_sql = ['test_us,t0=t c0=t 1626006833639000', 'test_us,t0=t c0=f 1626006833639001']
        self._conn.schemaless_insert(input_sql, TDSmlProtocolType.LINE.value, TDSmlTimestampType.MICRO_SECOND.value)
        res = tdSql.query('select * from test_us', True)
        tdSql.checkEqual(str(res[0][0]), "2021-07-11 20:33:53.639000")
        tdSql.checkEqual(str(res[1][0]), "2021-07-11 20:33:53.639001")

        tdSql.execute(f"drop database if exists test_ts")
        tdSql.execute(f"create database if not exists test_ts precision 'ns'")
        tdSql.execute("use test_ts")
        input_sql = ['test_ns,t0=t c0=t 1626006833639000000', 'test_ns,t0=t c0=f 1626006833639000001']
        self._conn.schemaless_insert(input_sql, TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
        res = tdSql.query('select * from test_ns', True)
        tdSql.checkEqual(str(res[0][0]), "1626006833639000000")
        tdSql.checkEqual(str(res[1][0]), "1626006833639000001")

        self.createDb()

    def zeroTsCheckCase(self):
        tdCom.cleanTb()
        for ts_tag in [TDSmlTimestampType.HOUR.value, TDSmlTimestampType.MINUTE.value, TDSmlTimestampType.SECOND.value, TDSmlTimestampType.MICRO_SECOND.value, TDSmlTimestampType.NANO_SECOND.value]:
            input_sql = f'{tdCom.getLongName(len=10, mode="letters")},t0=127,t1=32767I16,t2=2147483647I32,t3=9223372036854775807,t4=11.12345027923584F32,t5=22.123456789F64 c0=127,c1=32767I16,c2=2147483647I32,c3=9223372036854775807,c4=11.12345027923584F32,c5=22.123456789F64 0'
            stb_name = input_sql.split(",")[0]
            self.resCmp(input_sql, stb_name, ts=0, precision=ts_tag)
J
jiajingbin 已提交
433
    
J
jiajingbin 已提交
434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510
    def influxTsCheckCase(self):
        tdCom.cleanTb()
        input_sql = f'{tdCom.getLongName(len=10, mode="letters")},t0=127,t1=32767I16,t2=2147483647I32,t3=9223372036854775807,t4=11.12345027923584F32,t5=22.123456789F64 c0=127,c1=32767I16,c2=2147483647I32,c3=9223372036854775807,c4=11.12345027923584F32,c5=22.123456789F64 454093'
        stb_name = input_sql.split(",")[0]
        self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.HOUR.value)
        res = tdSql.query(f'select * from {stb_name}', True)
        tdSql.checkEqual(str(res[0][0]), "2021-10-20 21:00:00")
        input_sql = f'{tdCom.getLongName(len=10, mode="letters")},t0=127,t1=32767I16,t2=2147483647I32,t3=9223372036854775807,t4=11.12345027923584F32,t5=22.123456789F64 c0=127,c1=32767I16,c2=2147483647I32,c3=9223372036854775807,c4=11.12345027923584F32,c5=22.123456789F64 454094'
        stb_name = input_sql.split(",")[0]
        self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.HOUR.value)
        res = tdSql.query(f'select * from {stb_name}', True)
        tdSql.checkEqual(str(res[0][0]), "2021-10-20 22:00:00")

        input_sql = f'{tdCom.getLongName(len=10, mode="letters")},t0=127,t1=32767I16,t2=2147483647I32,t3=9223372036854775807,t4=11.12345027923584F32,t5=22.123456789F64 c0=127,c1=32767I16,c2=2147483647I32,c3=9223372036854775807,c4=11.12345027923584F32,c5=22.123456789F64 27245538'
        stb_name = input_sql.split(",")[0]
        self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.MINUTE.value)
        res = tdSql.query(f'select * from {stb_name}', True)
        tdSql.checkEqual(str(res[0][0]), "2021-10-20 20:18:00")
        input_sql = f'{tdCom.getLongName(len=10, mode="letters")},t0=127,t1=32767I16,t2=2147483647I32,t3=9223372036854775807,t4=11.12345027923584F32,t5=22.123456789F64 c0=127,c1=32767I16,c2=2147483647I32,c3=9223372036854775807,c4=11.12345027923584F32,c5=22.123456789F64 27245539'
        stb_name = input_sql.split(",")[0]
        self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.MINUTE.value)
        res = tdSql.query(f'select * from {stb_name}', True)
        tdSql.checkEqual(str(res[0][0]), "2021-10-20 20:19:00")

        input_sql = f'{tdCom.getLongName(len=10, mode="letters")},t0=127,t1=32767I16,t2=2147483647I32,t3=9223372036854775807,t4=11.12345027923584F32,t5=22.123456789F64 c0=127,c1=32767I16,c2=2147483647I32,c3=9223372036854775807,c4=11.12345027923584F32,c5=22.123456789F64 1634731694'
        stb_name = input_sql.split(",")[0]
        self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.SECOND.value)
        res = tdSql.query(f'select * from {stb_name}', True)
        tdSql.checkEqual(str(res[0][0]), "2021-10-20 20:08:14")
        input_sql = f'{tdCom.getLongName(len=10, mode="letters")},t0=127,t1=32767I16,t2=2147483647I32,t3=9223372036854775807,t4=11.12345027923584F32,t5=22.123456789F64 c0=127,c1=32767I16,c2=2147483647I32,c3=9223372036854775807,c4=11.12345027923584F32,c5=22.123456789F64 1634731695'
        stb_name = input_sql.split(",")[0]
        self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.SECOND.value)
        res = tdSql.query(f'select * from {stb_name}', True)
        tdSql.checkEqual(str(res[0][0]), "2021-10-20 20:08:15")

        input_sql = f'{tdCom.getLongName(len=10, mode="letters")},t0=127,t1=32767I16,t2=2147483647I32,t3=9223372036854775807,t4=11.12345027923584F32,t5=22.123456789F64 c0=127,c1=32767I16,c2=2147483647I32,c3=9223372036854775807,c4=11.12345027923584F32,c5=22.123456789F64 1634731684002'
        stb_name = input_sql.split(",")[0]
        self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.MILLI_SECOND.value)
        res = tdSql.query(f'select * from {stb_name}', True)
        tdSql.checkEqual(str(res[0][0]), "2021-10-20 20:08:04.002000")
        input_sql = f'{tdCom.getLongName(len=10, mode="letters")},t0=127,t1=32767I16,t2=2147483647I32,t3=9223372036854775807,t4=11.12345027923584F32,t5=22.123456789F64 c0=127,c1=32767I16,c2=2147483647I32,c3=9223372036854775807,c4=11.12345027923584F32,c5=22.123456789F64 1634731684003'
        stb_name = input_sql.split(",")[0]
        self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.MILLI_SECOND.value)
        res = tdSql.query(f'select * from {stb_name}', True)
        tdSql.checkEqual(str(res[0][0]), "2021-10-20 20:08:04.003000")

        input_sql = f'{tdCom.getLongName(len=10, mode="letters")},t0=127,t1=32767I16,t2=2147483647I32,t3=9223372036854775807,t4=11.12345027923584F32,t5=22.123456789F64 c0=127,c1=32767I16,c2=2147483647I32,c3=9223372036854775807,c4=11.12345027923584F32,c5=22.123456789F64 1634731684000001'
        stb_name = input_sql.split(",")[0]
        self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.MICRO_SECOND.value)
        res = tdSql.query(f'select * from {stb_name}', True)
        tdSql.checkEqual(str(res[0][0]), "2021-10-20 20:08:04.000001")
        input_sql = f'{tdCom.getLongName(len=10, mode="letters")},t0=127,t1=32767I16,t2=2147483647I32,t3=9223372036854775807,t4=11.12345027923584F32,t5=22.123456789F64 c0=127,c1=32767I16,c2=2147483647I32,c3=9223372036854775807,c4=11.12345027923584F32,c5=22.123456789F64 1634731684000002'
        stb_name = input_sql.split(",")[0]
        self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.MICRO_SECOND.value)
        res = tdSql.query(f'select * from {stb_name}', True)
        tdSql.checkEqual(str(res[0][0]), "2021-10-20 20:08:04.000002")

        input_sql = f'{tdCom.getLongName(len=10, mode="letters")},t0=127,t1=32767I16,t2=2147483647I32,t3=9223372036854775807,t4=11.12345027923584F32,t5=22.123456789F64 c0=127,c1=32767I16,c2=2147483647I32,c3=9223372036854775807,c4=11.12345027923584F32,c5=22.123456789F64 1626006833639000000'
        stb_name = input_sql.split(",")[0]
        self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
        res = tdSql.query(f'select * from {stb_name}', True)
        tdSql.checkEqual(str(res[0][0]), "2021-07-11 20:33:53.639000")
        input_sql = f'{tdCom.getLongName(len=10, mode="letters")},t0=127,t1=32767I16,t2=2147483647I32,t3=9223372036854775807,t4=11.12345027923584F32,t5=22.123456789F64 c0=127,c1=32767I16,c2=2147483647I32,c3=9223372036854775807,c4=11.12345027923584F32,c5=22.123456789F64 1626007833639000000'
        stb_name = input_sql.split(",")[0]
        self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
        res = tdSql.query(f'select * from {stb_name}', True)
        tdSql.checkEqual(str(res[0][0]), "2021-07-11 20:50:33.639000")

    def iuCheckCase(self):
        tdCom.cleanTb()
        input_sql = f'{tdCom.getLongName(len=10, mode="letters")},t0=127 c1=9223372036854775807i,c2=1u 0'
        stb_name = input_sql.split(",")[0]
        self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
        res = tdSql.query(f'describe {stb_name}', True)
        tdSql.checkData(1, 1, "BIGINT")
        tdSql.checkData(2, 1, "BIGINT UNSIGNED")

J
jiajingbin 已提交
511 512 513 514 515
    def idSeqCheckCase(self):
        """
            check id.index in tags
            eg: t0=**,id=**,t1=**
        """
J
jiajingbin 已提交
516
        tdCom.cleanTb()
J
jiajingbin 已提交
517
        input_sql, stb_name = self.genFullTypeSql(id_change_tag=True)
J
jiajingbin 已提交
518 519
        self.resCmp(input_sql, stb_name)
    
J
jiajingbin 已提交
520
    def idLetterCheckCase(self):
J
jiajingbin 已提交
521 522 523 524
        """
            check id param
            eg: id and ID
        """
J
jiajingbin 已提交
525
        tdCom.cleanTb()
J
jiajingbin 已提交
526
        input_sql, stb_name = self.genFullTypeSql(id_upper_tag=True)
J
jiajingbin 已提交
527
        self.resCmp(input_sql, stb_name)
J
jiajingbin 已提交
528 529
        input_sql, stb_name = self.genFullTypeSql(id_mixul_tag=True)
        self.resCmp(input_sql, stb_name)
J
jiajingbin 已提交
530
        input_sql, stb_name = self.genFullTypeSql(id_change_tag=True, id_upper_tag=True)
J
jiajingbin 已提交
531 532 533 534 535 536
        self.resCmp(input_sql, stb_name)

    def noIdCheckCase(self):
        """
            id not exist
        """
J
jiajingbin 已提交
537
        tdCom.cleanTb()
J
jiajingbin 已提交
538
        input_sql, stb_name = self.genFullTypeSql(id_noexist_tag=True)
J
jiajingbin 已提交
539 540 541 542 543 544 545 546 547 548 549 550 551
        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
            max col count is ??
        """
J
save  
jiajingbin 已提交
552
        for input_sql in [self.genLongSql(128, 1)[0], self.genLongSql(1, 4094)[0]]:
J
jiajingbin 已提交
553
            tdCom.cleanTb()
554
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
J
save  
jiajingbin 已提交
555
        for input_sql in [self.genLongSql(129, 1)[0], self.genLongSql(1, 4095)[0]]:
J
jiajingbin 已提交
556
            tdCom.cleanTb()
557
            try:
558
                self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
J
jiajingbin 已提交
559 560 561
                raise Exception("should not reach here")
            except SchemalessError as err:
                tdSql.checkNotEqual(err.errno, 0)
562
            
J
jiajingbin 已提交
563
    def stbTbNameCheckCase(self):
J
jiajingbin 已提交
564 565
        """
            test illegal id name
J
jiajingbin 已提交
566
            mix "~!@#$¥%^&*()-+={}|[]、「」【】\:;《》<>?"
J
jiajingbin 已提交
567
        """
J
jiajingbin 已提交
568 569
        tdCom.cleanTb()
        rstr = list("~!@#$¥%^&*()-+=|[]、「」【】\;:《》<>?")
J
jiajingbin 已提交
570
        for i in rstr:
J
jiajingbin 已提交
571 572 573 574
            stb_name=f"aaa{i}bbb"
            input_sql = self.genFullTypeSql(stb_name=stb_name, tb_name=f'{stb_name}_sub')[0]
            self.resCmp(input_sql, f'`{stb_name}`')
            tdSql.execute(f'drop table if exists `{stb_name}`')
J
jiajingbin 已提交
575 576 577 578 579

    def idStartWithNumCheckCase(self):
        """
            id is start with num
        """
J
jiajingbin 已提交
580 581 582
        tdCom.cleanTb()
        input_sql, stb_name = self.genFullTypeSql(tb_name="1aaabbb")
        self.resCmp(input_sql, stb_name)
J
jiajingbin 已提交
583 584 585 586 587

    def nowTsCheckCase(self):
        """
            check now unsupported
        """
J
jiajingbin 已提交
588
        tdCom.cleanTb()
J
jiajingbin 已提交
589
        input_sql = self.genFullTypeSql(ts="now")[0]
590
        try:
591
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
J
jiajingbin 已提交
592 593 594
            raise Exception("should not reach here")
        except SchemalessError as err:
            tdSql.checkNotEqual(err.errno, 0)
J
jiajingbin 已提交
595 596 597 598 599

    def dateFormatTsCheckCase(self):
        """
            check date format ts unsupported
        """
J
jiajingbin 已提交
600
        tdCom.cleanTb()
J
jiajingbin 已提交
601
        input_sql = self.genFullTypeSql(ts="2021-07-21\ 19:01:46.920")[0]
602
        try:
603
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
J
jiajingbin 已提交
604 605 606
            raise Exception("should not reach here")
        except SchemalessError as err:
            tdSql.checkNotEqual(err.errno, 0)
J
jiajingbin 已提交
607 608 609 610 611
    
    def illegalTsCheckCase(self):
        """
            check ts format like 16260068336390us19
        """
J
jiajingbin 已提交
612
        tdCom.cleanTb()
J
jiajingbin 已提交
613
        input_sql = self.genFullTypeSql(ts="16260068336390us19")[0]
614
        try:
615
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
J
jiajingbin 已提交
616 617
        except SchemalessError as err:
            tdSql.checkNotEqual(err.errno, 0)
J
jiajingbin 已提交
618

J
jiajingbin 已提交
619
    def tbnameCheckCase(self):
J
jiajingbin 已提交
620
        """
J
jiajingbin 已提交
621 622 623 624
            check length 192
            check upper tbname
            chech upper tag
            length of stb_name tb_name <= 192
J
jiajingbin 已提交
625
        """
J
jiajingbin 已提交
626 627 628 629 630 631 632 633
        stb_name_192 = tdCom.getLongName(len=192, mode="letters")
        tb_name_192 = tdCom.getLongName(len=192, mode="letters")
        tdCom.cleanTb()
        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)
        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]]:
634
            try:
635
                self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
636
                raise Exception("should not reach here")
637
            except SchemalessError as err:
638
                tdSql.checkNotEqual(err.errno, 0)
J
jiajingbin 已提交
639

J
jiajingbin 已提交
640 641 642
        input_sql = 'Abcdffgg,id=Abcddd,T1=127i8 c0=False 1626006833639000000'
        stb_name = "Abcdffgg"
        self.resCmp(input_sql, stb_name)
J
jiajingbin 已提交
643

J
jiajingbin 已提交
644 645 646 647 648
    def tagValueLengthCheckCase(self):
        """
            check full type tag value limit
        """
        tdCom.cleanTb()
J
save  
jiajingbin 已提交
649 650
        # nchar
        # * legal nchar could not be larger than 16374/4
J
jiajingbin 已提交
651 652
        stb_name = tdCom.getLongName(7, "letters")
        input_sql = f'{stb_name},t0=t,t1={tdCom.getLongName(4093, "letters")} c0=f 1626006833639000000'
653
        self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
J
jiajingbin 已提交
654
        input_sql = f'{stb_name},t0=t,t1={tdCom.getLongName(4094, "letters")} c0=f 1626006833639000000'
655
        try:
656
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
657
            raise Exception("should not reach here")
658
        except SchemalessError as err:
659
            tdSql.checkNotEqual(err.errno, 0)
J
jiajingbin 已提交
660

J
jiajingbin 已提交
661 662 663 664
    def colValueLengthCheckCase(self):
        """
            check full type col value limit
        """
J
jiajingbin 已提交
665
        tdCom.cleanTb()
J
save  
jiajingbin 已提交
666 667
        # i8
        for c1 in ["-127i8", "127i8"]:
J
jiajingbin 已提交
668
            input_sql, stb_name = self.genFullTypeSql(c1=c1)
J
save  
jiajingbin 已提交
669 670 671 672
            self.resCmp(input_sql, stb_name)

        for c1 in ["-128i8", "128i8"]:
            input_sql = self.genFullTypeSql(c1=c1)[0]
673
            try:
674
                self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
675
                raise Exception("should not reach here")
676
            except SchemalessError as err:
677
                tdSql.checkNotEqual(err.errno, 0)
J
save  
jiajingbin 已提交
678 679
        # i16
        for c2 in ["-32767i16"]:
J
jiajingbin 已提交
680
            input_sql, stb_name = self.genFullTypeSql(c2=c2)
J
save  
jiajingbin 已提交
681 682 683
            self.resCmp(input_sql, stb_name)
        for c2 in ["-32768i16", "32768i16"]:
            input_sql = self.genFullTypeSql(c2=c2)[0]
684
            try:
685
                self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
686
                raise Exception("should not reach here")
687
            except SchemalessError as err:
688
                tdSql.checkNotEqual(err.errno, 0)
J
save  
jiajingbin 已提交
689 690 691

        # i32
        for c3 in ["-2147483647i32"]:
J
jiajingbin 已提交
692
            input_sql, stb_name = self.genFullTypeSql(c3=c3)
J
save  
jiajingbin 已提交
693 694 695
            self.resCmp(input_sql, stb_name)
        for c3 in ["-2147483648i32", "2147483648i32"]:
            input_sql = self.genFullTypeSql(c3=c3)[0]
696
            try:
697
                self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
698
                raise Exception("should not reach here")
699
            except SchemalessError as err:
700
                tdSql.checkNotEqual(err.errno, 0)
J
save  
jiajingbin 已提交
701 702 703

        # i64
        for c4 in ["-9223372036854775807i64"]:
J
jiajingbin 已提交
704
            input_sql, stb_name = self.genFullTypeSql(c4=c4)
J
save  
jiajingbin 已提交
705 706 707
            self.resCmp(input_sql, stb_name)
        for c4 in ["-9223372036854775808i64", "9223372036854775808i64"]:
            input_sql = self.genFullTypeSql(c4=c4)[0]
708
            try:
709
                self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
710
                raise Exception("should not reach here")
711
            except SchemalessError as err:
712
                tdSql.checkNotEqual(err.errno, 0)
J
save  
jiajingbin 已提交
713 714 715

        # f32       
        for c5 in [f"{-3.4028234663852885981170418348451692544*(10**38)}f32", f"{3.4028234663852885981170418348451692544*(10**38)}f32"]:
J
jiajingbin 已提交
716
            input_sql, stb_name = self.genFullTypeSql(c5=c5)
J
save  
jiajingbin 已提交
717 718 719 720
            self.resCmp(input_sql, stb_name)
        # * limit set to 4028234664*(10**38)
        for c5 in [f"{-3.4028234664*(10**38)}f32", f"{3.4028234664*(10**38)}f32"]:
            input_sql = self.genFullTypeSql(c5=c5)[0]
721
            try:
722
                self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
723
                raise Exception("should not reach here")
724
            except SchemalessError as err:
725
                tdSql.checkNotEqual(err.errno, 0)
J
save  
jiajingbin 已提交
726 727 728

        # f64
        for c6 in [f'{-1.79769313486231570814527423731704356798070567525844996598917476803157260780*(10**308)}f64', f'{-1.79769313486231570814527423731704356798070567525844996598917476803157260780*(10**308)}f64']:
J
jiajingbin 已提交
729
            input_sql, stb_name = self.genFullTypeSql(c6=c6)
J
save  
jiajingbin 已提交
730 731 732 733
            self.resCmp(input_sql, stb_name)
        # * limit set to 1.797693134862316*(10**308)
        for c6 in [f'{-1.797693134862316*(10**308)}f64', f'{-1.797693134862316*(10**308)}f64']:
            input_sql = self.genFullTypeSql(c6=c6)[0]
734
            try:
735
                self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
736
                raise Exception("should not reach here")
737
            except SchemalessError as err:
738
                tdSql.checkNotEqual(err.errno, 0)
J
jiajingbin 已提交
739

J
save  
jiajingbin 已提交
740
        # # binary 
J
jiajingbin 已提交
741 742
        stb_name = tdCom.getLongName(7, "letters")
        input_sql = f'{stb_name},t0=t c0=f,c1="{tdCom.getLongName(16374, "letters")}" 1626006833639000000'
743
        self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
J
jiajingbin 已提交
744
        input_sql = f'{stb_name},t0=t c0=f,c1="{tdCom.getLongName(16375, "letters")}" 1626006833639000000'
745
        try:
746
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
747
            raise Exception("should not reach here")
748
        except SchemalessError as err:
749
            tdSql.checkNotEqual(err.errno, 0)
J
jiajingbin 已提交
750 751 752

        # nchar
        # * legal nchar could not be larger than 16374/4
J
jiajingbin 已提交
753 754
        stb_name = tdCom.getLongName(7, "letters")
        input_sql = f'{stb_name},t0=t c0=f,c1=L"{tdCom.getLongName(4093, "letters")}" 1626006833639000000'
755
        self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
756

J
jiajingbin 已提交
757
        input_sql = f'{stb_name},t0=t c0=f,c1=L"{tdCom.getLongName(4094, "letters")}" 1626006833639000000'
758
        try:
759
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
760
            raise Exception("should not reach here")
761
        except SchemalessError as err:
762
            tdSql.checkNotEqual(err.errno, 0)
J
jiajingbin 已提交
763 764

    def tagColIllegalValueCheckCase(self):
J
jiajingbin 已提交
765

J
jiajingbin 已提交
766 767 768
        """
            test illegal tag col value
        """
J
jiajingbin 已提交
769
        tdCom.cleanTb()
J
jiajingbin 已提交
770 771
        # bool
        for i in ["TrUe", "tRue", "trUe", "truE", "FalsE", "fAlse", "faLse", "falSe", "falsE"]:
J
jiajingbin 已提交
772 773 774 775
            input_sql1, stb_name = self.genFullTypeSql(t0=i)
            self.resCmp(input_sql1, stb_name)
            input_sql2, stb_name = self.genFullTypeSql(c0=i)
            self.resCmp(input_sql2, stb_name)
J
jiajingbin 已提交
776 777 778 779 780 781 782 783 784 785 786

        # i8 i16 i32 i64 f32 f64
        for input_sql in [
                self.genFullTypeSql(c1="1s2i8")[0], 
                self.genFullTypeSql(c2="1s2i16")[0],
                self.genFullTypeSql(c3="1s2i32")[0],
                self.genFullTypeSql(c4="1s2i64")[0],
                self.genFullTypeSql(c5="11.1s45f32")[0],
                self.genFullTypeSql(c6="11.1s45f64")[0],
                self.genFullTypeSql(c9="1s1u64")[0]
            ]:
787
            try:
788
                self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
789
                raise Exception("should not reach here")
790
            except SchemalessError as err:
791
                tdSql.checkNotEqual(err.errno, 0)
J
modify  
jiajingbin 已提交
792

793
        # check binary and nchar blank
J
jiajingbin 已提交
794 795 796 797 798
        stb_name = tdCom.getLongName(7, "letters")
        input_sql1 = f'{stb_name}_1,t0=t c0=f,c1="abc aaa" 1626006833639000000'
        input_sql2 = f'{stb_name}_2,t0=t c0=f,c1=L"abc aaa" 1626006833639000000'
        input_sql3 = f'{stb_name}_3,t0=t,t1="abc aaa" c0=f 1626006833639000000'
        input_sql4 = f'{stb_name}_4,t0=t,t1=L"abc aaa" c0=f 1626006833639000000'
799
        for input_sql in [input_sql1, input_sql2, input_sql3, input_sql4]:
J
jiajingbin 已提交
800
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
801 802 803 804

        # check accepted binary and nchar symbols 
        # # * ~!@#$¥%^&*()-+={}|[]、「」:;
        for symbol in list('~!@#$¥%^&*()-+={}|[]、「」:;'):
J
jiajingbin 已提交
805 806 807 808
            input_sql1 = f'{stb_name},t0=t c0=f,c1="abc{symbol}aaa" 1626006833639000000'
            input_sql2 = f'{stb_name},t0=t,t1="abc{symbol}aaa" c0=f 1626006833639000000'
            self._conn.schemaless_insert([input_sql1], TDSmlProtocolType.LINE.value, None)
            self._conn.schemaless_insert([input_sql2], TDSmlProtocolType.LINE.value, None)
J
jiajingbin 已提交
809 810 811 812 813

    def duplicateIdTagColInsertCheckCase(self):
        """
            check duplicate Id Tag Col
        """
J
jiajingbin 已提交
814
        tdCom.cleanTb()
J
jiajingbin 已提交
815
        input_sql_id = self.genFullTypeSql(id_double_tag=True)[0]
816
        try:
J
jiajingbin 已提交
817
            self._conn.schemaless_insert([input_sql_id], TDSmlProtocolType.LINE.value, None)
818
            raise Exception("should not reach here")
819
        except SchemalessError as err:
820
            tdSql.checkNotEqual(err.errno, 0)
J
jiajingbin 已提交
821 822 823

        input_sql = self.genFullTypeSql()[0]
        input_sql_tag = input_sql.replace("t5", "t6")
824
        try:
J
jiajingbin 已提交
825
            self._conn.schemaless_insert([input_sql_tag], TDSmlProtocolType.LINE.value, None)
826
            raise Exception("should not reach here")
827
        except SchemalessError as err:
828
            tdSql.checkNotEqual(err.errno, 0)
J
jiajingbin 已提交
829 830 831

        input_sql = self.genFullTypeSql()[0]
        input_sql_col = input_sql.replace("c5", "c6")
832
        try:
J
jiajingbin 已提交
833
            self._conn.schemaless_insert([input_sql_col], TDSmlProtocolType.LINE.value, None)
834
            raise Exception("should not reach here")
835
        except SchemalessError as err:
836
            tdSql.checkNotEqual(err.errno, 0)
J
jiajingbin 已提交
837 838 839

        input_sql = self.genFullTypeSql()[0]
        input_sql_col = input_sql.replace("c5", "C6")
840
        try:
J
jiajingbin 已提交
841
            self._conn.schemaless_insert([input_sql_col], TDSmlProtocolType.LINE.value, None)
842
            raise Exception("should not reach here")
843
        except SchemalessError as err:
844
            tdSql.checkNotEqual(err.errno, 0)
J
jiajingbin 已提交
845 846 847 848 849 850

    ##### stb exist #####
    def noIdStbExistCheckCase(self):
        """
            case no id when stb exist
        """
J
jiajingbin 已提交
851
        tdCom.cleanTb()
852
        input_sql, stb_name = self.genFullTypeSql(tb_name="sub_table_0123456", t0="f", c0="f")
J
jiajingbin 已提交
853
        self.resCmp(input_sql, stb_name)
J
jiajingbin 已提交
854
        input_sql, stb_name = self.genFullTypeSql(stb_name=stb_name, id_noexist_tag=True, t0="f", c0="f")
J
jiajingbin 已提交
855 856 857 858 859 860 861 862
        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 已提交
863
        tdCom.cleanTb()
J
jiajingbin 已提交
864
        input_sql, stb_name = self.genFullTypeSql()
J
jiajingbin 已提交
865
        self.resCmp(input_sql, stb_name)
866
        self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
J
jiajingbin 已提交
867 868 869 870 871 872
        self.resCmp(input_sql, stb_name)

    def tagColBinaryNcharLengthCheckCase(self):
        """
            check length increase
        """
J
jiajingbin 已提交
873
        tdCom.cleanTb()
J
jiajingbin 已提交
874
        input_sql, stb_name = self.genFullTypeSql()
J
jiajingbin 已提交
875
        self.resCmp(input_sql, stb_name)
J
jiajingbin 已提交
876 877
        tb_name = tdCom.getLongName(5, "letters")
        input_sql, stb_name = self.genFullTypeSql(stb_name=stb_name, tb_name=tb_name, t7="\"binaryTagValuebinaryTagValue\"", t8="L\"ncharTagValuencharTagValue\"", c7="\"binaryTagValuebinaryTagValue\"", c8="L\"ncharTagValuencharTagValue\"")
J
jiajingbin 已提交
878 879 880 881 882
        self.resCmp(input_sql, stb_name, condition=f'where tbname like "{tb_name}"')

    def tagColAddDupIDCheckCase(self):
        """
            check column and tag count add, stb and tb duplicate
J
jiajingbin 已提交
883 884 885 886 887
            * 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 已提交
888
        """
J
jiajingbin 已提交
889 890
        tdCom.cleanTb()
        tb_name = tdCom.getLongName(7, "letters")
J
jiajingbin 已提交
891 892 893
        for db_update_tag in [0, 1]:
            if db_update_tag == 1 :
                self.createDb("test_update", db_update_tag=db_update_tag)
J
jiajingbin 已提交
894
            input_sql, stb_name = self.genFullTypeSql(tb_name=tb_name, t0="t", c0="t")
J
jiajingbin 已提交
895
            self.resCmp(input_sql, stb_name)
J
jiajingbin 已提交
896
            input_sql, stb_name = self.genFullTypeSql(stb_name=stb_name, tb_name=tb_name, t0="t", c0="f", ct_add_tag=True)
J
jiajingbin 已提交
897 898
            if db_update_tag == 1 :
                self.resCmp(input_sql, stb_name, condition=f'where tbname like "{tb_name}"', none_check_tag=True)
J
jiajingbin 已提交
899 900 901 902 903 904 905 906 907 908 909 910 911 912
                tdSql.query(f'select * from {stb_name} where tbname like "{tb_name}"')
                tdSql.checkData(0, 11, "ncharColValue")  
                tdSql.checkData(0, 12, True)  
                tdSql.checkData(0, 22, None)  
                tdSql.checkData(0, 23, None)  
            else:
                self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
                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)  
                tdSql.checkData(0, 22, None)  
                tdSql.checkData(0, 23, None)  
            self.createDb()
J
jiajingbin 已提交
913

J
jiajingbin 已提交
914 915 916 917
    def tagColAddCheckCase(self):
        """
            check column and tag count add
        """
J
jiajingbin 已提交
918 919
        tdCom.cleanTb()
        tb_name = tdCom.getLongName(7, "letters")
J
jiajingbin 已提交
920
        input_sql, stb_name = self.genFullTypeSql(tb_name=tb_name, t0="f", c0="f")
J
jiajingbin 已提交
921
        self.resCmp(input_sql, stb_name)
J
jiajingbin 已提交
922
        tb_name_1 = tdCom.getLongName(7, "letters")
J
jiajingbin 已提交
923
        input_sql, stb_name = self.genFullTypeSql(stb_name=stb_name, tb_name=tb_name_1, t0="f", c0="f", ct_add_tag=True)
J
jiajingbin 已提交
924 925 926 927 928 929 930 931 932 933
        self.resCmp(input_sql, stb_name, condition=f'where tbname like "{tb_name_1}"')
        res_row_list = self.resHandle(f"select c10,c11,t10,t11 from {tb_name}", True)[0]
        tdSql.checkEqual(res_row_list[0], ['None', 'None', 'None', 'None'])
        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 已提交
934
        tdCom.cleanTb()
J
jiajingbin 已提交
935
        input_sql, stb_name = self.genFullTypeSql(t0="f", c0="f", id_noexist_tag=True)
J
jiajingbin 已提交
936 937
        self.resCmp(input_sql, stb_name)
        tb_name1 = self.getNoIdTbName(stb_name)
J
jiajingbin 已提交
938
        input_sql, stb_name = self.genFullTypeSql(stb_name=stb_name, t0="f", c0="f", id_noexist_tag=True)
J
jiajingbin 已提交
939 940 941 942 943
        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)
J
jiajingbin 已提交
944
        input_sql, stb_name = self.genFullTypeSql(stb_name=stb_name, t0="f", c0="f", id_noexist_tag=True, ct_add_tag=True)
945
        self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
J
jiajingbin 已提交
946 947 948 949 950
        tb_name3 = self.getNoIdTbName(stb_name)
        tdSql.query(f"select * from {stb_name}")
        tdSql.checkRows(2)
        tdSql.checkNotEqual(tb_name1, tb_name3)

J
modify  
jiajingbin 已提交
951
    # * tag binary max is 16384, col+ts binary max  49151
J
jiajingbin 已提交
952
    def tagColBinaryMaxLengthCheckCase(self):
J
save  
jiajingbin 已提交
953
        """
954
            every binary and nchar must be length+2
J
save  
jiajingbin 已提交
955
        """
J
jiajingbin 已提交
956 957
        tdCom.cleanTb()
        stb_name = tdCom.getLongName(7, "letters")
J
jiajingbin 已提交
958
        tb_name = f'{stb_name}_1'
J
jiajingbin 已提交
959
        input_sql = f'{stb_name},id={tb_name},t0=t c0=f 1626006833639000000'
960
        self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
J
save  
jiajingbin 已提交
961

J
save  
jiajingbin 已提交
962
        # # * check col,col+ts max in describe ---> 16143
J
jiajingbin 已提交
963
        input_sql = f'{stb_name},t0=t c0=f,c1="{tdCom.getLongName(16374, "letters")}",c2="{tdCom.getLongName(16374, "letters")}",c3="{tdCom.getLongName(16374, "letters")}",c4="{tdCom.getLongName(12, "letters")}" 1626006833639000000'
964
        self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
965

J
modify  
jiajingbin 已提交
966
        tdSql.query(f"select * from {stb_name}")
J
jiajingbin 已提交
967 968
        tdSql.checkRows(2)
        input_sql = f'{stb_name},t0=t c0=f,c1="{tdCom.getLongName(16374, "letters")}",c2="{tdCom.getLongName(16374, "letters")}",c3="{tdCom.getLongName(16374, "letters")}",c4="{tdCom.getLongName(13, "letters")}" 1626006833639000000'
969
        try:
970
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
971
            raise Exception("should not reach here")
972
        except SchemalessError as err:
973
            tdSql.checkNotEqual(err.errno, 0)
J
modify  
jiajingbin 已提交
974
        tdSql.query(f"select * from {stb_name}")
J
jiajingbin 已提交
975
        tdSql.checkRows(2)
J
jiajingbin 已提交
976
    
J
modify  
jiajingbin 已提交
977
    # * tag nchar max is 16374/4, col+ts nchar max  49151
J
jiajingbin 已提交
978
    def tagColNcharMaxLengthCheckCase(self):
J
jiajingbin 已提交
979
        """
980
            check nchar length limit
J
jiajingbin 已提交
981
        """
J
jiajingbin 已提交
982 983
        tdCom.cleanTb()
        stb_name = tdCom.getLongName(7, "letters")
J
jiajingbin 已提交
984
        tb_name = f'{stb_name}_1'
J
jiajingbin 已提交
985 986
        input_sql = f'{stb_name},id={tb_name},t2={tdCom.getLongName(1, "letters")} c0=f 1626006833639000000'
        self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
J
save  
jiajingbin 已提交
987 988

        # * legal nchar could not be larger than 16374/4
J
jiajingbin 已提交
989
        input_sql = f'{stb_name},t1={tdCom.getLongName(4093, "letters")},t2={tdCom.getLongName(1, "letters")} c0=f 1626006833639000000'
990
        self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
J
modify  
jiajingbin 已提交
991 992
        tdSql.query(f"select * from {stb_name}")
        tdSql.checkRows(2)
J
jiajingbin 已提交
993
        input_sql = f'{stb_name},t1={tdCom.getLongName(4093, "letters")},t2={tdCom.getLongName(2, "letters")} c0=f 1626006833639000000'
994
        try:
995
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
996
            raise Exception("should not reach here")
997
        except SchemalessError as err:
998
            tdSql.checkNotEqual(err.errno, 0)
J
modify  
jiajingbin 已提交
999 1000
        tdSql.query(f"select * from {stb_name}")
        tdSql.checkRows(2)
J
jiajingbin 已提交
1001

J
jiajingbin 已提交
1002
        input_sql = f'{stb_name},t2={tdCom.getLongName(1, "letters")} c0=f,c1=L"{tdCom.getLongName(4093, "letters")}",c2=L"{tdCom.getLongName(4093, "letters")}",c3=L"{tdCom.getLongName(4093, "letters")}",c4=L"{tdCom.getLongName(4, "letters")}" 1626006833639000000'
1003
        self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
1004 1005
        tdSql.query(f"select * from {stb_name}")
        tdSql.checkRows(3)
J
jiajingbin 已提交
1006
        input_sql = f'{stb_name},t2={tdCom.getLongName(1, "letters")} c0=f,c1=L"{tdCom.getLongName(4093, "letters")}",c2=L"{tdCom.getLongName(4093, "letters")}",c3=L"{tdCom.getLongName(4093, "letters")}",c4=L"{tdCom.getLongName(5, "letters")}" 1626006833639000000'
1007
        try:
1008
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
1009
            raise Exception("should not reach here")
1010
        except SchemalessError as err:
1011
            tdSql.checkNotEqual(err.errno, 0)
1012 1013
        tdSql.query(f"select * from {stb_name}")
        tdSql.checkRows(3)
J
jiajingbin 已提交
1014 1015 1016 1017 1018

    def batchInsertCheckCase(self):
        """
            test batch insert
        """
J
jiajingbin 已提交
1019 1020
        tdCom.cleanTb()
        stb_name = tdCom.getLongName(8, "letters")
J
jiajingbin 已提交
1021
        tdSql.execute(f'create stable {stb_name}(ts timestamp, f int) tags(t1 bigint)')
J
jiajingbin 已提交
1022 1023 1024 1025 1026 1027 1028 1029 1030
        lines = ["st123456,t1=3i64,t2=4f64,t3=\"t3\" c1=3i64,c3=L\"passit\",c2=false,c4=4f64 1626006833639000000",
                "st123456,t1=4i64,t3=\"t4\",t2=5f64,t4=5f64 c1=3i64,c3=L\"passitagin\",c2=true,c4=5f64,c5=5f64 1626006833640000000",
                f"{stb_name},t2=5f64,t3=L\"ste\" c1=true,c2=4i64,c3=\"iam\" 1626056811823316532",
                "stf567890,t1=4i64,t3=\"t4\",t2=5f64,t4=5f64 c1=3i64,c3=L\"passitagin\",c2=true,c4=5f64,c5=5f64,c6=7u64 1626006933640000000",
                "st123456,t1=4i64,t2=5f64,t3=\"t4\" c1=3i64,c3=L\"passitagain\",c2=true,c4=5f64 1626006833642000000",
                f"{stb_name},t2=5f64,t3=L\"ste2\" c3=\"iamszhou\",c4=false 1626056811843316532",
                f"{stb_name},t2=5f64,t3=L\"ste2\" c3=\"iamszhou\",c4=false,c5=32i8,c6=64i16,c7=32i32,c8=88.88f32 1626056812843316532",
                "st123456,t1=4i64,t3=\"t4\",t2=5f64,t4=5f64 c1=3i64,c3=L\"passitagin\",c2=true,c4=5f64,c5=5f64,c6=7u64 1626006933640000000",
                "st123456,t1=4i64,t3=\"t4\",t2=5f64,t4=5f64   c1=3i64,c3=L\"passitagin_stf\",c2=false,c5=5f64,c6=7u64   1626006933641000000"
J
jiajingbin 已提交
1031
                ]
1032
        self._conn.schemaless_insert(lines, TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
J
jiajingbin 已提交
1033 1034 1035 1036 1037 1038
        tdSql.query('show stables')
        tdSql.checkRows(3)
        tdSql.query('show tables')
        tdSql.checkRows(6)
        tdSql.query('select * from st123456')
        tdSql.checkRows(5)
J
jiajingbin 已提交
1039
    
J
save  
jiajingbin 已提交
1040 1041 1042 1043
    def multiInsertCheckCase(self, count):
            """
                test multi insert
            """
J
jiajingbin 已提交
1044
            tdCom.cleanTb()
J
save  
jiajingbin 已提交
1045
            sql_list = []
J
jiajingbin 已提交
1046 1047
            stb_name = tdCom.getLongName(8, "letters")
            tdSql.execute(f'create stable {stb_name}(ts timestamp, f int) tags(t1 nchar(10))')
J
save  
jiajingbin 已提交
1048
            for i in range(count):
J
jiajingbin 已提交
1049
                input_sql = self.genFullTypeSql(stb_name=stb_name, t7=f'"{tdCom.getLongName(8, "letters")}"', c7=f'"{tdCom.getLongName(8, "letters")}"', id_noexist_tag=True)[0]
J
save  
jiajingbin 已提交
1050
                sql_list.append(input_sql)
J
jiajingbin 已提交
1051 1052 1053
            self._conn.schemaless_insert(sql_list, TDSmlProtocolType.LINE.value, None)
            tdSql.query('show tables')
            tdSql.checkRows(count)
J
save  
jiajingbin 已提交
1054

J
jiajingbin 已提交
1055 1056 1057 1058
    def batchErrorInsertCheckCase(self):
        """
            test batch error insert
        """
J
jiajingbin 已提交
1059 1060 1061
        tdCom.cleanTb()
        stb_name = tdCom.getLongName(8, "letters")
        lines = ["st123456,t1=3i64,t2=4f64,t3=\"t3\" c1=3i 64,c3=L\"passit\",c2=false,c4=4f64 1626006833639000000",
J
save  
jiajingbin 已提交
1062
                f"{stb_name},t2=5f64,t3=L\"ste\" c1=tRue,c2=4i64,c3=\"iam\" 1626056811823316532ns"]
1063
        try:
J
jiajingbin 已提交
1064
            self._conn.schemaless_insert(lines, TDSmlProtocolType.LINE.value, None)
1065
            raise Exception("should not reach here")
1066
        except SchemalessError as err:
1067
            tdSql.checkNotEqual(err.errno, 0)
J
jiajingbin 已提交
1068

J
jiajingbin 已提交
1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161
    def multiColsInsertCheckCase(self):
        """
            test multi cols insert
        """
        tdCom.cleanTb()
        input_sql = self.genFullTypeSql(c_multi_tag=True)[0]
        try:
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
            raise Exception("should not reach here")
        except SchemalessError as err:
            tdSql.checkNotEqual(err.errno, 0)
    
    def multiTagsInsertCheckCase(self):
        """
            test multi tags insert
        """
        tdCom.cleanTb()
        input_sql = self.genFullTypeSql(t_multi_tag=True)[0]
        try:
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
            raise Exception("should not reach here")
        except SchemalessError as err:
            tdSql.checkNotEqual(err.errno, 0)
    
    def blankColInsertCheckCase(self):
        """
            test blank col insert
        """
        tdCom.cleanTb()
        input_sql = self.genFullTypeSql(c_blank_tag=True)[0]
        try:
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
            raise Exception("should not reach here")
        except SchemalessError as err:
            tdSql.checkNotEqual(err.errno, 0)

    def blankTagInsertCheckCase(self):
        """
            test blank tag insert
        """
        tdCom.cleanTb()
        input_sql = self.genFullTypeSql(t_blank_tag=True)[0]
        try:
            self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
            raise Exception("should not reach here")
        except SchemalessError as err:
            tdSql.checkNotEqual(err.errno, 0)
    
    def chineseCheckCase(self):
        """
            check nchar ---> chinese
        """
        tdCom.cleanTb()
        input_sql, stb_name = self.genFullTypeSql(chinese_tag=True)
        self.resCmp(input_sql, stb_name)

    def spellCheckCase(self):
        stb_name = tdCom.getLongName(8, "letters")
        input_sql_list = [f'{stb_name}_1,t0=127I8,t1=32767I16,t2=2147483647I32,t3=9223372036854775807I64,t4=11.12345027923584F32,t5=22.123456789F64 c0=127I8,c1=32767I16,c2=2147483647I32,c3=9223372036854775807I64,c4=11.12345027923584F32,c5=22.123456789F64 1626006833639000000',
                            f'{stb_name}_2,t0=127I8,t1=32767I16,t2=2147483647I32,t3=9223372036854775807I64,t4=11.12345027923584F32,t5=22.123456789F64 c0=127I8,c1=32767I16,c2=2147483647I32,c3=9223372036854775807I64,c4=11.12345027923584F32,c5=22.123456789F64 1626006833639000000',
                            f'{stb_name}_3,t0=127I8,t1=32767I16,t2=2147483647I32,t3=9223372036854775807I64,t4=11.12345027923584F32,t5=22.123456789F64 c0=127I8,c1=32767I16,c2=2147483647I32,c3=9223372036854775807I64,c4=11.12345027923584F32,c5=22.123456789F64 1626006833639000000',
                            f'{stb_name}_4,t0=127I8,t1=32767I16,t2=2147483647I32,t3=9223372036854775807I64,t4=11.12345027923584F32,t5=22.123456789F64 c0=127I8,c1=32767I16,c2=2147483647I32,c3=9223372036854775807I64,c4=11.12345027923584F32,c5=22.123456789F64 1626006833639000000',
                            f'{stb_name}_5,t0=127I8,t1=32767I16,t2=2147483647I32,t3=9223372036854775807I64,t4=11.12345027923584F32,t5=22.123456789F64 c0=127I8,c1=32767I16,c2=2147483647I32,c3=9223372036854775807I64,c4=11.12345027923584F32,c5=22.123456789F64 1626006833639000000',
                            f'{stb_name}_6,t0=127I8,t1=32767I16,t2=2147483647I32,t3=9223372036854775807I64,t4=11.12345027923584F32,t5=22.123456789F64 c0=127I8,c1=32767I16,c2=2147483647I32,c3=9223372036854775807I64,c4=11.12345027923584F32,c5=22.123456789F64 1626006833639000000',
                            f'{stb_name}_7,t0=127I8,t1=32767I16,t2=2147483647I32,t3=9223372036854775807I64,t4=11.12345027923584F32,t5=22.123456789F64 c0=127I8,c1=32767I16,c2=2147483647I32,c3=9223372036854775807I64,c4=11.12345027923584F32,c5=22.123456789F64 1626006833639000000',
                            f'{stb_name}_8,t0=127I8,t1=32767I16,t2=2147483647I32,t3=9223372036854775807I64,t4=11.12345027923584F32,t5=22.123456789F64 c0=127I8,c1=32767I16,c2=2147483647I32,c3=9223372036854775807I64,c4=11.12345027923584F32,c5=22.123456789F64 1626006833639000000',
                            f'{stb_name}_9,t0=127I8,t1=32767I16,t2=2147483647I32,t3=9223372036854775807I64,t4=11.12345027923584F32,t5=22.123456789F64 c0=127I8,c1=32767I16,c2=2147483647I32,c3=9223372036854775807I64,c4=11.12345027923584F32,c5=22.123456789F64 1626006833639000000',
                            f'{stb_name}_10,t0=127I8,t1=32767I16,t2=2147483647I32,t3=9223372036854775807I64,t4=11.12345027923584F32,t5=22.123456789F64 c0=127I8,c1=32767I16,c2=2147483647I32,c3=9223372036854775807I64,c4=11.12345027923584F32,c5=22.123456789F64 1626006833639000000']
        for input_sql in input_sql_list:
            stb_name = input_sql.split(',')[0]
            self.resCmp(input_sql, stb_name)

    def defaultTypeCheckCase(self):
        stb_name = tdCom.getLongName(8, "letters")
        input_sql_list = [f'{stb_name}_1,t0=127,t1=32767I16,t2=2147483647I32,t3=9223372036854775807,t4=11.12345027923584F32,t5=22.123456789F64 c0=127,c1=32767I16,c2=2147483647I32,c3=9223372036854775807,c4=11.12345027923584F32,c5=22.123456789F64 1626006833639000000',
                            f'{stb_name}_2,t0=127I8,t1=32767I16,t2=2147483647I32,t3=9223372036854775807I64,t4=11.12345027923584F32,t5=22.123456789 c0=127I8,c1=32767I16,c2=2147483647I32,c3=9223372036854775807I64,c4=11.12345027923584F32,c5=22.123456789 1626006833639000000',
                            f'{stb_name}_3,t0=127I8,t1=32767I16,t2=2147483647I32,t3=9223372036854775807I64,t4=11.12345027923584F32,t5=10e5F32 c0=127I8,c1=32767I16,c2=2147483647I32,c3=9223372036854775807I64,c4=11.12345027923584F32,c5=10e5F64 1626006833639000000',
                            f'{stb_name}_4,t0=127I8,t1=32767I16,t2=2147483647I32,t3=9223372036854775807I64,t4=11.12345027923584F32,t5=10.0e5f64 c0=127I8,c1=32767I16,c2=2147483647I32,c3=9223372036854775807I64,c4=11.12345027923584F32,c5=10.0e5f32 1626006833639000000',
                            f'{stb_name}_5,t0=127I8,t1=32767I16,t2=2147483647I32,t3=9223372036854775807I64,t4=11.12345027923584F32,t5=-10.0e5 c0=127I8,c1=32767I16,c2=2147483647I32,c3=9223372036854775807I64,c4=11.12345027923584F32,c5=-10.0e5 1626006833639000000']
        for input_sql in input_sql_list:
            stb_name = input_sql.split(",")[0]
            self.resCmp(input_sql, stb_name)

    def tbnameTagsColsNameCheckCase(self):
        input_sql = 'rFa$sta,id=rFas$ta_1,Tt!0=true,tT@1=127i8,t#2=32767i16,\"t$3\"=2147483647i32,t%4=9223372036854775807i64,t^5=11.12345f32,t&6=22.123456789f64,t*7=\"ddzhiksj\",t!@#$%^&*()_+[];:<>?,9=L\"ncharTagValue\" C)0=True,c{1=127i8,c[2=32767i16,c;3=2147483647i32,c:4=9223372036854775807i64,c<5=11.12345f32,c>6=22.123456789f64,c?7=\"bnhwlgvj\",c.8=L\"ncharTagValue\",c!@#$%^&*()_+[];:<>?,=7u64 1626006933640000000'
        self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
        query_sql = 'select * from `rfa$sta`'
        query_res = tdSql.query(query_sql, True)
        tdSql.checkEqual(query_res, [(datetime.datetime(2021, 7, 11, 20, 35, 33, 640000), True, 127, 32767, 2147483647, 9223372036854775807, 11.12345027923584, 22.123456789, 'bnhwlgvj', 'ncharTagValue', 7, 'true', '127i8', '32767i16', '2147483647i32', '9223372036854775807i64', '11.12345f32', '22.123456789f64', '"ddzhiksj"', 'L"ncharTagValue"')])
        col_tag_res = tdSql.getColNameList(query_sql)
        tdSql.checkEqual(col_tag_res, ['_ts', 'c)0', 'c{1', 'c[2', 'c;3', 'c:4', 'c<5', 'c>6', 'c?7', 'c.8', 'c!@#$%^&*()_+[];:<>?,', 'tt!0', 'tt@1', 't#2', '"t$3"', 't%4', 't^5', 't&6', 't*7', 't!@#$%^&*()_+[];:<>?,9'])
        tdSql.execute('drop table `rfa$sta`')

J
jiajingbin 已提交
1162
    def genSqlList(self, count=5, stb_name="", tb_name=""):
J
save  
jiajingbin 已提交
1163 1164 1165
        """
            stb --> supertable
            tb  --> table
J
save  
jiajingbin 已提交
1166 1167 1168
            ts  --> timestamp, same default
            col --> column, same default
            tag --> tag, same default
J
save  
jiajingbin 已提交
1169 1170
            d   --> different
            s   --> same
J
save  
jiajingbin 已提交
1171 1172
            a   --> add
            m   --> minus
J
save  
jiajingbin 已提交
1173 1174
        """
        d_stb_d_tb_list = list()
J
save  
jiajingbin 已提交
1175 1176
        s_stb_s_tb_list = list()
        s_stb_s_tb_a_col_a_tag_list = list()
J
save  
jiajingbin 已提交
1177
        s_stb_s_tb_m_col_m_tag_list = list()
J
jiajingbin 已提交
1178 1179 1180 1181
        s_stb_d_tb_list = list()
        s_stb_d_tb_a_col_m_tag_list = list()
        s_stb_d_tb_a_tag_m_col_list = list()
        s_stb_s_tb_d_ts_list = list()
J
modify  
jiajingbin 已提交
1182 1183 1184 1185 1186
        s_stb_s_tb_d_ts_a_col_m_tag_list = list()
        s_stb_s_tb_d_ts_a_tag_m_col_list = list()
        s_stb_d_tb_d_ts_list = list()
        s_stb_d_tb_d_ts_a_col_m_tag_list = list()
        s_stb_d_tb_d_ts_a_tag_m_col_list = list()
J
save  
jiajingbin 已提交
1187
        for i in range(count):
J
jiajingbin 已提交
1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200
            d_stb_d_tb_list.append(self.genFullTypeSql(c0="t"))
            s_stb_s_tb_list.append(self.genFullTypeSql(stb_name=stb_name, tb_name=tb_name, t7=f'"{tdCom.getLongName(8, "letters")}"', c7=f'"{tdCom.getLongName(8, "letters")}"'))
            s_stb_s_tb_a_col_a_tag_list.append(self.genFullTypeSql(stb_name=stb_name, tb_name=tb_name, t7=f'"{tdCom.getLongName(8, "letters")}"', c7=f'"{tdCom.getLongName(8, "letters")}"', ct_add_tag=True))
            s_stb_s_tb_m_col_m_tag_list.append(self.genFullTypeSql(stb_name=stb_name, tb_name=tb_name, t7=f'"{tdCom.getLongName(8, "letters")}"', c7=f'"{tdCom.getLongName(8, "letters")}"', ct_min_tag=True))
            s_stb_d_tb_list.append(self.genFullTypeSql(stb_name=stb_name, t7=f'"{tdCom.getLongName(8, "letters")}"', c7=f'"{tdCom.getLongName(8, "letters")}"', id_noexist_tag=True))
            s_stb_d_tb_a_col_m_tag_list.append(self.genFullTypeSql(stb_name=stb_name, t7=f'"{tdCom.getLongName(8, "letters")}"', c7=f'"{tdCom.getLongName(8, "letters")}"', id_noexist_tag=True, ct_am_tag=True))
            s_stb_d_tb_a_tag_m_col_list.append(self.genFullTypeSql(stb_name=stb_name, t7=f'"{tdCom.getLongName(8, "letters")}"', c7=f'"{tdCom.getLongName(8, "letters")}"', id_noexist_tag=True, ct_ma_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")}"', c7=f'"{tdCom.getLongName(8, "letters")}"', ts=0))
            s_stb_s_tb_d_ts_a_col_m_tag_list.append(self.genFullTypeSql(stb_name=stb_name, tb_name=tb_name, t7=f'"{tdCom.getLongName(8, "letters")}"', c7=f'"{tdCom.getLongName(8, "letters")}"', ts=0, ct_am_tag=True))
            s_stb_s_tb_d_ts_a_tag_m_col_list.append(self.genFullTypeSql(stb_name=stb_name, tb_name=tb_name, t7=f'"{tdCom.getLongName(8, "letters")}"', c7=f'"{tdCom.getLongName(8, "letters")}"', ts=0, ct_ma_tag=True))
            s_stb_d_tb_d_ts_list.append(self.genFullTypeSql(stb_name=stb_name, t7=f'"{tdCom.getLongName(8, "letters")}"', c7=f'"{tdCom.getLongName(8, "letters")}"', id_noexist_tag=True, ts=0))
            s_stb_d_tb_d_ts_a_col_m_tag_list.append(self.genFullTypeSql(stb_name=stb_name, t7=f'"{tdCom.getLongName(8, "letters")}"', c7=f'"{tdCom.getLongName(8, "letters")}"', id_noexist_tag=True, ts=0, ct_am_tag=True))
            s_stb_d_tb_d_ts_a_tag_m_col_list.append(self.genFullTypeSql(stb_name=stb_name, t7=f'"{tdCom.getLongName(8, "letters")}"', c7=f'"{tdCom.getLongName(8, "letters")}"', id_noexist_tag=True, ts=0, ct_ma_tag=True))
J
jiajingbin 已提交
1201

J
modify  
jiajingbin 已提交
1202 1203 1204 1205
        return d_stb_d_tb_list, s_stb_s_tb_list, s_stb_s_tb_a_col_a_tag_list, s_stb_s_tb_m_col_m_tag_list, \
            s_stb_d_tb_list, s_stb_d_tb_a_col_m_tag_list, s_stb_d_tb_a_tag_m_col_list, s_stb_s_tb_d_ts_list, \
            s_stb_s_tb_d_ts_a_col_m_tag_list, s_stb_s_tb_d_ts_a_tag_m_col_list, s_stb_d_tb_d_ts_list, \
            s_stb_d_tb_d_ts_a_col_m_tag_list, s_stb_d_tb_d_ts_a_tag_m_col_list
J
jiajingbin 已提交
1206

J
save  
jiajingbin 已提交
1207 1208 1209 1210

    def genMultiThreadSeq(self, sql_list):
        tlist = list()
        for insert_sql in sql_list:
J
jiajingbin 已提交
1211
            t = threading.Thread(target=self._conn.schemaless_insert,args=([insert_sql[0]], TDSmlProtocolType.LINE.value, None))
J
save  
jiajingbin 已提交
1212 1213 1214 1215 1216 1217 1218
            tlist.append(t)
        return tlist

    def multiThreadRun(self, tlist):
        for t in tlist:
            t.start()
        for t in tlist:
J
jiajingbin 已提交
1219
            t.join()
J
save  
jiajingbin 已提交
1220

J
save  
jiajingbin 已提交
1221
    def stbInsertMultiThreadCheckCase(self):
J
jiajingbin 已提交
1222 1223 1224
        """
            thread input different stb
        """
J
jiajingbin 已提交
1225
        tdCom.cleanTb()
J
jiajingbin 已提交
1226 1227
        input_sql = self.genSqlList()[0]
        self.multiThreadRun(self.genMultiThreadSeq(input_sql))
J
jiajingbin 已提交
1228 1229 1230 1231 1232 1233 1234
        tdSql.query(f"show tables;")
        tdSql.checkRows(5)
    
    def sStbStbDdataInsertMultiThreadCheckCase(self):
        """
            thread input same stb tb, different data, result keep first data
        """
J
jiajingbin 已提交
1235 1236
        tdCom.cleanTb()
        tb_name = tdCom.getLongName(7, "letters")
J
jiajingbin 已提交
1237
        input_sql, stb_name = self.genFullTypeSql(tb_name=tb_name)
J
jiajingbin 已提交
1238 1239 1240 1241 1242 1243 1244
        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;")
        tdSql.checkRows(1)
        expected_tb_name = self.getNoIdTbName(stb_name)[0]
        tdSql.checkEqual(tb_name, expected_tb_name)
J
jiajingbin 已提交
1245 1246
        tdSql.query(f"select * from {stb_name};")
        tdSql.checkRows(1)
J
jiajingbin 已提交
1247 1248 1249 1250 1251

    def sStbStbDdataAtcInsertMultiThreadCheckCase(self):
        """
            thread input same stb tb, different data, add columes and tags,  result keep first data
        """
J
jiajingbin 已提交
1252 1253
        tdCom.cleanTb()
        tb_name = tdCom.getLongName(7, "letters")
J
jiajingbin 已提交
1254
        input_sql, stb_name = self.genFullTypeSql(tb_name=tb_name)
J
jiajingbin 已提交
1255 1256 1257 1258 1259 1260 1261
        self.resCmp(input_sql, stb_name)
        s_stb_s_tb_a_col_a_tag_list = self.genSqlList(stb_name=stb_name, tb_name=tb_name)[2]
        self.multiThreadRun(self.genMultiThreadSeq(s_stb_s_tb_a_col_a_tag_list))
        tdSql.query(f"show tables;")
        tdSql.checkRows(1)
        expected_tb_name = self.getNoIdTbName(stb_name)[0]
        tdSql.checkEqual(tb_name, expected_tb_name)
J
jiajingbin 已提交
1262 1263
        tdSql.query(f"select * from {stb_name};")
        tdSql.checkRows(1)
J
jiajingbin 已提交
1264 1265 1266
    
    def sStbStbDdataMtcInsertMultiThreadCheckCase(self):
        """
J
jiajingbin 已提交
1267
            thread input same stb tb, different data, minus columes and tags,  result keep first data
J
jiajingbin 已提交
1268
        """
J
jiajingbin 已提交
1269 1270
        tdCom.cleanTb()
        tb_name = tdCom.getLongName(7, "letters")
J
jiajingbin 已提交
1271
        input_sql, stb_name = self.genFullTypeSql(tb_name=tb_name)
J
jiajingbin 已提交
1272 1273 1274 1275 1276 1277 1278
        self.resCmp(input_sql, stb_name)
        s_stb_s_tb_m_col_m_tag_list = self.genSqlList(stb_name=stb_name, tb_name=tb_name)[3]
        self.multiThreadRun(self.genMultiThreadSeq(s_stb_s_tb_m_col_m_tag_list))
        tdSql.query(f"show tables;")
        tdSql.checkRows(1)
        expected_tb_name = self.getNoIdTbName(stb_name)[0]
        tdSql.checkEqual(tb_name, expected_tb_name)
J
jiajingbin 已提交
1279 1280 1281 1282 1283 1284 1285
        tdSql.query(f"select * from {stb_name};")
        tdSql.checkRows(1)

    def sStbDtbDdataInsertMultiThreadCheckCase(self):
        """
            thread input same stb, different tb, different data
        """
J
jiajingbin 已提交
1286
        tdCom.cleanTb()
J
jiajingbin 已提交
1287
        input_sql, stb_name = self.genFullTypeSql()
J
jiajingbin 已提交
1288 1289 1290 1291 1292 1293 1294 1295 1296 1297
        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)

    def sStbDtbDdataAcMtInsertMultiThreadCheckCase(self):
        """
            thread input same stb, different tb, different data, add col, mul tag
        """
J
jiajingbin 已提交
1298
        tdCom.cleanTb()
J
jiajingbin 已提交
1299
        input_sql, stb_name = self.genFullTypeSql()
J
jiajingbin 已提交
1300
        self.resCmp(input_sql, stb_name)
1301
        # s_stb_d_tb_a_col_m_tag_list = self.genSqlList(stb_name=stb_name)[5]
J
jiajingbin 已提交
1302 1303 1304 1305 1306
        s_stb_d_tb_a_col_m_tag_list = [(f'{stb_name},t0=F,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64 c0=t,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7="ngxgzdzs",c8=L"ncharColValue",c9=7u64,c11=L"ncharColValue",c10=F 1626006833639000000', 'hpxbys'), \
                                        (f'{stb_name},t0=True,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64 c0=T,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7="vvfrdtty",c8=L"ncharColValue",c9=7u64,c11=L"ncharColValue",c10=True 1626006833639000000', 'hpxbys'), \
                                        (f'{stb_name},t0=F,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64 c0=False,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7="kzscucnt",c8=L"ncharColValue",c9=7u64,c11=L"ncharColValue",c10=f 1626006833639000000', 'hpxbys'), \
                                        (f'{stb_name},t0=F,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64 c0=f,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7="asegdbqk",c8=L"ncharColValue",c9=7u64,c11=L"ncharColValue",c10=false 1626006833639000000', 'hpxbys'), \
                                        (f'{stb_name},t0=True,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64 c0=true,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7="yvqnhgmn",c8=L"ncharColValue",c9=7u64,c11=L"ncharColValue",c10=T 1626006833639000000', 'hpxbys')]
J
jiajingbin 已提交
1307 1308
        self.multiThreadRun(self.genMultiThreadSeq(s_stb_d_tb_a_col_m_tag_list))
        tdSql.query(f"show tables;")
1309
        tdSql.checkRows(3)
J
jiajingbin 已提交
1310 1311 1312 1313 1314

    def sStbDtbDdataAtMcInsertMultiThreadCheckCase(self):
        """
            thread input same stb, different tb, different data, add tag, mul col
        """
J
jiajingbin 已提交
1315
        tdCom.cleanTb()
J
jiajingbin 已提交
1316
        input_sql, stb_name = self.genFullTypeSql()
J
jiajingbin 已提交
1317 1318 1319 1320 1321 1322 1323 1324 1325 1326
        self.resCmp(input_sql, stb_name)
        s_stb_d_tb_a_tag_m_col_list = self.genSqlList(stb_name=stb_name)[6]
        self.multiThreadRun(self.genMultiThreadSeq(s_stb_d_tb_a_tag_m_col_list))
        tdSql.query(f"show tables;")
        tdSql.checkRows(6)

    def sStbStbDdataDtsInsertMultiThreadCheckCase(self):
        """
            thread input same stb tb, different ts
        """
J
jiajingbin 已提交
1327 1328
        tdCom.cleanTb()
        tb_name = tdCom.getLongName(7, "letters")
J
jiajingbin 已提交
1329
        input_sql, stb_name = self.genFullTypeSql(tb_name=tb_name)
J
jiajingbin 已提交
1330
        self.resCmp(input_sql, stb_name)
1331
        # s_stb_s_tb_d_ts_list = self.genSqlList(stb_name=stb_name, tb_name=tb_name)[7]
J
jiajingbin 已提交
1332 1333 1334 1335 1336
        s_stb_s_tb_d_ts_list =[(f'{stb_name},id={tb_name},t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7="tgqkvsws",t8=L"ncharTagValue" c0=f,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7="htvnnldm",c8=L"ncharColValue",c9=7u64 0', 'sfzqdz'), \
                                (f'{stb_name},id={tb_name},t0=f,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7="fvrhhqiy",t8=L"ncharTagValue" c0=False,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7="gybqvhos",c8=L"ncharColValue",c9=7u64 0', 'sfzqdz'), \
                                (f'{stb_name},id={tb_name},t0=f,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7="vifkabhu",t8=L"ncharTagValue" c0=t,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7="zlvxgquy",c8=L"ncharColValue",c9=7u64 0', 'sfzqdz'), \
                                (f'{stb_name},id={tb_name},t0=True,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7="lsyotcrn",t8=L"ncharTagValue" c0=False,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7="oaupfgtz",c8=L"ncharColValue",c9=7u64 0', 'sfzqdz'), \
                                (f'{stb_name},id={tb_name},t0=T,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7="jrwamcgy",t8=L"ncharTagValue" c0=F,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7="vgzadjsh",c8=L"ncharColValue",c9=7u64 0', 'sfzqdz')]
J
jiajingbin 已提交
1337 1338 1339
        self.multiThreadRun(self.genMultiThreadSeq(s_stb_s_tb_d_ts_list))
        tdSql.query(f"show tables;")
        tdSql.checkRows(1)
1340 1341 1342
        # ! Small probability bug ---> temporarily delete it
        # tdSql.query(f"select * from {stb_name}")
        # tdSql.checkRows(6)
J
jiajingbin 已提交
1343

J
modify  
jiajingbin 已提交
1344 1345 1346 1347
    def sStbStbDdataDtsAcMtInsertMultiThreadCheckCase(self):
        """
            thread input same stb tb, different ts, add col, mul tag
        """
J
jiajingbin 已提交
1348 1349
        tdCom.cleanTb()
        tb_name = tdCom.getLongName(7, "letters")
J
modify  
jiajingbin 已提交
1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366
        input_sql, stb_name = self.genFullTypeSql(tb_name=tb_name)
        self.resCmp(input_sql, stb_name)
        s_stb_s_tb_d_ts_a_col_m_tag_list = self.genSqlList(stb_name=stb_name, tb_name=tb_name)[8]
        self.multiThreadRun(self.genMultiThreadSeq(s_stb_s_tb_d_ts_a_col_m_tag_list))
        tdSql.query(f"show tables;")
        tdSql.checkRows(1)
        tdSql.query(f"select * from {stb_name}")
        tdSql.checkRows(6)
        tdSql.query(f"select * from {stb_name} where t8 is not NULL")
        tdSql.checkRows(6)
        tdSql.query(f"select * from {tb_name} where c11 is not NULL;")
        tdSql.checkRows(5)

    def sStbStbDdataDtsAtMcInsertMultiThreadCheckCase(self):
        """
            thread input same stb tb, different ts, add tag, mul col
        """
J
jiajingbin 已提交
1367 1368
        tdCom.cleanTb()
        tb_name = tdCom.getLongName(7, "letters")
J
modify  
jiajingbin 已提交
1369 1370
        input_sql, stb_name = self.genFullTypeSql(tb_name=tb_name)
        self.resCmp(input_sql, stb_name)
1371
        # s_stb_s_tb_d_ts_a_tag_m_col_list = self.genSqlList(stb_name=stb_name, tb_name=tb_name)[9]
J
jiajingbin 已提交
1372 1373 1374 1375 1376
        s_stb_s_tb_d_ts_a_tag_m_col_list = [(f'{stb_name},id={tb_name},t0=T,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7="xsajdfjc",t8=L"ncharTagValue",t11=127i8,t10=L"ncharTagValue" c0=f,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64 0', 'rgqcfb'), \
                                            (f'{stb_name},id={tb_name},t0=T,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7="qzeyolgt",t8=L"ncharTagValue",t11=127i8,t10=L"ncharTagValue" c0=True,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64 0', 'rgqcfb'), \
                                            (f'{stb_name},id={tb_name},t0=False,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7="suxqziwh",t8=L"ncharTagValue",t11=127i8,t10=L"ncharTagValue" c0=False,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64 0', 'rgqcfb'), \
                                            (f'{stb_name},id={tb_name},t0=False,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7="vapolpgr",t8=L"ncharTagValue",t11=127i8,t10=L"ncharTagValue" c0=t,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64 0', 'rgqcfb'), \
                                            (f'{stb_name},id={tb_name},t0=False,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7="eustwpfl",t8=L"ncharTagValue",t11=127i8,t10=L"ncharTagValue" c0=t,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64 0', 'rgqcfb')]
J
modify  
jiajingbin 已提交
1377 1378 1379 1380 1381 1382 1383 1384 1385 1386
        self.multiThreadRun(self.genMultiThreadSeq(s_stb_s_tb_d_ts_a_tag_m_col_list))
        tdSql.query(f"show tables;")
        tdSql.checkRows(1)
        tdSql.query(f"select * from {stb_name}")
        tdSql.checkRows(6)
        for c in ["c7", "c8", "c9"]:
            tdSql.query(f"select * from {stb_name} where {c} is NULL")
            tdSql.checkRows(5)        
        for t in ["t10", "t11"]:
            tdSql.query(f"select * from {stb_name} where {t} is not NULL;")
1387
            tdSql.checkRows(0)
J
modify  
jiajingbin 已提交
1388 1389 1390 1391 1392

    def sStbDtbDdataDtsInsertMultiThreadCheckCase(self):
        """
            thread input same stb, different tb, data, ts
        """
J
jiajingbin 已提交
1393
        tdCom.cleanTb()
J
modify  
jiajingbin 已提交
1394 1395 1396 1397 1398 1399
        input_sql, stb_name = self.genFullTypeSql()
        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)
J
jiajingbin 已提交
1400

J
modify  
jiajingbin 已提交
1401 1402 1403 1404
    def sStbDtbDdataDtsAcMtInsertMultiThreadCheckCase(self):
        """
            thread input same stb, different tb, data, ts, add col, mul tag
        """
J
jiajingbin 已提交
1405
        tdCom.cleanTb()
J
modify  
jiajingbin 已提交
1406 1407
        input_sql, stb_name = self.genFullTypeSql()
        self.resCmp(input_sql, stb_name)
1408 1409
        # s_stb_d_tb_d_ts_a_col_m_tag_list = self.genSqlList(stb_name=stb_name)[11]
        s_stb_d_tb_d_ts_a_col_m_tag_list = [(f'{stb_name},t0=True,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64 c0=f,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7="eltflgpz",c8=L"ncharColValue",c9=7u64,c11=L"ncharColValue",c10=True 0', 'ynnlov'), \
J
jiajingbin 已提交
1410
                                            (f'{stb_name},t0=True,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64 c0=False,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7="ysznggwl",c8=L"ncharColValue",c9=7u64,c11=L"ncharColValue",c10=t 0', 'ynnlov'), \
1411
                                            (f'{stb_name},t0=f,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64 c0=f,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7="nxwjucch",c8=L"ncharColValue",c9=7u64,c11=L"ncharColValue",c10=f 0', 'ynnlov'), \
J
jiajingbin 已提交
1412 1413
                                            (f'{stb_name},t0=f,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64 c0=T,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7="fzseicnt",c8=L"ncharColValue",c9=7u64,c11=L"ncharColValue",c10=F 0', 'ynnlov'), \
                                            (f'{stb_name},t0=f,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64 c0=F,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7="zwgurhdp",c8=L"ncharColValue",c9=7u64,c11=L"ncharColValue",c10=False 0', 'ynnlov')]
J
modify  
jiajingbin 已提交
1414 1415
        self.multiThreadRun(self.genMultiThreadSeq(s_stb_d_tb_d_ts_a_col_m_tag_list))
        tdSql.query(f"show tables;")
1416
        tdSql.checkRows(3)
J
modify  
jiajingbin 已提交
1417 1418

    def test(self):
J
jiajingbin 已提交
1419
        input_sql1 = "rfa$sta,id=rfas$ta_1,T!0=true,t@1=127i8,t#2=32767i16,t$3=2147483647i32,t%4=9223372036854775807i64,t^5=11.12345f32,t&6=22.123456789f64,t*7=\"ddzhiksj\",t(8=L\"ncharTagValue\" C)0=True,c{1=127i8,c[2=32767i16,c;3=2147483647i32,c:4=9223372036854775807i64,c<5=11.12345f32,c>6=22.123456789f64,c?7=\"bnhwlgvj\",c.8=L\"ncharTagValue\",c,9=7u64 1626006933640000000ns"
1420
        try:
J
jiajingbin 已提交
1421 1422
            self._conn.schemaless_insert([input_sql1], TDSmlProtocolType.LINE.value, None)
            # self._conn.schemaless_insert([input_sql2])
1423
        except SchemalessError as err:
1424
            print(err.errno)
J
save  
jiajingbin 已提交
1425

J
jiajingbin 已提交
1426 1427 1428 1429 1430
    def runAll(self):
        self.initCheckCase()
        self.boolTypeCheckCase()
        self.symbolsCheckCase()
        self.tsCheckCase()
J
jiajingbin 已提交
1431 1432
        self.zeroTsCheckCase()
        self.iuCheckCase()
J
jiajingbin 已提交
1433
        self.idSeqCheckCase()
J
jiajingbin 已提交
1434
        self.idLetterCheckCase()
J
jiajingbin 已提交
1435 1436
        self.noIdCheckCase()
        self.maxColTagCheckCase()
J
jiajingbin 已提交
1437
        self.stbTbNameCheckCase()
J
jiajingbin 已提交
1438 1439 1440 1441
        self.idStartWithNumCheckCase()
        self.nowTsCheckCase()
        self.dateFormatTsCheckCase()
        self.illegalTsCheckCase()
J
jiajingbin 已提交
1442
        self.tbnameCheckCase()
J
jiajingbin 已提交
1443 1444 1445 1446 1447 1448 1449
        self.tagValueLengthCheckCase()
        self.colValueLengthCheckCase()
        self.tagColIllegalValueCheckCase()
        self.duplicateIdTagColInsertCheckCase()
        self.noIdStbExistCheckCase()
        self.duplicateInsertExistCheckCase()
        self.tagColBinaryNcharLengthCheckCase()
J
jiajingbin 已提交
1450
        self.tagColAddDupIDCheckCase()
J
jiajingbin 已提交
1451 1452 1453
        self.tagColAddCheckCase()
        self.tagMd5Check()
        self.tagColBinaryMaxLengthCheckCase()
1454
        self.tagColNcharMaxLengthCheckCase()
J
jiajingbin 已提交
1455
        self.batchInsertCheckCase()
J
jiajingbin 已提交
1456
        self.multiInsertCheckCase(100)
J
jiajingbin 已提交
1457
        self.batchErrorInsertCheckCase()
J
jiajingbin 已提交
1458 1459 1460 1461 1462 1463 1464 1465 1466
        self.multiColsInsertCheckCase()
        self.multiTagsInsertCheckCase()
        self.blankColInsertCheckCase()
        self.blankTagInsertCheckCase()
        self.chineseCheckCase()
        self.spellCheckCase()
        self.defaultTypeCheckCase()
        self.tbnameTagsColsNameCheckCase()

J
modify  
jiajingbin 已提交
1467
        # MultiThreads
J
jiajingbin 已提交
1468 1469 1470 1471 1472
        self.stbInsertMultiThreadCheckCase()
        self.sStbStbDdataInsertMultiThreadCheckCase()
        self.sStbStbDdataAtcInsertMultiThreadCheckCase()
        self.sStbStbDdataMtcInsertMultiThreadCheckCase()
        self.sStbDtbDdataInsertMultiThreadCheckCase()
J
jiajingbin 已提交
1473

J
jiajingbin 已提交
1474
        # ! concurrency conflict
1475 1476
        self.sStbDtbDdataAcMtInsertMultiThreadCheckCase()
        self.sStbDtbDdataAtMcInsertMultiThreadCheckCase()
J
jiajingbin 已提交
1477
        self.sStbStbDdataDtsInsertMultiThreadCheckCase()
J
jiajingbin 已提交
1478

J
jiajingbin 已提交
1479
        # ! concurrency conflict
1480 1481
        self.sStbStbDdataDtsAcMtInsertMultiThreadCheckCase()
        self.sStbStbDdataDtsAtMcInsertMultiThreadCheckCase()
J
modify  
jiajingbin 已提交
1482 1483 1484
        self.sStbDtbDdataDtsInsertMultiThreadCheckCase()

        # ! concurrency conflict
1485
        self.sStbDtbDdataDtsAcMtInsertMultiThreadCheckCase()
J
modify  
jiajingbin 已提交
1486 1487 1488



J
jiajingbin 已提交
1489 1490 1491
    def run(self):
        print("running {}".format(__file__))
        self.createDb()
1492
        try:
J
jiajingbin 已提交
1493 1494
            # self.tbnameTagsColsNameCheckCase()
            # self.influxTsCheckCase()
1495 1496 1497 1498
            self.runAll()
        except Exception as err:
            print(''.join(traceback.format_exception(None, err, err.__traceback__)))
            raise err
1499 1500
        # self.tagColIllegalValueCheckCase()
        # self.test()
J
jiajingbin 已提交
1501 1502 1503 1504 1505

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

1506
tdCases.addWindows(__file__, TDTestCase())
J
jiajingbin 已提交
1507
tdCases.addLinux(__file__, TDTestCase())