diff --git a/src/client/src/tscSQLParser.c b/src/client/src/tscSQLParser.c index c501456b705e2658b93b20f39d6745c3819f3d9f..5fa5770775936a4d0fd2f0fd17dad0768376c170 100644 --- a/src/client/src/tscSQLParser.c +++ b/src/client/src/tscSQLParser.c @@ -7425,8 +7425,6 @@ static int32_t checkUpdateTagPrjFunctions(SQueryInfo* pQueryInfo, char* msg) { if ((aAggs[functionId].status & TSDB_FUNCSTATE_SELECTIVITY) != 0) { numOfSelectivity++; - } else if ((aAggs[functionId].status & TSDB_FUNCSTATE_SCALAR) != 0) { - numOfScalar++; } else { numOfAggregation++; } @@ -7692,9 +7690,6 @@ int32_t doFunctionsCompatibleCheck(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, char* return invalidOperationMsg(msg, msg1); } - if (IS_SCALAR_FUNCTION(aAggs[f].status)) { - return invalidOperationMsg(msg, msg1); - } if (f == TSDB_FUNC_COUNT && pExpr->base.colInfo.colIndex == TSDB_TBNAME_COLUMN_INDEX) { return invalidOperationMsg(msg, msg1); diff --git a/src/query/inc/qAggMain.h b/src/query/inc/qAggMain.h index 5972bb0d8dc957f05f5a5f0fb03720ade653ef45..a23a2a6d11a51e7639e7e138c5e533443b537130 100644 --- a/src/query/inc/qAggMain.h +++ b/src/query/inc/qAggMain.h @@ -90,7 +90,6 @@ extern "C" { #define TSDB_FUNCSTATE_OF 0x10u // outer forward #define TSDB_FUNCSTATE_NEED_TS 0x20u // timestamp is required during query processing #define TSDB_FUNCSTATE_SELECTIVITY 0x40u // selectivity functions, can exists along with tag columns -#define TSDB_FUNCSTATE_SCALAR 0x80u #define TSDB_BASE_FUNC_SO TSDB_FUNCSTATE_SO | TSDB_FUNCSTATE_STREAM | TSDB_FUNCSTATE_STABLE | TSDB_FUNCSTATE_OF #define TSDB_BASE_FUNC_MO TSDB_FUNCSTATE_MO | TSDB_FUNCSTATE_STREAM | TSDB_FUNCSTATE_STABLE | TSDB_FUNCSTATE_OF @@ -231,7 +230,6 @@ int32_t isValidFunction(const char* name, int32_t len); #define IS_MULTIOUTPUT(x) (((x)&TSDB_FUNCSTATE_MO) != 0) #define IS_SINGLEOUTPUT(x) (((x)&TSDB_FUNCSTATE_SO) != 0) #define IS_OUTER_FORWARD(x) (((x)&TSDB_FUNCSTATE_OF) != 0) -#define IS_SCALAR_FUNCTION(x) (((x)&TSDB_FUNCSTATE_SCALAR) != 0) // determine the real data need to calculated the result enum { diff --git a/src/query/src/qExecutor.c b/src/query/src/qExecutor.c index 165ddd5219a463d2bf208fc1bd12131b6242f635..d55cb72f046f1fa49b60a26d3efecf4bcaa08178 100644 --- a/src/query/src/qExecutor.c +++ b/src/query/src/qExecutor.c @@ -435,10 +435,6 @@ static bool isScalarWithTagsQuery(SQLFunctionCtx *pCtx, int32_t numOfOutput) { hasTags = true; continue; } - - if ((aAggs[functId].status & TSDB_FUNCSTATE_SCALAR) != 0) { - numOfScalar++; - } } return (numOfScalar > 0 && hasTags); @@ -1869,7 +1865,7 @@ static int32_t setCtxTagColumnInfo(SQLFunctionCtx *pCtx, int32_t numOfOutput) { if (functionId == TSDB_FUNC_TAG_DUMMY || functionId == TSDB_FUNC_TS_DUMMY) { tagLen += pCtx[i].outputBytes; pTagCtx[num++] = &pCtx[i]; - } else if ((aAggs[functionId].status & TSDB_FUNCSTATE_SELECTIVITY) != 0 || (aAggs[functionId].status & TSDB_FUNCSTATE_SCALAR) != 0) { + } else if ((aAggs[functionId].status & TSDB_FUNCSTATE_SELECTIVITY) != 0) { p = &pCtx[i]; } else if (functionId == TSDB_FUNC_TS || functionId == TSDB_FUNC_TAG) { // tag function may be the group by tag column diff --git a/tests/script/general/parser/scalar_expression.sim b/tests/script/general/parser/scalar_expression.sim index a30b4ffbb006dda4a75f629009d6e0b4e62c3ec2..73847d984536006f259ec151fde92d5b23ef646a 100644 --- a/tests/script/general/parser/scalar_expression.sim +++ b/tests/script/general/parser/scalar_expression.sim @@ -199,12 +199,37 @@ endi if $data90 != 0.429470715 then return -1 endi +print execute sql select asin(c1) from $stb limit 1 +sql select asin(c1) from $stb limit 1 +if $data00 != 0.000000000 then + return -1 +endi +print execute sql select pow(c1,2) from $stb limit 1 offset 2; +sql select pow(c1,2) from $stb limit 1 offset 2; +if $data00 != 4.000000000 then + return -1 +endi +print exeucte sql select cos(c1) from db0.ct0, db0.ct1 where ct0.ts==ct1.ts; +sql select cos(c1) from db0.ct0, db0.ct1 where ct0.ts==ct1.ts +if $rows != 50 then + return -1 +endi +if $data10 != 0.540302306 then + return -1 +endi print ============== invalid expressions sql_error select agg(c1)+c2 from $stb sql_error select agg(c1+2) from $stb sql_error select agg(ceil(c1))+c2 from $stb sql_error select agg(ceil(c1)) from $stb +sql_error select asin(c1) from $stb group by tbname +sql_error select asin(c2) from $stb group by tgcol +sql_error select asin(c1) from $stb session_window(ts, 1s) +sql_error select cos(c1) from $stb state_window(f1) +sql_error select pow(c2,2) from $stb interval(1s) sliding(500a) +sql_error select pow(c2,2) from $stb state_window(f1) +sql_error select tan(f1) from $stb from d.st slimit 1 print =============== clear sql drop database $db sql show databases