char_length.py 11.2 KB
Newer Older
C
cpwu 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
from util.log import *
from util.sql import *
from util.cases import *
from util.dnodes import *


INT_COL     = "c1"
BINT_COL    = "c2"
SINT_COL    = "c3"
TINT_COL    = "c4"
FLOAT_COL   = "c5"
DOUBLE_COL  = "c6"
BOOL_COL    = "c7"

BINARY_COL  = "c8"
NCHAR_COL   = "c9"
TS_COL      = "c10"

UN_CHAR_COL = [INT_COL, BINT_COL, SINT_COL, TINT_COL, FLOAT_COL, DOUBLE_COL, BOOL_COL, ]
CHAR_COL    = [ BINARY_COL, NCHAR_COL, ]
TS_TYPE_COL = [TS_COL]

class TDTestCase:

    def init(self, conn, logSql):
        tdLog.debug(f"start to excute {__file__}")
        tdSql.init(conn.cursor())

C
cpwu 已提交
29
    def __char_length_condition(self):
C
cpwu 已提交
30
        char_length_condition = []
C
cpwu 已提交
31
        for char_col in CHAR_COL:
C
cpwu 已提交
32
            char_length_condition.extend(
C
cpwu 已提交
33 34 35 36 37
                (
                    char_col,
                    f"upper( {char_col} )",
                )
            )
C
cpwu 已提交
38 39 40
            char_length_condition.extend( f"cast( {un_char_col} as binary(16) ) " for un_char_col in UN_CHAR_COL)
            char_length_condition.extend( f"cast( {char_col} + {char_col_2} as binary(32) ) " for char_col_2 in CHAR_COL )
            char_length_condition.extend( f"cast( {char_col} + {un_char_col} as binary(32) ) " for un_char_col in UN_CHAR_COL )
C
cpwu 已提交
41

C
cpwu 已提交
42
        char_length_condition.append('''"test1234!@#$%^&*():'><?/.,][}{"''')
C
cpwu 已提交
43

C
cpwu 已提交
44
        return char_length_condition
C
cpwu 已提交
45 46 47 48 49 50 51 52

    def __where_condition(self, col):
        # return f" where count({col}) > 0 "
        return ""

    def __group_condition(self, col, having = ""):
        return f" group by {col} having {having}" if having else f" group by {col} "

C
cpwu 已提交
53 54 55
    def __char_length_current_check(self, tbname):
        char_length_condition = self.__char_length_condition()
        for condition in char_length_condition:
C
cpwu 已提交
56 57 58 59 60 61
            where_condition = self.__where_condition(condition)
            group_having = self.__group_condition(condition, having=f"{condition} is not null " )
            group_no_having= self.__group_condition(condition )
            groups = ["", group_having, group_no_having]

            for group_condition in groups:
C
cpwu 已提交
62
                tdSql.query(f"select {condition}, char_length( {condition} ) from {tbname} {where_condition}  {group_condition} ")
C
cpwu 已提交
63 64 65 66 67 68 69
                for i in range(tdSql.queryRows):
                    if not tdSql.getData(i,1):
                        tdSql.checkData(i, 1, None)
                    # elif "as nchar" in condition or (NCHAR_COL in condition and "as binary" not in condition):
                    #     tdSql.checkData(i, 1, len(str(tdSql.getData(i,0) ) ) * 4 )
                    else:
                        tdSql.checkData(i, 1, len(str(tdSql.getData(i,0) ) ) )
C
cpwu 已提交
70

C
cpwu 已提交
71
    def __char_length_err_check(self,tbname):
C
cpwu 已提交
72 73 74 75 76
        sqls = []

        for un_char_col in UN_CHAR_COL:
            sqls.extend(
                (
C
cpwu 已提交
77 78 79
                    f"select char_length( {un_char_col} ) from {tbname} ",
                    f"select char_length(ceil( {un_char_col} )) from {tbname} ",
                    f"select {un_char_col} from {tbname} group by char_length( {un_char_col} ) ",
C
cpwu 已提交
80 81 82
                )
            )

C
cpwu 已提交
83 84
            sqls.extend( f"select char_length( {un_char_col} + {un_char_col_2} ) from {tbname} " for un_char_col_2 in UN_CHAR_COL )
            sqls.extend( f"select char_length( {un_char_col} + {ts_col} ) from {tbname} " for ts_col in TS_TYPE_COL )
C
cpwu 已提交
85

C
cpwu 已提交
86 87 88 89
        sqls.extend( f"select {char_col} from {tbname} group by char_length( {char_col} ) " for char_col in CHAR_COL)
        sqls.extend( f"select char_length( {ts_col} ) from {tbname} " for ts_col in TS_TYPE_COL )
        sqls.extend( f"select char_length( {char_col} + {ts_col} ) from {tbname} " for char_col in UN_CHAR_COL for ts_col in TS_TYPE_COL)
        sqls.extend( f"select char_length( {char_col} + {char_col_2} ) from {tbname} " for char_col in CHAR_COL for char_col_2 in CHAR_COL )
C
cpwu 已提交
90 91 92 93
        sqls.extend( f"select upper({char_col}, 11) from {tbname} " for char_col in CHAR_COL )
        sqls.extend( f"select upper({char_col}) from {tbname} interval(2d) sliding(1d)" for char_col in CHAR_COL )
        sqls.extend(
            (
C
cpwu 已提交
94 95 96 97 98
                f"select char_length() from {tbname} ",
                f"select char_length(*) from {tbname} ",
                f"select char_length(ccccccc) from {tbname} ",
                f"select char_length(111) from {tbname} ",
                f"select char_length(c8, 11) from {tbname} ",
C
cpwu 已提交
99 100 101 102 103 104 105 106 107
            )
        )

        return sqls

    def __test_current(self):
        tdLog.printNoPrefix("==========current sql condition check , must return query ok==========")
        tbname = ["ct1", "ct2", "ct4", "t1", "stb1"]
        for tb in tbname:
C
cpwu 已提交
108
            self.__char_length_current_check(tb)
C
cpwu 已提交
109 110 111 112 113 114 115
            tdLog.printNoPrefix(f"==========current sql condition check in {tb} over==========")

    def __test_error(self):
        tdLog.printNoPrefix("==========err sql condition check , must return error==========")
        tbname = ["ct1", "ct2", "ct4", "t1", "stb1"]

        for tb in tbname:
C
cpwu 已提交
116
            for errsql in self.__char_length_err_check(tb):
C
cpwu 已提交
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
                tdSql.error(sql=errsql)
            tdLog.printNoPrefix(f"==========err sql condition check in {tb} over==========")


    def all_test(self):
        self.__test_current()
        self.__test_error()


    def __create_tb(self):
        tdSql.prepare()

        tdLog.printNoPrefix("==========step1:create table")
        create_stb_sql  =  f'''create table stb1(
                ts timestamp, {INT_COL} int, {BINT_COL} bigint, {SINT_COL} smallint, {TINT_COL} tinyint,
                 {FLOAT_COL} float, {DOUBLE_COL} double, {BOOL_COL} bool,
                 {BINARY_COL} binary(16), {NCHAR_COL} nchar(32), {TS_COL} timestamp
            ) tags (t1 int)
            '''
        create_ntb_sql = f'''create table t1(
                ts timestamp, {INT_COL} int, {BINT_COL} bigint, {SINT_COL} smallint, {TINT_COL} tinyint,
                 {FLOAT_COL} float, {DOUBLE_COL} double, {BOOL_COL} bool,
                 {BINARY_COL} binary(16), {NCHAR_COL} nchar(32), {TS_COL} timestamp
            )
            '''
        tdSql.execute(create_stb_sql)
        tdSql.execute(create_ntb_sql)

        for i in range(4):
            tdSql.execute(f'create table ct{i+1} using stb1 tags ( {i+1} )')

    def __insert_data(self, rows):
C
cpwu 已提交
149 150
        now_time = int(datetime.datetime.timestamp(datetime.datetime.now()) * 1000)
        for i in range(rows):
C
cpwu 已提交
151
            tdSql.execute(
C
cpwu 已提交
152
                f"insert into ct1 values ( { now_time - i * 1000 }, {i}, {11111 * i}, {111 * i % 32767 }, {11 * i % 127}, {1.11*i}, {1100.0011*i}, {i%2}, 'binary{i}', 'nchar{i}', { now_time + 1 * i } )"
C
cpwu 已提交
153 154
            )
            tdSql.execute(
C
cpwu 已提交
155
                f"insert into ct4 values ( { now_time - i * 7776000000 }, {i}, {11111 * i}, {111 * i % 32767 }, {11 * i % 127}, {1.11*i}, {1100.0011*i}, {i%2}, 'binary{i}', 'nchar{i}', { now_time + 1 * i } )"
C
cpwu 已提交
156 157
            )
            tdSql.execute(
C
cpwu 已提交
158
                f"insert into ct2 values ( { now_time - i * 7776000000 }, {-i},  {-11111 * i}, {-111 * i % 32767 }, {-11 * i % 127}, {-1.11*i}, {-1100.0011*i}, {i%2}, 'binary{i}', 'nchar{i}', { now_time + 1 * i } )"
C
cpwu 已提交
159 160
            )
        tdSql.execute(
C
cpwu 已提交
161 162 163
            f'''insert into ct1 values
            ( { now_time - rows * 5 }, 0, 0, 0, 0, 0, 0, 0, 'binary0', 'nchar0', { now_time + 8 } )
            ( { now_time + 10000 }, { rows }, -99999, -999, -99, -9.99, -99.99, 1, 'binary9', 'nchar9', { now_time + 9 } )
C
cpwu 已提交
164 165 166 167 168
            '''
        )

        tdSql.execute(
            f'''insert into ct4 values
C
cpwu 已提交
169 170 171
            ( { now_time - rows * 7776000000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
            ( { now_time - rows * 3888000000+ 10800000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
            ( { now_time +  7776000000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
C
cpwu 已提交
172
            (
C
cpwu 已提交
173 174
                { now_time + 5184000000}, {pow(2,31)-pow(2,15)}, {pow(2,63)-pow(2,30)}, 32767, 127,
                { 3.3 * pow(10,38) }, { 1.3 * pow(10,308) }, { rows % 2 }, "binary_limit-1", "nchar_limit-1", { now_time - 86400000}
C
cpwu 已提交
175 176
                )
            (
C
cpwu 已提交
177 178
                { now_time + 2592000000 }, {pow(2,31)-pow(2,16)}, {pow(2,63)-pow(2,31)}, 32766, 126,
                { 3.2 * pow(10,38) }, { 1.2 * pow(10,308) }, { (rows-1) % 2 }, "binary_limit-2", "nchar_limit-2", { now_time - 172800000}
C
cpwu 已提交
179 180 181 182 183 184
                )
            '''
        )

        tdSql.execute(
            f'''insert into ct2 values
C
cpwu 已提交
185 186
            ( { now_time - rows * 7776000000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
            ( { now_time - rows * 3888000000+ 10800000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
C
cpwu 已提交
187
            ( { now_time + 7776000000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
C
cpwu 已提交
188
            (
C
cpwu 已提交
189 190
                { now_time + 5184000000 }, { -1 * pow(2,31) + pow(2,15) }, { -1 * pow(2,63) + pow(2,30) }, -32766, -126,
                { -1 * 3.2 * pow(10,38) }, { -1.2 * pow(10,308) }, { rows % 2 }, "binary_limit-1", "nchar_limit-1", { now_time - 86400000 }
C
cpwu 已提交
191 192
                )
            (
C
cpwu 已提交
193 194
                { now_time + 2592000000 }, { -1 * pow(2,31) + pow(2,16) }, { -1 * pow(2,63) + pow(2,31) }, -32767, -127,
                { - 3.3 * pow(10,38) }, { -1.3 * pow(10,308) }, { (rows-1) % 2 }, "binary_limit-2", "nchar_limit-2", { now_time - 172800000 }
C
cpwu 已提交
195 196 197 198 199 200
                )
            '''
        )

        for i in range(rows):
            insert_data = f'''insert into t1 values
C
cpwu 已提交
201 202
                ( { now_time - i * 3600000 }, {i}, {i * 11111}, { i % 32767 }, { i % 127}, { i * 1.11111 }, { i * 1000.1111 }, { i % 2},
                "binary_{i}", "nchar_{i}", { now_time - 1000 * i } )
C
cpwu 已提交
203 204 205 206
                '''
            tdSql.execute(insert_data)
        tdSql.execute(
            f'''insert into t1 values
C
cpwu 已提交
207
            ( { now_time + 10800000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
C
cpwu 已提交
208
            ( { now_time - (( rows // 2 ) * 60 + 30) * 60000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
C
cpwu 已提交
209 210
            ( { now_time - rows * 3600000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
            ( { now_time + 7200000 }, { pow(2,31) - pow(2,15) }, { pow(2,63) - pow(2,30) }, 32767, 127,
C
cpwu 已提交
211
                { 3.3 * pow(10,38) }, { 1.3 * pow(10,308) }, { rows % 2 },
C
cpwu 已提交
212
                "binary_limit-1", "nchar_limit-1", { now_time - 86400000 }
C
cpwu 已提交
213 214
                )
            (
C
cpwu 已提交
215
                { now_time + 3600000 } , { pow(2,31) - pow(2,16) }, { pow(2,63) - pow(2,31) }, 32766, 126,
C
cpwu 已提交
216
                { 3.2 * pow(10,38) }, { 1.2 * pow(10,308) }, { (rows-1) % 2 },
C
cpwu 已提交
217
                "binary_limit-2", "nchar_limit-2", { now_time - 172800000 }
C
cpwu 已提交
218 219 220 221 222 223 224 225 226 227 228 229
                )
            '''
        )


    def run(self):
        tdSql.prepare()

        tdLog.printNoPrefix("==========step1:create table")
        self.__create_tb()

        tdLog.printNoPrefix("==========step2:insert data")
C
cpwu 已提交
230
        self.__insert_data(10)
C
cpwu 已提交
231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248

        tdLog.printNoPrefix("==========step3:all check")
        self.all_test()

        # tdDnodes.stop(1)
        # tdDnodes.start(1)

        # tdSql.execute("use db")

        # tdLog.printNoPrefix("==========step4:after wal, all check again ")
        # self.all_test()

    def stop(self):
        tdSql.close()
        tdLog.success(f"{__file__} successfully executed")

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