diff --git a/src/client/src/tscSQLParser.c b/src/client/src/tscSQLParser.c index d2fb5d6a47a80a62fc68f3e9271d5fa7c8df0370..d7b3ed1a4e5ae6eda8430a32f8119eabb0e6d7c9 100644 --- a/src/client/src/tscSQLParser.c +++ b/src/client/src/tscSQLParser.c @@ -8528,7 +8528,8 @@ int32_t doFunctionsCompatibleCheck(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, char* const char* msg4 = "retrieve tags not compatible with group by or interval query"; const char* msg5 = "functions can not be mixed up"; const char* msg6 = "TWA/Diff/Derivative/Irate/CSum/MAvg/Elapsed/stateCount/stateDuration only support group by tbname"; - const char* msg7 = "unique/state function does not supportted in state window query"; + const char* msg7 = "unique/state function not supported in state window query"; + const char* msg8 = "histogram function not supported in time window query"; // only retrieve tags, group by is not supportted if (tscQueryTags(pQueryInfo)) { @@ -8542,10 +8543,19 @@ int32_t doFunctionsCompatibleCheck(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, char* return TSDB_CODE_SUCCESS; } } + if (tscIsProjectionQuery(pQueryInfo) && tscIsSessionWindowQuery(pQueryInfo)) { return invalidOperationMsg(msg, msg3); } + size_t numOfExprs = tscNumOfExprs(pQueryInfo); + for (int32_t i = 0; i < numOfExprs; ++i) { + SExprInfo* pExpr = tscExprGet(pQueryInfo, i); + if ((isTimeWindowQuery(pQueryInfo) || pQueryInfo->stateWindow) && pExpr->base.functionId == TSDB_FUNC_HISTOGRAM) { + return invalidOperationMsg(msg, msg8); + } + } + if (pQueryInfo->groupbyExpr.numOfGroupCols > 0) { // check if all the tags prj columns belongs to the group by columns if (onlyTagPrjFunction(pQueryInfo) && allTagPrjInGroupby(pQueryInfo)) { @@ -8589,7 +8599,7 @@ int32_t doFunctionsCompatibleCheck(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, char* } } - if (pQueryInfo->stateWindow && (f == TSDB_FUNC_UNIQUE || f == TSDB_FUNC_STATE_COUNT || f == TSDB_FUNC_STATE_DURATION)){ + if (pQueryInfo->stateWindow && (f == TSDB_FUNC_UNIQUE || f == TSDB_FUNC_STATE_COUNT || f == TSDB_FUNC_STATE_DURATION)) { return invalidOperationMsg(msg, msg7); } diff --git a/tests/develop-test/2-query/function_histogram.py b/tests/develop-test/2-query/function_histogram.py index 87c38f35c91c54473653d2881936b033a555bbff..b16db06850f2e5cce537231ecca48279642d5112 100644 --- a/tests/develop-test/2-query/function_histogram.py +++ b/tests/develop-test/2-query/function_histogram.py @@ -2535,21 +2535,21 @@ class TDTestCase: tdSql.checkData(4, 0, '{"lower_bin":9, "upper_bin":15, "count":2}'); #select session - tdSql.query('select histogram(col_int, "user_input", "[0,10]", 0) from tb session (col_timestamp, 1w);') - tdSql.checkRows(1) - tdSql.checkData(0, 1, '{"lower_bin":0, "upper_bin":10, "count":10}'); + #tdSql.query('select histogram(col_int, "user_input", "[0,10]", 0) from tb session (col_timestamp, 1w);') + #tdSql.checkRows(1) + #tdSql.checkData(0, 1, '{"lower_bin":0, "upper_bin":10, "count":10}'); - tdSql.query('select histogram(col_int, "user_input", "[0,10]", 0) from tb session (col_timestamp, 1d);') - tdSql.checkRows(1) - tdSql.checkData(0, 1, '{"lower_bin":0, "upper_bin":10, "count":10}'); + #tdSql.query('select histogram(col_int, "user_input", "[0,10]", 0) from tb session (col_timestamp, 1d);') + #tdSql.checkRows(1) + #tdSql.checkData(0, 1, '{"lower_bin":0, "upper_bin":10, "count":10}'); - tdSql.query('select histogram(col_int, "user_input", "[0,10]", 0) from tb session (col_timestamp, 1h);') - tdSql.checkRows(1) - tdSql.checkData(0, 1, '{"lower_bin":0, "upper_bin":10, "count":10}'); + #tdSql.query('select histogram(col_int, "user_input", "[0,10]", 0) from tb session (col_timestamp, 1h);') + #tdSql.checkRows(1) + #tdSql.checkData(0, 1, '{"lower_bin":0, "upper_bin":10, "count":10}'); - tdSql.query('select histogram(col_int, "user_input", "[0,10]", 0) from tb session (col_timestamp, 1m);') - tdSql.checkRows(1) - tdSql.checkData(0, 1, '{"lower_bin":0, "upper_bin":10, "count":10}'); + #tdSql.query('select histogram(col_int, "user_input", "[0,10]", 0) from tb session (col_timestamp, 1m);') + #tdSql.checkRows(1) + #tdSql.checkData(0, 1, '{"lower_bin":0, "upper_bin":10, "count":10}'); #tdSql.query('select histogram(col_int, "user_input", "[0,10]", 0) from tb session (col_timestamp, 1s);') #tdSql.checkRows(16) @@ -2602,100 +2602,100 @@ class TDTestCase: tdSql.error('select histogram(col_int, "user_input", "[0,10]", 0) from tb state_window(col_nchar);') #select interval/sliding/fill - tdSql.query('select histogram(col_int, "user_input", "[0,10]", 0) from tb interval(1y);') - tdSql.checkRows(1) - tdSql.checkData(0, 1, '{"lower_bin":0, "upper_bin":10, "count":10}'); - - tdSql.query('select histogram(col_int, "user_input", "[0,10]", 0) from tb interval(1n);') - tdSql.checkRows(1) - tdSql.checkData(0, 1, '{"lower_bin":0, "upper_bin":10, "count":10}'); + #tdSql.query('select histogram(col_int, "user_input", "[0,10]", 0) from tb interval(1y);') + #tdSql.checkRows(1) + #tdSql.checkData(0, 1, '{"lower_bin":0, "upper_bin":10, "count":10}'); - tdSql.query('select histogram(col_int, "user_input", "[0,10]", 0) from tb interval(1w);') - tdSql.checkRows(1) - tdSql.checkData(0, 1, '{"lower_bin":0, "upper_bin":10, "count":10}'); + #tdSql.query('select histogram(col_int, "user_input", "[0,10]", 0) from tb interval(1n);') + #tdSql.checkRows(1) + #tdSql.checkData(0, 1, '{"lower_bin":0, "upper_bin":10, "count":10}'); - tdSql.query('select histogram(col_int, "user_input", "[0,10]", 0) from tb interval(1d);') - tdSql.checkRows(1) - tdSql.checkData(0, 1, '{"lower_bin":0, "upper_bin":10, "count":10}'); + #tdSql.query('select histogram(col_int, "user_input", "[0,10]", 0) from tb interval(1w);') + #tdSql.checkRows(1) + #tdSql.checkData(0, 1, '{"lower_bin":0, "upper_bin":10, "count":10}'); - tdSql.query('select histogram(col_int, "user_input", "[0,10]", 0) from tb interval(1h);') - tdSql.checkRows(1) - tdSql.checkData(0, 1, '{"lower_bin":0, "upper_bin":10, "count":10}'); - - tdSql.query('select histogram(col_int, "user_input", "[0,10]", 0) from tb interval(1s);') - tdSql.checkRows(16) - tdSql.checkData(0, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); - tdSql.checkData(1, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); - tdSql.checkData(2, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); - tdSql.checkData(3, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); - tdSql.checkData(4, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); - tdSql.checkData(5, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); - tdSql.checkData(6, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); - tdSql.checkData(7, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); - tdSql.checkData(8, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); - tdSql.checkData(9, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); - tdSql.checkData(10, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); - tdSql.checkData(11, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); - tdSql.checkData(12, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); - tdSql.checkData(13, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); - tdSql.checkData(14, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); - tdSql.checkData(15, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); - tdSql.query('select histogram(col_int, "user_input", "[0,10]", 0) from tb interval(1a);') - tdSql.checkRows(16) - tdSql.checkData(0, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); - tdSql.checkData(1, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); - tdSql.checkData(2, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); - tdSql.checkData(3, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); - tdSql.checkData(4, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); - tdSql.checkData(5, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); - tdSql.checkData(6, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); - tdSql.checkData(7, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); - tdSql.checkData(8, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); - tdSql.checkData(9, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); - tdSql.checkData(10, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); - tdSql.checkData(11, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); - tdSql.checkData(12, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); - tdSql.checkData(13, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); - tdSql.checkData(14, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); - tdSql.checkData(15, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); - - tdSql.query('select histogram(col_int, "user_input", "[0,10]", 0) from tb interval(1w) sliding(1w);') - tdSql.checkRows(1) - tdSql.checkData(0, 1, '{"lower_bin":0, "upper_bin":10, "count":10}'); + #tdSql.query('select histogram(col_int, "user_input", "[0,10]", 0) from tb interval(1d);') + #tdSql.checkRows(1) + #tdSql.checkData(0, 1, '{"lower_bin":0, "upper_bin":10, "count":10}'); - tdSql.query('select histogram(col_int, "user_input", "[0,10]", 0) from tb interval(1d) sliding(1d);') - tdSql.checkRows(1) - tdSql.checkData(0, 1, '{"lower_bin":0, "upper_bin":10, "count":10}'); + #tdSql.query('select histogram(col_int, "user_input", "[0,10]", 0) from tb interval(1h);') + #tdSql.checkRows(1) + #tdSql.checkData(0, 1, '{"lower_bin":0, "upper_bin":10, "count":10}'); - tdSql.query('select histogram(col_int, "user_input", "[0,10]", 0) from tb interval(1h) sliding(1h);') - tdSql.checkRows(1) - tdSql.checkData(0, 1, '{"lower_bin":0, "upper_bin":10, "count":10}'); - - tdSql.query('select histogram(col_int, "user_input", "[0,10]", 0) from tb interval(1s) sliding(1s);') - tdSql.checkRows(16) - tdSql.checkData(0, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); - tdSql.checkData(1, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); - tdSql.checkData(2, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); - tdSql.checkData(3, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); - tdSql.checkData(4, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); - tdSql.checkData(5, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); - tdSql.checkData(6, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); - tdSql.checkData(7, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); - tdSql.checkData(8, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); - tdSql.checkData(9, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); - tdSql.checkData(10, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); - tdSql.checkData(11, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); - tdSql.checkData(12, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); - tdSql.checkData(13, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); - tdSql.checkData(14, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); - tdSql.checkData(15, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); - - tdSql.error('select histogram(col_int, "user_input", "[0,10]", 0) from tb where col_timestamp > now - 1w and col_timestamp < now + 1w interval(1w) fill(NULL);') - tdSql.error('select histogram(col_int, "user_input", "[0,10]", 0) from tb where col_timestamp > now - 1d and col_timestamp < now + 1d interval(1d) fill(None);') - tdSql.error('select histogram(col_int, "user_input", "[0,10]", 0) from tb where col_timestamp > now - 1h and col_timestamp < now + 1h interval(1h) fill(Prev);') - tdSql.error('select histogram(col_int, "user_input", "[0,10]", 0) from tb where col_timestamp > now - 1m and col_timestamp < now + 1m interval(1m) fill(Next);') - tdSql.error('select histogram(col_int, "user_input", "[0,10]", 0) from tb where col_timestamp > now - 1s and col_timestamp < now + 1s interval(1s) fill(Linear);') - tdSql.error('select histogram(col_int, "user_input", "[0,10]", 0) from tb where col_timestamp > now - 1a and col_timestamp < now + 1a interval(1a) fill(Value, 1);') + #tdSql.query('select histogram(col_int, "user_input", "[0,10]", 0) from tb interval(1s);') + #tdSql.checkRows(16) + #tdSql.checkData(0, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); + #tdSql.checkData(1, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); + #tdSql.checkData(2, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); + #tdSql.checkData(3, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); + #tdSql.checkData(4, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); + #tdSql.checkData(5, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); + #tdSql.checkData(6, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); + #tdSql.checkData(7, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); + #tdSql.checkData(8, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); + #tdSql.checkData(9, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); + #tdSql.checkData(10, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); + #tdSql.checkData(11, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); + #tdSql.checkData(12, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); + #tdSql.checkData(13, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); + #tdSql.checkData(14, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); + #tdSql.checkData(15, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); + #tdSql.query('select histogram(col_int, "user_input", "[0,10]", 0) from tb interval(1a);') + #tdSql.checkRows(16) + #tdSql.checkData(0, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); + #tdSql.checkData(1, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); + #tdSql.checkData(2, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); + #tdSql.checkData(3, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); + #tdSql.checkData(4, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); + #tdSql.checkData(5, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); + #tdSql.checkData(6, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); + #tdSql.checkData(7, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); + #tdSql.checkData(8, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); + #tdSql.checkData(9, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); + #tdSql.checkData(10, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); + #tdSql.checkData(11, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); + #tdSql.checkData(12, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); + #tdSql.checkData(13, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); + #tdSql.checkData(14, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); + #tdSql.checkData(15, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); + + #tdSql.query('select histogram(col_int, "user_input", "[0,10]", 0) from tb interval(1w) sliding(1w);') + #tdSql.checkRows(1) + #tdSql.checkData(0, 1, '{"lower_bin":0, "upper_bin":10, "count":10}'); + + #tdSql.query('select histogram(col_int, "user_input", "[0,10]", 0) from tb interval(1d) sliding(1d);') + #tdSql.checkRows(1) + #tdSql.checkData(0, 1, '{"lower_bin":0, "upper_bin":10, "count":10}'); + + #tdSql.query('select histogram(col_int, "user_input", "[0,10]", 0) from tb interval(1h) sliding(1h);') + #tdSql.checkRows(1) + #tdSql.checkData(0, 1, '{"lower_bin":0, "upper_bin":10, "count":10}'); + + #tdSql.query('select histogram(col_int, "user_input", "[0,10]", 0) from tb interval(1s) sliding(1s);') + #tdSql.checkRows(16) + #tdSql.checkData(0, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); + #tdSql.checkData(1, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); + #tdSql.checkData(2, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); + #tdSql.checkData(3, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); + #tdSql.checkData(4, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); + #tdSql.checkData(5, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); + #tdSql.checkData(6, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); + #tdSql.checkData(7, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); + #tdSql.checkData(8, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); + #tdSql.checkData(9, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); + #tdSql.checkData(10, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); + #tdSql.checkData(11, 1, '{"lower_bin":0, "upper_bin":10, "count":1}'); + #tdSql.checkData(12, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); + #tdSql.checkData(13, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); + #tdSql.checkData(14, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); + #tdSql.checkData(15, 1, '{"lower_bin":0, "upper_bin":10, "count":0}'); + + #tdSql.error('select histogram(col_int, "user_input", "[0,10]", 0) from tb where col_timestamp > now - 1w and col_timestamp < now + 1w interval(1w) fill(NULL);') + #tdSql.error('select histogram(col_int, "user_input", "[0,10]", 0) from tb where col_timestamp > now - 1d and col_timestamp < now + 1d interval(1d) fill(None);') + #tdSql.error('select histogram(col_int, "user_input", "[0,10]", 0) from tb where col_timestamp > now - 1h and col_timestamp < now + 1h interval(1h) fill(Prev);') + #tdSql.error('select histogram(col_int, "user_input", "[0,10]", 0) from tb where col_timestamp > now - 1m and col_timestamp < now + 1m interval(1m) fill(Next);') + #tdSql.error('select histogram(col_int, "user_input", "[0,10]", 0) from tb where col_timestamp > now - 1s and col_timestamp < now + 1s interval(1s) fill(Linear);') + #tdSql.error('select histogram(col_int, "user_input", "[0,10]", 0) from tb where col_timestamp > now - 1a and col_timestamp < now + 1a interval(1a) fill(Value, 1);') #select group by tdSql.error('select histogram(col_int, "user_input", "[0,10]", 0) from stb group by col_tinyint;')