feat: add compressBasic.py case

This commit is contained in:
Alex Duan 2024-04-14 11:16:38 +08:00
parent 68522895ab
commit 9478fd995e
3 changed files with 99 additions and 14 deletions

View File

@ -46,7 +46,7 @@ class TDTestCase(TBase):
# datatype 17
dtypes = [ "tinyint","tinyint unsigned","smallint","smallint unsigned","int","int unsigned",
"bigint","bigint unsigned","timestamp","bool","float","double","binary(16)","nchar(16)",
"varchar(16)","varbinary(16)","geometry(32)"]
"varchar(16)","varbinary(16)"]
def genAllSqls(self, stbName, max):
# encode
@ -222,22 +222,27 @@ class TDTestCase(TBase):
tdLog.debug(f"start to excute {__file__}")
# create db and stable
self.autoGen = AutoGen()
self.autoGen = AutoGen(step = 10, genDataMode = "fillts")
self.autoGen.create_db(self.db, 2, 3)
tdSql.execute(f"use {self.db}")
self.colCnt = 18
self.autoGen.create_stable(self.stb, 5, self.colCnt, 8, 8)
self.colCnt = 17
self.autoGen.create_stable(self.stb, 5, self.colCnt, 32, 32)
self.childCnt = 4
self.autoGen.create_child(self.stb, "d", self.childCnt)
self.autoGen.insert_data(10000)
self.autoGen.insert_data(1000)
# sql syntax
self.checkSqlSyntax()
# operateor
self.writeData(10000)
self.writeData(1000)
self.flushDb()
self.writeData(10000)
self.writeData(1000)
# check data correct
sql = f"select * from {self.db}.{self.stb}"
tdSql.query(sql)
self.autoGen.dataCorrect(tdSql.res, tdSql.getRows(), 10000)
tdLog.success(f"{__file__} successfully executed")

View File

@ -8,18 +8,21 @@ import threading
import random
import string
import time
import math
#
# Auto Gen class
#
# genDataMode fillone fillts others
class AutoGen:
def __init__(self, startTs = 1600000000000, step = 1000, batch = 500, fillOne=False):
def __init__(self, startTs = 1600000000000, step = 1000, batch = 500, genDataMode="others"):
self.startTs = startTs
self.ts = startTs
self.step = step
self.batch_size = batch
self.fillOne = fillOne
self.genDataMode = genDataMode
seed = time.time() % 10000
random.seed(seed)
@ -111,6 +114,76 @@ class AutoGen:
datas += '1'
return datas
# gen tags data
def fillts_data(self, ts, marr):
datas = ""
for c in marr:
data = ""
if c == 0 : # timestamp
data = "%d" % (ts)
elif c <= 2 : # tinyint
data = "%d"%(ts%100)
elif c <= 4 : # smallint
data = "%d"%(ts%10000)
elif c <= 6 : # int32
data = f"{ts%1000000000}"
elif c <= 8 : # bigint
data = f"{ts}"
elif c == 9 : # float
data = "%f"%(ts%10000000 )
elif c == 10 : # double
data = "%f"%(ts%1000000000000000)
elif c <= 11 : # bool
data = "%d"%(ts%2)
elif c == 16 : # geometry
data = f'"point({ts%100} {ts%1000})"'
else : # string binary nchar varchar
data = f"'{ts}'"
if datas != "":
datas += ","
datas += data
return datas
# check row correct
def rowCorrect(self, ts, value, c):
if c == 0 : # timestamp
ival = int(value.timestamp() * 1000)
return (ival == ts, ts)
elif c <= 2 : # tinyint
return (value == ts%100, ts%100)
elif c <= 4 : # smallint
return (value == ts%10000, ts%10000)
elif c <= 6 : # int
return (value == ts%1000000000, ts%1000000000)
elif c <= 8 : # bigint
return (value == ts, ts)
elif c == 9 : # float
fval = (ts%10000000)
return (abs(value - fval) < 0.01, fval)
elif c == 10 : # double
fval = (ts%1000000000000000)
return (abs(value - fval) < 0.0001, fval)
elif c <= 11 : # bool
return (value == ts%2, ts%2)
elif c == 16 : # geometry
return (value == f'point({ts%100} {ts%1000})', f'point({ts%100} {ts%1000})')
else : # string binary nchar varchar
return (int(value) == ts, f"{ts}")
# check row data correct
def dataCorrect(self, res, rowCnt, showStep = 1000):
colCnt = len(self.mcols)
for i in range(rowCnt):
for j in range(colCnt):
ts = int(res[i][0].timestamp() * 1000)
ret, value = self.rowCorrect(ts, res[i][j+1], self.mcols[j]) # j + 1 , remove first ts column
if ret == False:
tdLog.exit(f"rowCorrect check failed. i={i} j={j} data={res[i][j+1]} expect={value}")
if i > 0 and i % showStep == 0:
tdLog.info(f"check data correct rows {i}")
# generate specail wide random string
@ -151,17 +224,24 @@ class AutoGen:
# loop do
for i in range(cnt):
if self.fillOne :
# gen other col data
if self.genDataMode == "fillone":
value = self.fillone_data(i, self.mcols)
else:
value = self.gen_data(i, self.mcols)
ts += step
elif self.genDataMode == "fillts":
value = self.fillts_data(ts, self.mcols)
else:
value = self.gen_data(ts, self.mcols)
# check to execute sql
values += f"({ts},{value}) "
if batch_size == 1 or (i > 0 and i % batch_size == 0) :
sql = f"insert into {self.dbname}.{child_name} values {values}"
tdSql.execute(sql)
values = ""
# move next
ts += step
# end batch
if values != "":
sql = f"insert into {self.dbname}.{child_name} values {values}"

View File

@ -168,7 +168,7 @@ class TDSql:
time.sleep(1)
continue
def execute(self, sql, queryTimes=30, show=False):
def execute(self, sql, queryTimes=10, show=False):
self.sql = sql
if show:
tdLog.info(sql)