commit
f80ddebded
|
@ -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) {
|
||||||
}
|
}
|
||||||
|
|
||||||
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
|
||||||
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) {
|
||||||
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
|
||||||
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
|
||||||
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
|
||||||
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
|
||||||
|
|
|
@ -1,50 +1,50 @@
|
||||||
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
|
||||||
|
|
Loading…
Reference in New Issue