未验证 提交 f80ddebd 编写于 作者: H haojun Liao 提交者: GitHub

Merge pull request #4849 from taosdata/feature/query

Feature/query
...@@ -5833,14 +5833,43 @@ static int32_t doAddGroupbyColumnsOnDemand(SSqlCmd* pCmd, SQueryInfo* pQueryInfo ...@@ -5833,14 +5833,43 @@ static int32_t doAddGroupbyColumnsOnDemand(SSqlCmd* pCmd, SQueryInfo* pQueryInfo
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
static int32_t doTagFunctionCheck(SQueryInfo* pQueryInfo) {
bool tagProjection = false;
bool tableCounting = false;
int32_t numOfCols = (int32_t) tscSqlExprNumOfExprs(pQueryInfo);
for (int32_t i = 0; i < numOfCols; ++i) {
SSqlExpr* pExpr = tscSqlExprGet(pQueryInfo, i);
int32_t functionId = pExpr->functionId;
if (functionId == TSDB_FUNC_TAGPRJ) {
tagProjection = true;
continue;
}
if (functionId == TSDB_FUNC_COUNT) {
assert(pExpr->colInfo.colId == TSDB_TBNAME_COLUMN_INDEX);
tableCounting = true;
}
}
return (tableCounting && tagProjection)? -1:0;
}
int32_t doFunctionsCompatibleCheck(SSqlCmd* pCmd, SQueryInfo* pQueryInfo) { int32_t doFunctionsCompatibleCheck(SSqlCmd* pCmd, SQueryInfo* pQueryInfo) {
const char* msg1 = "functions/columns not allowed in group by query"; const char* msg1 = "functions/columns not allowed in group by query";
const char* msg2 = "projection query on columns not allowed"; const char* msg2 = "projection query on columns not allowed";
const char* msg3 = "group by not allowed on projection query"; const char* msg3 = "group by not allowed on projection query";
const char* msg4 = "retrieve tags not compatible with group by or interval query"; const char* msg4 = "retrieve tags not compatible with group by or interval query";
const char* msg5 = "functions can not be mixed up";
// only retrieve tags, group by is not supportted // only retrieve tags, group by is not supportted
if (tscQueryTags(pQueryInfo)) { if (tscQueryTags(pQueryInfo)) {
if (doTagFunctionCheck(pQueryInfo) != TSDB_CODE_SUCCESS) {
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg5);
}
if (pQueryInfo->groupbyExpr.numOfGroupCols > 0 || pQueryInfo->interval.interval > 0) { if (pQueryInfo->groupbyExpr.numOfGroupCols > 0 || pQueryInfo->interval.interval > 0) {
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg4); return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg4);
} else { } else {
......
...@@ -1268,12 +1268,14 @@ static void min_function_f(SQLFunctionCtx *pCtx, int32_t index) { ...@@ -1268,12 +1268,14 @@ static void min_function_f(SQLFunctionCtx *pCtx, int32_t index) {
} }
static void stddev_function(SQLFunctionCtx *pCtx) { static void stddev_function(SQLFunctionCtx *pCtx) {
// the second stage to calculate standard deviation
SStddevInfo *pStd = GET_ROWCELL_INTERBUF(GET_RES_INFO(pCtx)); SStddevInfo *pStd = GET_ROWCELL_INTERBUF(GET_RES_INFO(pCtx));
if (pStd->stage == 0) { // the first stage is to calculate average value if (pStd->stage == 0) {
// the first stage is to calculate average value
avg_function(pCtx); avg_function(pCtx);
} else { } else if (pStd->num > 0) {
// the second stage to calculate standard deviation
// if pStd->num == 0, there are no numbers in the first round check. No need to do the second round
double *retVal = &pStd->res; double *retVal = &pStd->res;
double avg = pStd->avg; double avg = pStd->avg;
......
...@@ -548,7 +548,7 @@ static STimeWindow getActiveTimeWindow(SResultRowInfo *pWindowResInfo, int64_t t ...@@ -548,7 +548,7 @@ static STimeWindow getActiveTimeWindow(SResultRowInfo *pWindowResInfo, int64_t t
if (pWindowResInfo->curIndex == -1) { // the first window, from the previous stored value if (pWindowResInfo->curIndex == -1) { // the first window, from the previous stored value
w.skey = pWindowResInfo->prevSKey; w.skey = pWindowResInfo->prevSKey;
if (pQuery->interval.intervalUnit == 'n' || pQuery->interval.intervalUnit == 'y') { if (pQuery->interval.intervalUnit == 'n' || pQuery->interval.intervalUnit == 'y') {
w.ekey = taosTimeAdd(w.skey, pQuery->interval.interval, pQuery->interval.intervalUnit, pQuery->precision); w.ekey = taosTimeAdd(w.skey, pQuery->interval.interval, pQuery->interval.intervalUnit, pQuery->precision) - 1;
} else { } else {
w.ekey = w.skey + pQuery->interval.interval - 1; w.ekey = w.skey + pQuery->interval.interval - 1;
} }
......
...@@ -477,8 +477,6 @@ void taosHashEmpty(SHashObj *pHashObj) { ...@@ -477,8 +477,6 @@ void taosHashEmpty(SHashObj *pHashObj) {
return; return;
} }
uDebug("hash:%p cleanup hash table", pHashObj);
SHashNode *pNode, *pNext; SHashNode *pNode, *pNext;
__wr_lock(&pHashObj->lock, pHashObj->type); __wr_lock(&pHashObj->lock, pHashObj->type);
......
...@@ -37,6 +37,7 @@ if $data02 != 0 then ...@@ -37,6 +37,7 @@ if $data02 != 0 then
endi endi
print data03 = $data03 print data03 = $data03
if $data03 != 0.00000 then if $data03 != 0.00000 then
print expect 0.00000, actual: $data03
return -1 return -1
endi endi
if $data04 != 0.000000000 then if $data04 != 0.000000000 then
......
...@@ -361,3 +361,15 @@ endi ...@@ -361,3 +361,15 @@ endi
if $data10 != @20-07-30 17:43:59.000@ then if $data10 != @20-07-30 17:43:59.000@ then
return -1 return -1
endi endi
print =================>td-2610
sql select stddev(k) from tm2 where ts='2020-12-29 18:46:19.109'
if $rows != 0 then
print expect 0, actual:$rows
return -1
endi
sql select twa(k) from tm2 where ts='2020-12-29 18:46:19.109'
if $rows != 0 then
return -1
endi
...@@ -606,6 +606,10 @@ sql insert into t1 values ('2020-03-27 04:21:16.000', 1)('2020-03-27 04:31:17.00 ...@@ -606,6 +606,10 @@ sql insert into t1 values ('2020-03-27 04:21:16.000', 1)('2020-03-27 04:31:17.00
sql insert into t2 values ('2020-03-27 04:11:16.000', 1)('2020-03-27 04:11:17.000', 2) ('2020-03-27 04:11:18.000', 3) ('2020-03-27 04:11:19.000', 4) ; sql insert into t2 values ('2020-03-27 04:11:16.000', 1)('2020-03-27 04:11:17.000', 2) ('2020-03-27 04:11:18.000', 3) ('2020-03-27 04:11:19.000', 4) ;
sql insert into t2 values ('2020-03-27 04:21:16.000', 1)('2020-03-27 04:31:17.000', 2) ('2020-03-27 04:51:18.000', 3) ('2020-03-27 05:10:19.000', 4) ; sql insert into t2 values ('2020-03-27 04:21:16.000', 1)('2020-03-27 04:31:17.000', 2) ('2020-03-27 04:51:18.000', 3) ('2020-03-27 05:10:19.000', 4) ;
print =================>TD-2665
sql_error create table txx as select avg(c) as t from st;
sql_error create table txx1 as select avg(c) as t from t1;
print =================>TD-2236 print =================>TD-2236
sql select first(ts),last(ts) from t1 group by c; sql select first(ts),last(ts) from t1 group by c;
if $rows != 4 then if $rows != 4 then
......
run general/parser/alter.sim #run general/parser/alter.sim
sleep 500 #sleep 500
run general/parser/alter1.sim #run general/parser/alter1.sim
sleep 500 #sleep 500
run general/parser/alter_stable.sim #run general/parser/alter_stable.sim
sleep 500 #sleep 500
run general/parser/auto_create_tb.sim #run general/parser/auto_create_tb.sim
sleep 500 #sleep 500
run general/parser/auto_create_tb_drop_tb.sim #run general/parser/auto_create_tb_drop_tb.sim
sleep 500 #sleep 500
run general/parser/col_arithmetic_operation.sim #run general/parser/col_arithmetic_operation.sim
sleep 500 #sleep 500
run general/parser/columnValue.sim #run general/parser/columnValue.sim
sleep 500 #sleep 500
run general/parser/commit.sim #run general/parser/commit.sim
sleep 500 #sleep 500
run general/parser/create_db.sim #run general/parser/create_db.sim
sleep 500 #sleep 500
run general/parser/create_mt.sim #run general/parser/create_mt.sim
sleep 500 #sleep 500
run general/parser/create_tb.sim #run general/parser/create_tb.sim
sleep 500 #sleep 500
run general/parser/dbtbnameValidate.sim #run general/parser/dbtbnameValidate.sim
sleep 500 #sleep 500
run general/parser/fill.sim #run general/parser/fill.sim
sleep 500 #sleep 500
run general/parser/fill_stb.sim #run general/parser/fill_stb.sim
sleep 500 #sleep 500
#run general/parser/fill_us.sim # ##run general/parser/fill_us.sim #
sleep 500 #sleep 500
run general/parser/first_last.sim #run general/parser/first_last.sim
sleep 500 #sleep 500
run general/parser/import_commit1.sim #run general/parser/import_commit1.sim
sleep 500 #sleep 500
run general/parser/import_commit2.sim #run general/parser/import_commit2.sim
sleep 500 #sleep 500
run general/parser/import_commit3.sim #run general/parser/import_commit3.sim
sleep 500 #sleep 500
#run general/parser/import_file.sim ##run general/parser/import_file.sim
sleep 500 #sleep 500
run general/parser/insert_tb.sim #run general/parser/insert_tb.sim
sleep 500 #sleep 500
run general/parser/tags_dynamically_specifiy.sim #run general/parser/tags_dynamically_specifiy.sim
sleep 500 #sleep 500
run general/parser/interp.sim #run general/parser/interp.sim
sleep 500 #sleep 500
run general/parser/lastrow.sim #run general/parser/lastrow.sim
sleep 500 sleep 500
run general/parser/limit.sim run general/parser/limit.sim
sleep 500 sleep 500
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册