208 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			208 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			Python
		
	
	
	
###################################################################
 | 
						|
#           Copyright (c) 2016 by TAOS Technologies, Inc.
 | 
						|
#                     All rights reserved.
 | 
						|
#
 | 
						|
#  This file is proprietary and confidential to TAOS Technologies.
 | 
						|
#  No part of this file may be reproduced, stored, transmitted,
 | 
						|
#  disclosed or used in any form or by any means other than as
 | 
						|
#  expressly provided by the written permission from Jianhui Tao
 | 
						|
#
 | 
						|
###################################################################
 | 
						|
 | 
						|
# -*- coding: utf-8 -*-
 | 
						|
from copy import deepcopy
 | 
						|
import string
 | 
						|
import random
 | 
						|
from util.log import tdLog
 | 
						|
from util.cases import tdCases
 | 
						|
from util.sql import tdSql
 | 
						|
 | 
						|
 | 
						|
class TDTestCase:
 | 
						|
    def init(self, conn, logSql):
 | 
						|
        tdLog.debug("start to execute %s" % __file__)
 | 
						|
        tdSql.init(conn.cursor(), logSql)
 | 
						|
 | 
						|
    def cleanTb(self):
 | 
						|
        query_sql = "show stables"
 | 
						|
        res_row_list = tdSql.query(query_sql, True)
 | 
						|
        stb_list = map(lambda x: x[0], res_row_list)
 | 
						|
        for stb in stb_list:
 | 
						|
            tdSql.execute(f'drop table if exists {stb}')
 | 
						|
 | 
						|
        query_sql = "show tables"
 | 
						|
        res_row_list = tdSql.query(query_sql, True)
 | 
						|
        tb_list = map(lambda x: x[0], res_row_list)
 | 
						|
        for tb in tb_list:
 | 
						|
            tdSql.execute(f'drop table if exists {tb}')
 | 
						|
 | 
						|
    def getLongWildcardStr(self, len=None):
 | 
						|
        """
 | 
						|
            generate long wildcard str
 | 
						|
        """    
 | 
						|
        maxWildCardsLength = int(tdSql.getVariable('maxWildCardsLength')[0])
 | 
						|
        if len:
 | 
						|
            chars = ''.join(random.choice(string.ascii_letters.lower()) for i in range(len))
 | 
						|
        else:
 | 
						|
            chars = ''.join(random.choice(string.ascii_letters.lower()) for i in range(maxWildCardsLength+1))
 | 
						|
        return chars
 | 
						|
    
 | 
						|
    def genTableName(self):
 | 
						|
        '''
 | 
						|
            generate table name
 | 
						|
            hp_name--->'%str'
 | 
						|
            lp_name--->'str%'
 | 
						|
            ul_name--->'st_r'
 | 
						|
        '''
 | 
						|
        table_name = self.getLongWildcardStr()
 | 
						|
        table_name_list = list(table_name)
 | 
						|
        table_name_list.pop(-1)
 | 
						|
 | 
						|
        if len(table_name_list) > 1:
 | 
						|
            lp_name = deepcopy(table_name_list)
 | 
						|
            lp_name[-1] = '%'
 | 
						|
            lp_name = ''.join(lp_name)
 | 
						|
 | 
						|
            ul_name = list(lp_name)
 | 
						|
            ul_name[int(len(ul_name)/2)] = '_'
 | 
						|
            ul_name = ''.join(ul_name)
 | 
						|
 | 
						|
            table_name_list = list(table_name)
 | 
						|
            hp_name = deepcopy(table_name_list)
 | 
						|
            hp_name.pop(1)
 | 
						|
            hp_name[0] = '%'
 | 
						|
            hp_name = ''.join(hp_name)
 | 
						|
        else:
 | 
						|
            hp_name = '%'
 | 
						|
            lp_name = '%'
 | 
						|
            ul_name = '_'
 | 
						|
        return table_name, hp_name, lp_name, ul_name
 | 
						|
 | 
						|
    def checkRegularTableWildcardLength(self):
 | 
						|
        '''
 | 
						|
            check regular table wildcard length with % and _
 | 
						|
        '''
 | 
						|
        self.cleanTb()
 | 
						|
        table_name, hp_name, lp_name, ul_name = self.genTableName()
 | 
						|
        tdSql.execute(f"CREATE TABLE {table_name} (ts timestamp, a1 int)")
 | 
						|
        sql_list = [f'show tables like "{hp_name}"', f'show tables like "{lp_name}"', f'show tables like "{ul_name}"']
 | 
						|
        for sql in sql_list:
 | 
						|
            tdSql.query(sql)
 | 
						|
            if len(table_name) >= 1:
 | 
						|
                tdSql.checkRows(1)
 | 
						|
            else:
 | 
						|
                tdSql.error(sql)
 | 
						|
        
 | 
						|
        exceed_sql_list = [f'show tables like "%{hp_name}"', f'show tables like "{lp_name}%"', f'show tables like "{ul_name}%"']
 | 
						|
        for sql in exceed_sql_list:
 | 
						|
            tdSql.error(sql)
 | 
						|
 | 
						|
    def checkSuperTableWildcardLength(self):
 | 
						|
        '''
 | 
						|
            check super table wildcard length with % and _
 | 
						|
        '''
 | 
						|
        self.cleanTb()
 | 
						|
        table_name, hp_name, lp_name, ul_name = self.genTableName()
 | 
						|
        tdSql.execute(f"CREATE TABLE {table_name} (ts timestamp, c1 int) tags (t1 int)")
 | 
						|
        sql_list = [f'show stables like "{hp_name}"', f'show stables like "{lp_name}"', f'show stables like "{ul_name}"']
 | 
						|
        for sql in sql_list:
 | 
						|
            tdSql.query(sql)
 | 
						|
            if len(table_name) >= 1:
 | 
						|
                tdSql.checkRows(1)
 | 
						|
            else:
 | 
						|
                tdSql.error(sql)
 | 
						|
 | 
						|
        exceed_sql_list = [f'show stables like "%{hp_name}"', f'show stables like "{lp_name}%"', f'show stables like "{ul_name}%"']
 | 
						|
        for sql in exceed_sql_list:
 | 
						|
            tdSql.error(sql)
 | 
						|
    
 | 
						|
    def checkRegularWildcardSelectLength(self):
 | 
						|
        '''
 | 
						|
            check regular table wildcard select length with % and _
 | 
						|
        '''
 | 
						|
        self.cleanTb()
 | 
						|
        table_name, hp_name, lp_name, ul_name = self.genTableName()
 | 
						|
        tdSql.execute(f"CREATE TABLE {table_name} (ts timestamp, bi1 binary(200), nc1 nchar(200))")
 | 
						|
        tdSql.execute(f'insert into {table_name} values (now, "{table_name}", "{table_name}")')
 | 
						|
        sql_list = [f'select * from {table_name} where bi1 like "{hp_name}"',
 | 
						|
                    f'select * from {table_name} where bi1 like "{lp_name}"',
 | 
						|
                    f'select * from {table_name} where bi1 like "{ul_name}"',
 | 
						|
                    f'select * from {table_name} where nc1 like "{hp_name}"',
 | 
						|
                    f'select * from {table_name} where nc1 like "{lp_name}"',
 | 
						|
                    f'select * from {table_name} where nc1 like "{ul_name}"']
 | 
						|
        for sql in sql_list:
 | 
						|
            tdSql.query(sql)
 | 
						|
            if len(table_name) >= 1:
 | 
						|
                tdSql.checkRows(1)
 | 
						|
            else:
 | 
						|
                tdSql.error(sql)
 | 
						|
        
 | 
						|
        exceed_sql_list = [f'select * from {table_name} where bi1 like "%{hp_name}"',
 | 
						|
                            f'select * from {table_name} where bi1 like "{lp_name}%"',
 | 
						|
                            f'select * from {table_name} where bi1 like "{ul_name}%"',
 | 
						|
                            f'select * from {table_name} where nc1 like "%{hp_name}"',
 | 
						|
                            f'select * from {table_name} where nc1 like "{lp_name}%"',
 | 
						|
                            f'select * from {table_name} where nc1 like "{ul_name}%"']
 | 
						|
        for sql in exceed_sql_list:
 | 
						|
            tdSql.error(sql)
 | 
						|
        
 | 
						|
    def checkStbWildcardSelectLength(self):
 | 
						|
        '''
 | 
						|
            check stb wildcard select length with % and _
 | 
						|
        '''
 | 
						|
        self.cleanTb()
 | 
						|
        table_name, hp_name, lp_name, ul_name = self.genTableName()
 | 
						|
 | 
						|
        tdSql.execute(f'CREATE TABLE {table_name} (ts timestamp, bi1 binary(200), nc1 nchar(200)) tags (si1 binary(200), sc1 nchar(200))')
 | 
						|
        tdSql.execute(f'create table {table_name}_sub1 using {table_name} tags ("{table_name}", "{table_name}")')
 | 
						|
        tdSql.execute(f'insert into {table_name}_sub1 values (now, "{table_name}", "{table_name}");')
 | 
						|
 | 
						|
        sql_list = [f'select * from {table_name} where bi1 like "{hp_name}"',
 | 
						|
                    f'select * from {table_name} where bi1 like "{lp_name}"',
 | 
						|
                    f'select * from {table_name} where bi1 like "{ul_name}"',
 | 
						|
                    f'select * from {table_name} where nc1 like "{hp_name}"',
 | 
						|
                    f'select * from {table_name} where nc1 like "{lp_name}"',
 | 
						|
                    f'select * from {table_name} where nc1 like "{ul_name}"',
 | 
						|
                    f'select * from {table_name} where si1 like "{hp_name}"',
 | 
						|
                    f'select * from {table_name} where si1 like "{lp_name}"',
 | 
						|
                    f'select * from {table_name} where si1 like "{ul_name}"',
 | 
						|
                    f'select * from {table_name} where sc1 like "{hp_name}"',
 | 
						|
                    f'select * from {table_name} where sc1 like "{lp_name}"',
 | 
						|
                    f'select * from {table_name} where sc1 like "{ul_name}"']
 | 
						|
      
 | 
						|
        for sql in sql_list:
 | 
						|
            tdSql.query(sql)
 | 
						|
            if len(table_name) >= 1:
 | 
						|
                tdSql.checkRows(1)
 | 
						|
            else:
 | 
						|
                tdSql.error(sql)
 | 
						|
        exceed_sql_list = [f'select * from {table_name} where bi1 like "%{hp_name}"',
 | 
						|
                            f'select * from {table_name} where bi1 like "{lp_name}%"',
 | 
						|
                            f'select * from {table_name} where bi1 like "{ul_name}%"',
 | 
						|
                            f'select * from {table_name} where nc1 like "%{hp_name}"',
 | 
						|
                            f'select * from {table_name} where nc1 like "{lp_name}%"',
 | 
						|
                            f'select * from {table_name} where nc1 like "{ul_name}%"',
 | 
						|
                            f'select * from {table_name} where si1 like "%{hp_name}"',
 | 
						|
                            f'select * from {table_name} where si1 like "{lp_name}%"',
 | 
						|
                            f'select * from {table_name} where si1 like "{ul_name}%"',
 | 
						|
                            f'select * from {table_name} where sc1 like "%{hp_name}"',
 | 
						|
                            f'select * from {table_name} where sc1 like "{lp_name}%"',
 | 
						|
                            f'select * from {table_name} where sc1 like "{ul_name}%"']
 | 
						|
        for sql in exceed_sql_list:
 | 
						|
            tdSql.error(sql)
 | 
						|
 | 
						|
    def run(self):
 | 
						|
        tdSql.prepare()
 | 
						|
        self.checkRegularTableWildcardLength()
 | 
						|
        self.checkSuperTableWildcardLength()
 | 
						|
        self.checkRegularWildcardSelectLength()
 | 
						|
        self.checkStbWildcardSelectLength()
 | 
						|
 | 
						|
    def stop(self):
 | 
						|
        tdSql.close()
 | 
						|
        tdLog.success("%s successfully executed" % __file__)
 | 
						|
 | 
						|
tdCases.addWindows(__file__, TDTestCase())
 | 
						|
tdCases.addLinux(__file__, TDTestCase())
 | 
						|
 |