From f1e3e0892a4eed97a3944b404c641ae209e3886d Mon Sep 17 00:00:00 2001 From: 54liuyao <54liuyao@163.com> Date: Mon, 31 Oct 2022 14:03:57 +0800 Subject: [PATCH] fix(planner):add semantic check --- source/libs/parser/src/parTranslater.c | 9 +++++---- tests/script/tsim/parser/function.sim | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index bffeb06f7c..0c28831d90 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -674,6 +674,10 @@ static bool isSelectFunc(const SNode* pNode) { return (QUERY_NODE_FUNCTION == nodeType(pNode) && fmIsSelectFunc(((SFunctionNode*)pNode)->funcId)); } +static bool isWindowPseudoColumnFunc(const SNode* pNode) { + return (QUERY_NODE_FUNCTION == nodeType(pNode) && fmIsWindowPseudoColumnFunc(((SFunctionNode*)pNode)->funcId)); +} + static bool isTimelineFunc(const SNode* pNode) { return (QUERY_NODE_FUNCTION == nodeType(pNode) && fmIsTimelineFunc(((SFunctionNode*)pNode)->funcId)); } @@ -1264,10 +1268,7 @@ static EDealRes translateOperator(STranslateContext* pCxt, SOperatorNode* pOp) { } static EDealRes haveVectorFunction(SNode* pNode, void* pContext) { - if (isAggFunc(pNode)) { - *((bool*)pContext) = true; - return DEAL_RES_END; - } else if (isIndefiniteRowsFunc(pNode)) { + if (isAggFunc(pNode) || isIndefiniteRowsFunc(pNode) || isWindowPseudoColumnFunc(pNode)) { *((bool*)pContext) = true; return DEAL_RES_END; } diff --git a/tests/script/tsim/parser/function.sim b/tests/script/tsim/parser/function.sim index 0002a5d095..e3ef94e1cc 100644 --- a/tests/script/tsim/parser/function.sim +++ b/tests/script/tsim/parser/function.sim @@ -995,3 +995,22 @@ endi if $data00 != 0.000000000 then return -1 endi + +sql create table ft1(ts timestamp, a int, b int , c int, d double); + +sql insert into ft1 values(1648791213000,1,2,3,1.0); +sql_error select sum(_wduration), a from ft1 state_window(a); + +sql_error select count(_wduration), a from ft1 state_window(a); + +sql_error select max(_wduration), a from ft1 state_window(a); + +sql_error select sum(1 + _wduration), a from ft1 state_window(a); + +sql_error select sum(cast(_wstart as bigint)), a from ft1 state_window(a); + +sql_error select sum(cast(_wend as bigint)), a from ft1 state_window(a); + +sql_error create stream streams1 trigger at_once into streamt as select _wstart, sum(_wduration) from ft1 interval(10s); + +sql_error create stream streams1 trigger at_once into streamt as select _wstart, sum(cast(_wend as bigint)) from ft1 interval(10s); \ No newline at end of file