feat: add compressBasic.py case
This commit is contained in:
parent
68522895ab
commit
9478fd995e
|
@ -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")
|
||||
|
||||
|
|
|
@ -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}"
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue