Merge branch '3.0' into feature/TD-11274-3.0

This commit is contained in:
Cary Xu 2022-07-22 12:27:37 +08:00
commit bb82cb0ef4
6 changed files with 33 additions and 13 deletions

View File

@ -52,7 +52,7 @@ TDengine的主要功能如下
采用 TDengine可将典型的物联网、车联网、工业互联网大数据平台的总拥有成本大幅降低。表现在几个方面 采用 TDengine可将典型的物联网、车联网、工业互联网大数据平台的总拥有成本大幅降低。表现在几个方面
1. 由于其超强性能,它能将系统需要的计算资源和存储资源大幅降低 1. 由于其超强性能,它能将系统需要的计算资源和存储资源大幅降低
2. 因为采用 SQL 接口,能与众多第三软件无缝集成,学习迁移成本大幅下降 2. 因为采用 SQL 接口,能与众多第三软件无缝集成,学习迁移成本大幅下降
3. 因为其 All In One 的特性,系统复杂度降低,能降研发成本 3. 因为其 All In One 的特性,系统复杂度降低,能降研发成本
4. 因为运维维护简单,运营维护成本能大幅降低 4. 因为运维维护简单,运营维护成本能大幅降低

View File

@ -884,9 +884,17 @@ static int32_t createDistinctLogicNode(SLogicPlanContext* pCxt, SSelectStmt* pSe
int32_t code = TSDB_CODE_SUCCESS; int32_t code = TSDB_CODE_SUCCESS;
// set grouyp keys, agg funcs and having conditions // set grouyp keys, agg funcs and having conditions
pAgg->pGroupKeys = nodesCloneList(pSelect->pProjectionList); SNodeList* pGroupKeys = NULL;
if (NULL == pAgg->pGroupKeys) { SNode* pProjection = NULL;
code = TSDB_CODE_OUT_OF_MEMORY; FOREACH(pProjection, pSelect->pProjectionList) {
code = nodesListMakeStrictAppend(&pGroupKeys, createGroupingSetNode(pProjection));
if (TSDB_CODE_SUCCESS != code) {
nodesDestroyList(pGroupKeys);
break;
}
}
if (TSDB_CODE_SUCCESS == code) {
pAgg->pGroupKeys = pGroupKeys;
} }
// rewrite the expression in subsequent clauses // rewrite the expression in subsequent clauses

View File

@ -2150,6 +2150,15 @@ static bool tagScanMayBeOptimized(SLogicNode* pNode) {
return false; return false;
} }
SNode* pGroupKey = NULL;
FOREACH(pGroupKey, pAgg->pGroupKeys) {
SNode* pGroup = NULL;
FOREACH(pGroup, ((SGroupingSetNode*)pGroupKey)->pParameterList) {
if (QUERY_NODE_COLUMN != nodeType(pGroup)) {
return false;
}
}
}
return true; return true;
} }

View File

@ -13,6 +13,7 @@
import random import random
import string import string
from datetime import datetime
from util import constant from util import constant
from util.log import * from util.log import *
from util.cases import * from util.cases import *
@ -55,7 +56,7 @@ class TDTestCase:
else: else:
tdLog.exit(f'{col_name} data check failure') tdLog.exit(f'{col_name} data check failure')
elif col_type.lower() == 'timestamp': elif col_type.lower() == 'timestamp':
tdSql.checkEqual(str(tdSql.queryResult[0][0]),str(datetime.datetime.fromtimestamp(value/1000).strftime("%Y-%m-%d %H:%M:%S.%f"))) tdSql.checkEqual(str(tdSql.queryResult[0][0]),str(datetime.fromtimestamp(value/1000).strftime("%Y-%m-%d %H:%M:%S.%f")))
else: else:
tdSql.checkEqual(tdSql.queryResult[0][0],value) tdSql.checkEqual(tdSql.queryResult[0][0],value)
def update_and_check_data(self,tbname,col_name,col_type,value,dbname): def update_and_check_data(self,tbname,col_name,col_type,value,dbname):
@ -242,8 +243,11 @@ class TDTestCase:
self.error_check(self.ctbname,self.column_dict,'ctb',self.stbname) self.error_check(self.ctbname,self.column_dict,'ctb',self.stbname)
def run(self): def run(self):
self.update_check() #!bug TD-17708 and TD-17709
self.update_check_error() # for i in range(10):
self.update_check()
self.update_check_error()
# i+=1
def stop(self): def stop(self):
tdSql.close() tdSql.close()

View File

@ -222,9 +222,9 @@ class TDTestCase:
if vgroups_num >= 2: if vgroups_num >= 2:
tdLog.info(f'This scene with {vgroups_num} vgroups is ok!') tdLog.info(f'This scene with {vgroups_num} vgroups is ok!')
continue continue
else: # else:
tdLog.exit( # tdLog.exit(
'This scene does not meet the requirements with {vgroups_num} vgroup!\n') # f'This scene does not meet the requirements with {vgroups_num} vgroup!\n')
for i in range(self.tbnum): for i in range(self.tbnum):
for j in range(self.rowNum): for j in range(self.rowNum):

View File

@ -62,8 +62,7 @@ python3 ./test.py -f 2-query/char_length.py -R
python3 ./test.py -f 2-query/check_tsdb.py python3 ./test.py -f 2-query/check_tsdb.py
python3 ./test.py -f 2-query/check_tsdb.py -R python3 ./test.py -f 2-query/check_tsdb.py -R
# python3 ./test.py -f 1-insert/update_data.py
python3 ./test.py -f 1-insert/update_data.py
python3 ./test.py -f 1-insert/delete_data.py python3 ./test.py -f 1-insert/delete_data.py
python3 ./test.py -f 2-query/db.py python3 ./test.py -f 2-query/db.py