TDengine/tests/system-test/2-query/first.py

185 lines
8.1 KiB
Python
Raw Normal View History

2022-05-26 02:14:50 +00:00
###################################################################
# 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 -*-
2022-06-16 01:01:53 +00:00
import random
import string
2022-05-26 02:14:50 +00:00
import sys
import taos
2022-06-17 09:07:18 +00:00
from util.common import *
2022-05-26 02:14:50 +00:00
from util.log import *
from util.cases import *
from util.sql import *
import numpy as np
class TDTestCase:
def init(self, conn, logSql, replicaVar=1):
self.replicaVar = int(replicaVar)
2022-05-26 02:14:50 +00:00
tdLog.debug("start to execute %s" % __file__)
tdSql.init(conn.cursor())
self.rowNum = 10
2022-06-16 06:47:31 +00:00
self.tbnum = 20
2022-05-26 02:14:50 +00:00
self.ts = 1537146000000
2022-06-15 09:30:17 +00:00
self.binary_str = 'taosdata'
self.nchar_str = '涛思数据'
2022-08-10 09:09:57 +00:00
2022-06-15 09:30:17 +00:00
def first_check_base(self):
2022-08-10 09:09:57 +00:00
dbname = "db"
tdSql.prepare(dbname)
2022-06-17 07:28:07 +00:00
column_dict = {
'col1': 'tinyint',
'col2': 'smallint',
'col3': 'int',
'col4': 'bigint',
'col5': 'tinyint unsigned',
'col6': 'smallint unsigned',
'col7': 'int unsigned',
'col8': 'bigint unsigned',
'col9': 'float',
'col10': 'double',
'col11': 'bool',
'col12': 'binary(20)',
'col13': 'nchar(20)'
}
2022-08-10 09:09:57 +00:00
tdSql.execute(f'''create table {dbname}.stb(ts timestamp, col1 tinyint, col2 smallint, col3 int, col4 bigint, col5 tinyint unsigned, col6 smallint unsigned,
2022-06-15 09:30:17 +00:00
col7 int unsigned, col8 bigint unsigned, col9 float, col10 double, col11 bool, col12 binary(20), col13 nchar(20)) tags(loc nchar(20))''')
2022-08-10 09:09:57 +00:00
tdSql.execute(f"create table {dbname}.stb_1 using {dbname}.stb tags('beijing')")
tdSql.execute(f"insert into {dbname}.stb_1(ts) values({self.ts - 1})")
2022-06-17 07:28:07 +00:00
column_list = ['col1','col2','col3','col4','col5','col6','col7','col8','col9','col10','col11','col12','col13']
2022-08-10 09:09:57 +00:00
for i in ['stb_1','stb']:
tdSql.query(f"select first(*) from {dbname}.{i}")
2022-11-30 19:10:52 +00:00
tdSql.checkRows(1)
tdSql.checkData(0, 1, None)
2022-06-17 07:28:07 +00:00
for i in column_list:
2022-08-10 09:09:57 +00:00
for j in ['stb_1']:
tdSql.query(f"select first({i}) from {dbname}.{j}")
2022-06-15 09:30:17 +00:00
tdSql.checkRows(0)
for i in range(self.rowNum):
2022-08-10 09:09:57 +00:00
tdSql.execute(f"insert into {dbname}.stb_1 values(%d, %d, %d, %d, %d, %d, %d, %d, %d, %f, %f, %d, '{self.binary_str}%d', '{self.nchar_str}%d')"
2022-06-15 09:30:17 +00:00
% (self.ts + i, i + 1, i + 1, i + 1, i + 1, i + 1, i + 1, i + 1, i + 1, i + 0.1, i + 0.1, i % 2, i + 1, i + 1))
2022-06-17 07:28:07 +00:00
for k, v in column_dict.items():
2022-08-10 09:09:57 +00:00
for j in ['stb_1', 'stb']:
tdSql.query(f"select first({k}) from {dbname}.{j}")
2022-06-16 01:01:53 +00:00
tdSql.checkRows(1)
# tinyint,smallint,int,bigint,tinyint unsigned,smallint unsigned,int unsigned,bigint unsigned
2022-06-17 07:28:07 +00:00
if v == 'tinyint' or v == 'smallint' or v == 'int' or v == 'bigint' or v == 'tinyint unsigned' or v == 'smallint unsigned'\
or v == 'int unsigned' or v == 'bigint unsigned':
2022-06-16 01:01:53 +00:00
tdSql.checkData(0, 0, 1)
# float,double
2022-06-17 07:28:07 +00:00
elif v == 'float' or v == 'double':
2022-06-16 01:01:53 +00:00
tdSql.checkData(0, 0, 0.1)
# bool
2022-06-17 07:28:07 +00:00
elif v == 'bool':
2022-06-16 01:01:53 +00:00
tdSql.checkData(0, 0, False)
# binary
2022-06-17 07:28:07 +00:00
elif 'binary' in v:
2022-06-16 01:01:53 +00:00
tdSql.checkData(0, 0, f'{self.binary_str}1')
# nchar
2022-06-17 07:28:07 +00:00
elif 'nchar' in v:
2022-06-16 01:01:53 +00:00
tdSql.checkData(0, 0, f'{self.nchar_str}1')
2022-06-16 02:37:13 +00:00
#!bug TD-16569
2022-08-10 09:09:57 +00:00
tdSql.query(f"select first(*),last(*) from {dbname}.stb where ts < 23 interval(1s)")
2022-06-17 02:07:22 +00:00
tdSql.checkRows(0)
2022-08-10 09:09:57 +00:00
tdSql.execute(f'drop database {dbname}')
2022-06-16 01:01:53 +00:00
def first_check_stb_distribute(self):
# prepare data for vgroup 4
2022-06-17 09:07:18 +00:00
dbname = tdCom.getLongName(10, "letters")
stbname = tdCom.getLongName(5, "letters")
2022-06-17 02:07:22 +00:00
child_table_num = 20
2022-06-17 08:41:13 +00:00
vgroup = 2
2022-06-17 07:28:07 +00:00
column_dict = {
'col1': 'tinyint',
'col2': 'smallint',
'col3': 'int',
'col4': 'bigint',
'col5': 'tinyint unsigned',
'col6': 'smallint unsigned',
'col7': 'int unsigned',
'col8': 'bigint unsigned',
'col9': 'float',
'col10': 'double',
'col11': 'bool',
'col12': 'binary(20)',
'col13': 'nchar(20)'
}
2022-06-17 08:41:13 +00:00
tdSql.execute(f"create database if not exists {dbname} vgroups {vgroup}")
2022-06-16 01:01:53 +00:00
tdSql.execute(f'use {dbname}')
# build 20 child tables,every table insert 10 rows
2022-08-10 09:09:57 +00:00
tdSql.execute(f'''create table {dbname}.{stbname}(ts timestamp, col1 tinyint, col2 smallint, col3 int, col4 bigint, col5 tinyint unsigned, col6 smallint unsigned,
2022-06-16 01:01:53 +00:00
col7 int unsigned, col8 bigint unsigned, col9 float, col10 double, col11 bool, col12 binary(20), col13 nchar(20)) tags(loc nchar(20))''')
2022-06-17 02:07:22 +00:00
for i in range(child_table_num):
2022-08-10 09:09:57 +00:00
tdSql.execute(f"create table {dbname}.{stbname}_{i} using {dbname}.{stbname} tags('beijing')")
tdSql.execute(f"insert into {dbname}.{stbname}_{i}(ts) values(%d)" % (self.ts - 1-i))
2022-06-17 02:07:22 +00:00
#!bug TD-16561
2022-08-10 09:09:57 +00:00
for i in [f'{dbname}.{stbname}']:
2022-11-30 14:42:53 +00:00
tdSql.query(f"select first(*) from {i}")
tdSql.checkRows(1)
tdSql.checkData(0, 1, None)
2022-08-11 16:07:24 +00:00
tdSql.query(f"select * from information_schema.ins_tables where db_name = '{dbname}'")
2022-06-16 01:01:53 +00:00
vgroup_list = []
for i in range(len(tdSql.queryResult)):
vgroup_list.append(tdSql.queryResult[i][6])
vgroup_list_set = set(vgroup_list)
# print(vgroup_list_set)
# print(vgroup_list)
for i in vgroup_list_set:
vgroups_num = vgroup_list.count(i)
if vgroups_num >=2:
tdLog.info(f'This scene with {vgroups_num} vgroups is ok!')
continue
else:
2022-08-10 09:09:57 +00:00
tdLog.exit(f'This scene does not meet the requirements with {vgroups_num} vgroup!\n')
2022-06-17 02:07:22 +00:00
for i in range(child_table_num):
2022-06-16 01:01:53 +00:00
for j in range(self.rowNum):
2022-08-10 09:09:57 +00:00
tdSql.execute(f"insert into {dbname}.{stbname}_{i} values(%d, %d, %d, %d, %d, %d, %d, %d, %d, %f, %f, %d, '{self.binary_str}%d', '{self.nchar_str}%d')"
2022-06-16 01:01:53 +00:00
% (self.ts + j + i, j + 1, j + 1, j + 1, j + 1, j + 1, j + 1, j + 1, j + 1, j + 0.1, j + 0.1, j % 2, j + 1, j + 1))
2022-08-10 09:09:57 +00:00
2022-06-17 07:28:07 +00:00
for k, v in column_dict.items():
2022-08-10 09:09:57 +00:00
for j in [f'{dbname}.{stbname}_{i}', f'{dbname}.{stbname}']:
2022-06-17 07:28:07 +00:00
tdSql.query(f"select first({k}) from {j}")
2022-06-16 01:01:53 +00:00
tdSql.checkRows(1)
# tinyint,smallint,int,bigint,tinyint unsigned,smallint unsigned,int unsigned,bigint unsigned
2022-06-17 07:28:07 +00:00
if v == 'tinyint' or v == 'smallint' or v == 'int' or v == 'bigint' or v == 'tinyint unsigned' or v == 'smallint unsigned'\
or v == 'int unsigned' or v == 'bigint unsigned':
2022-06-16 01:01:53 +00:00
tdSql.checkData(0, 0, 1)
# float,double
2022-06-17 07:28:07 +00:00
elif v == 'float' or v == 'double':
2022-06-16 01:01:53 +00:00
tdSql.checkData(0, 0, 0.1)
# bool
2022-06-17 07:28:07 +00:00
elif v == 'bool':
2022-06-16 01:01:53 +00:00
tdSql.checkData(0, 0, False)
# binary
2022-06-17 07:28:07 +00:00
elif 'binary' in v:
2022-06-16 01:01:53 +00:00
tdSql.checkData(0, 0, f'{self.binary_str}1')
# nchar
2022-06-17 07:28:07 +00:00
elif 'nchar' in v:
2022-06-16 01:01:53 +00:00
tdSql.checkData(0, 0, f'{self.nchar_str}1')
2022-06-16 02:37:13 +00:00
#!bug TD-16569
2022-08-10 09:09:57 +00:00
tdSql.query(f"select first(*),last(*) from {dbname}.{stbname} where ts < 23 interval(1s)")
2022-11-30 14:42:53 +00:00
tdSql.checkRows(0)
2022-06-17 02:07:22 +00:00
tdSql.execute(f'drop database {dbname}')
2022-08-10 09:09:57 +00:00
2022-05-26 02:14:50 +00:00
def run(self):
2022-06-16 01:01:53 +00:00
self.first_check_base()
2022-06-17 02:07:22 +00:00
self.first_check_stb_distribute()
2022-08-10 09:09:57 +00:00
2022-05-26 02:14:50 +00:00
def stop(self):
tdSql.close()
tdLog.success("%s successfully executed" % __file__)
tdCases.addWindows(__file__, TDTestCase())
tdCases.addLinux(__file__, TDTestCase())