add tests

This commit is contained in:
wangjiaming0909 2024-03-05 11:26:50 +08:00
parent 9625ce7cdf
commit 3c870acb16
3 changed files with 24 additions and 18 deletions

View File

@ -10707,7 +10707,7 @@ static int32_t buildCreateTSMAReq(STranslateContext* pCxt, SCreateTSMAStmt* pStm
tNameExtractFullName(useTbName, pReq->stb); tNameExtractFullName(useTbName, pReq->stb);
pReq->igExists = pStmt->ignoreExists; pReq->igExists = pStmt->ignoreExists;
pReq->interval = ((SValueNode*)pStmt->pOptions->pInterval)->datum.i; pReq->interval = ((SValueNode*)pStmt->pOptions->pInterval)->datum.i;
pReq->intervalUnit = ((SValueNode*)pStmt->pOptions->pInterval)->unit; pReq->intervalUnit = TIME_UNIT_MILLISECOND;
#define TSMA_MIN_INTERVAL_MS 1 // 1ms #define TSMA_MIN_INTERVAL_MS 1 // 1ms
#define TSMA_MAX_INTERVAL_MS (60 * 60 * 1000) // 1h #define TSMA_MAX_INTERVAL_MS (60 * 60 * 1000) // 1h

View File

@ -6251,10 +6251,9 @@ static int32_t tsmaOptRewriteNodeList(SNodeList* pNodes, STSMAOptCtx* pCtx, cons
FOREACH(pNode, pNodes) { FOREACH(pNode, pNodes) {
SNode* pOut = pNode; SNode* pOut = pNode;
code = tsmaOptRewriteNode(&pOut, pCtx, pTsma, rewriteTbName, rewriteTag); code = tsmaOptRewriteNode(&pOut, pCtx, pTsma, rewriteTbName, rewriteTag);
if (TSDB_CODE_SUCCESS == code) { if (TSDB_CODE_SUCCESS != code) break;
REPLACE_NODE(pOut); REPLACE_NODE(pOut);
} }
}
return code; return code;
} }

View File

@ -229,7 +229,7 @@ class TSMATester:
if actual_ctx.has_tsma(): if actual_ctx.has_tsma():
self.check_result(sql, expect.ignore_res_order_) self.check_result(sql, expect.ignore_res_order_)
def check_sqls(self, sqls: list[str], expects: list[TSMAQueryContext]): def check_sqls(self, sqls, expects):
for sql, query_ctx in zip(sqls, expects): for sql, query_ctx in zip(sqls, expects):
self.check_sql(sql, query_ctx) self.check_sql(sql, query_ctx)
@ -314,9 +314,9 @@ class TSMATestSQLGenerator:
def generate_select_list(self, user_select_list: str, partition_by_list: str): def generate_select_list(self, user_select_list: str, partition_by_list: str):
res = user_select_list res = user_select_list
if self.res_.has_interval: if self.res_.has_interval and random.random() < 0.8:
res = res + ',_wstart, _wend' res = res + ',_wstart, _wend'
if self.res_.partition_by or self.res_.group_by: if self.res_.partition_by or self.res_.group_by and random.random() < 0.8:
res = res + f',{partition_by_list}' res = res + f',{partition_by_list}'
return res return res
@ -416,7 +416,7 @@ class TSMATestSQLGenerator:
def generate_tag_list(self): def generate_tag_list(self):
used_tag_num = random.randrange(1, self.opts_.tag_num) used_tag_num = random.randrange(1, self.opts_.tag_num)
ret = '' ret = ''
for i in range(used_tag_num): for _ in range(used_tag_num):
tag_idx = random.randint(1,self.opts_.tag_num) tag_idx = random.randint(1,self.opts_.tag_num)
ret = ret + self.opts_.tags_prefix + f'{tag_idx},' ret = ret + self.opts_.tags_prefix + f'{tag_idx},'
return ret[:-1] return ret[:-1]
@ -434,7 +434,7 @@ class TSMATestSQLGenerator:
return ret[:-1] return ret[:-1]
def generate_partition_by(self) -> tuple[str, str]: def generate_partition_by(self):
if not self.opts_.partition_by and not self.opts_.group_by: if not self.opts_.partition_by and not self.opts_.group_by:
return ('','') return ('','')
## no partition or group ## no partition or group
@ -649,6 +649,7 @@ class TDTestCase:
self.create_tsma('tsma2', 'test', 'meters', ['avg(c1)', 'avg(c2)'], '30m') self.create_tsma('tsma2', 'test', 'meters', ['avg(c1)', 'avg(c2)'], '30m')
self.create_tsma('tsma5', 'test', 'norm_tb', ['avg(c1)', 'avg(c2)'], '10m') self.create_tsma('tsma5', 'test', 'norm_tb', ['avg(c1)', 'avg(c2)'], '10m')
#time.sleep(99999999)
self.test_query_with_tsma_interval() self.test_query_with_tsma_interval()
self.test_query_with_tsma_agg() self.test_query_with_tsma_agg()
self.test_recursive_tsma() self.test_recursive_tsma()
@ -718,7 +719,7 @@ class TDTestCase:
opts.partition_by = True opts.partition_by = True
opts.interval = True opts.interval = True
opts.where_ts_range = True opts.where_ts_range = True
for i in range(1, 10000): for _ in range(1, 1000):
sql_generator = TSMATestSQLGenerator(opts) sql_generator = TSMATestSQLGenerator(opts)
sql = sql_generator.generate_one('avg(c1), avg(c2)', 'meters', '', interval_list) sql = sql_generator.generate_one('avg(c1), avg(c2)', 'meters', '', interval_list)
ctxs.append(TSMAQCBuilder().with_sql(sql).ignore_query_table().ignore_res_order(sql_generator.can_ignore_res_order()).get_qc()) ctxs.append(TSMAQCBuilder().with_sql(sql).ignore_query_table().ignore_res_order(sql_generator.can_ignore_res_order()).get_qc())
@ -771,6 +772,12 @@ class TDTestCase:
.should_query_with_tsma('tsma2', '2018-09-17 09:30:00','2018-09-17 09:59:59.999') \ .should_query_with_tsma('tsma2', '2018-09-17 09:30:00','2018-09-17 09:59:59.999') \
.should_query_with_table('meters', '2018-09-17 10:00:00.000','2018-09-17 10:23:19.800').get_qc()) .should_query_with_table('meters', '2018-09-17 10:00:00.000','2018-09-17 10:23:19.800').get_qc())
sql = "select avg(c1) + 1, avg(c2) from meters where ts >= '2018-09-17 9:30:00.118' and ts < '2018-09-17 10:50:00'"
ctxs.append(TSMAQCBuilder().with_sql(sql) \
.should_query_with_table('meters', '2018-09-17 9:30:00.118', '2018-09-17 9:59:59.999') \
.should_query_with_tsma('tsma2', '2018-09-17 10:00:00', '2018-09-17 10:29:59.999') \
.should_query_with_tsma('tsma1', '2018-09-17 10:30:00.000', '2018-09-17 10:49:59.999').get_qc())
sql = 'select avg(c1) + avg(c2) from meters where tbname like "%t1%"' sql = 'select avg(c1) + avg(c2) from meters where tbname like "%t1%"'
ctxs.append(TSMAQCBuilder().with_sql(sql).should_query_with_tsma('tsma2').get_qc()) ctxs.append(TSMAQCBuilder().with_sql(sql).should_query_with_tsma('tsma2').get_qc())