143 lines
5.1 KiB
Python
143 lines
5.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
import sys
|
|
import taos
|
|
from util.log import *
|
|
from util.cases import *
|
|
from util.sql import *
|
|
from util.dnodes import *
|
|
|
|
|
|
class TDTestCase:
|
|
def init(self, conn, logSql):
|
|
tdLog.debug("start to execute %s" % __file__)
|
|
tdSql.init(conn.cursor(), logSql)
|
|
self.types = [
|
|
"int",
|
|
"bigint",
|
|
"float",
|
|
"double",
|
|
"smallint",
|
|
"tinyint",
|
|
"int unsigned",
|
|
"bigint unsigned",
|
|
"smallint unsigned",
|
|
"tinyint unsigned",
|
|
"binary(10)",
|
|
"nchar(10)",
|
|
"timestamp"]
|
|
self.rowNum = 300
|
|
self.ts = 1537146000000
|
|
self.step = 1000
|
|
self.sqlHead = "select count(*), count(c1) "
|
|
self.sqlTail = " from stb"
|
|
|
|
def addColumnAndCount(self):
|
|
for colIdx in range(len(self.types)):
|
|
tdSql.execute(
|
|
"alter table stb add column c%d %s" %
|
|
(colIdx + 2, self.types[colIdx]))
|
|
self.sqlHead = self.sqlHead + ",count(c%d) " % (colIdx + 2)
|
|
tdSql.query(self.sqlHead + self.sqlTail)
|
|
|
|
# count non-NULL values in each column
|
|
tdSql.checkData(0, 0, self.rowNum * (colIdx + 1))
|
|
tdSql.checkData(0, 1, self.rowNum * (colIdx + 1))
|
|
for i in range(2, colIdx + 2):
|
|
print("check1: i=%d colIdx=%d" % (i, colIdx))
|
|
tdSql.checkData(0, i, self.rowNum * (colIdx - i + 2))
|
|
|
|
# insert more rows
|
|
for k in range(self.rowNum):
|
|
self.ts += self.step
|
|
sql = "insert into tb values (%d, %d" % (self.ts, colIdx + 2)
|
|
for j in range(colIdx + 1):
|
|
sql += ", %d" % (colIdx + 2)
|
|
sql += ")"
|
|
tdSql.execute(sql)
|
|
|
|
# count non-NULL values in each column
|
|
tdSql.query(self.sqlHead + self.sqlTail)
|
|
tdSql.checkData(0, 0, self.rowNum * (colIdx + 2))
|
|
tdSql.checkData(0, 1, self.rowNum * (colIdx + 2))
|
|
for i in range(2, colIdx + 2):
|
|
print("check2: i=%d colIdx=%d" % (i, colIdx))
|
|
tdSql.checkData(0, i, self.rowNum * (colIdx - i + 3))
|
|
|
|
def dropColumnAndCount(self):
|
|
tdSql.query(self.sqlHead + self.sqlTail)
|
|
res = []
|
|
for i in range(len(self.types)):
|
|
res.append(tdSql.getData(0, i + 2))
|
|
|
|
print(res)
|
|
|
|
for colIdx in range(len(self.types), 0, -1):
|
|
tdSql.execute("alter table stb drop column c%d" % (colIdx + 2))
|
|
# self.sqlHead = self.sqlHead + ",count(c%d) " %(colIdx + 2)
|
|
tdSql.query(self.sqlHead + self.sqlTail)
|
|
|
|
# count non-NULL values in each column
|
|
tdSql.checkData(0, 0, self.rowNum * (colIdx + 1))
|
|
tdSql.checkData(0, 1, self.rowNum * (colIdx + 1))
|
|
for i in range(2, colIdx + 2):
|
|
print("check1: i=%d colIdx=%d" % (i, colIdx))
|
|
tdSql.checkData(0, i, self.rowNum * (colIdx - i + 2))
|
|
|
|
# insert more rows
|
|
for k in range(self.rowNum):
|
|
self.ts += self.step
|
|
sql = "insert into tb values (%d, %d" % (self.ts, colIdx + 2)
|
|
for j in range(colIdx + 1):
|
|
sql += ", %d" % (colIdx + 2)
|
|
sql += ")"
|
|
tdSql.execute(sql)
|
|
|
|
# count non-NULL values in each column
|
|
tdSql.query(self.sqlHead + self.sqlTail)
|
|
tdSql.checkData(0, 0, self.rowNum * (colIdx + 2))
|
|
tdSql.checkData(0, 1, self.rowNum * (colIdx + 2))
|
|
for i in range(2, colIdx + 2):
|
|
print("check2: i=%d colIdx=%d" % (i, colIdx))
|
|
tdSql.checkData(0, i, self.rowNum * (colIdx - i + 3))
|
|
|
|
def run(self):
|
|
# Setup params
|
|
db = "db"
|
|
|
|
# Create db
|
|
tdSql.execute("drop database if exists %s" % (db))
|
|
tdSql.execute("reset query cache")
|
|
tdSql.execute("create database %s maxrows 200 maxtables 4" % (db))
|
|
tdSql.execute("use %s" % (db))
|
|
|
|
# Create a table with one colunm of int type and insert 300 rows
|
|
tdLog.info("Create stb and tb")
|
|
tdSql.execute("create table stb (ts timestamp, c1 int) tags (tg1 int)")
|
|
tdSql.execute("create table tb using stb tags (0)")
|
|
tdLog.info("Insert %d rows into tb" % (self.rowNum))
|
|
for k in range(1, self.rowNum + 1):
|
|
self.ts += self.step
|
|
tdSql.execute("insert into tb values (%d, 1)" % (self.ts))
|
|
|
|
# Alter tb and add a column of smallint type, then query tb to see if
|
|
# all added column are NULL
|
|
self.addColumnAndCount()
|
|
tdDnodes.stop(1)
|
|
time.sleep(5)
|
|
tdDnodes.start(1)
|
|
time.sleep(5)
|
|
tdSql.query(self.sqlHead + self.sqlTail)
|
|
for i in range(2, len(self.types) + 2):
|
|
tdSql.checkData(0, i, self.rowNum * (len(self.types) + 2 - i))
|
|
|
|
self.dropColumnAndCount()
|
|
|
|
def stop(self):
|
|
tdSql.close()
|
|
tdLog.success("%s successfully executed" % __file__)
|
|
|
|
|
|
#tdCases.addWindows(__file__, TDTestCase())
|
|
tdCases.addLinux(__file__, TDTestCase())
|