From bf13c90a619329b9b4014709d59604ae05c056fc Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Tue, 11 Feb 2025 19:14:15 +0800 Subject: [PATCH 1/5] feat: support range fill with interval limitation --- include/libs/nodes/querynodes.h | 2 +- source/libs/nodes/src/nodesUtilFuncs.c | 2 +- source/libs/parser/inc/parAst.h | 4 +- source/libs/parser/inc/sql.y | 5 +- source/libs/parser/src/parAstCreater.c | 24 ++++-- source/libs/parser/src/parTranslater.c | 14 +--- tests/army/query/function/in/interp.in | 99 ++++++++++++++++++++++++ tests/army/query/function/test_interp.py | 19 +++++ 8 files changed, 147 insertions(+), 22 deletions(-) diff --git a/include/libs/nodes/querynodes.h b/include/libs/nodes/querynodes.h index ec3e37b7e5..c80dda863f 100644 --- a/include/libs/nodes/querynodes.h +++ b/include/libs/nodes/querynodes.h @@ -420,7 +420,7 @@ typedef struct SWindowOffsetNode { typedef struct SRangeAroundNode { ENodeType type; - SNode* pTimepoint; + SNode* pRange; SNode* pInterval; } SRangeAroundNode; diff --git a/source/libs/nodes/src/nodesUtilFuncs.c b/source/libs/nodes/src/nodesUtilFuncs.c index f178b42988..b6607e38d9 100644 --- a/source/libs/nodes/src/nodesUtilFuncs.c +++ b/source/libs/nodes/src/nodesUtilFuncs.c @@ -1271,7 +1271,7 @@ void nodesDestroyNode(SNode* pNode) { case QUERY_NODE_RANGE_AROUND: { SRangeAroundNode* pAround = (SRangeAroundNode*)pNode; nodesDestroyNode(pAround->pInterval); - nodesDestroyNode(pAround->pTimepoint); + nodesDestroyNode(pAround->pRange); break; } case QUERY_NODE_STREAM_NOTIFY_OPTIONS: { diff --git a/source/libs/parser/inc/parAst.h b/source/libs/parser/inc/parAst.h index 559009d215..d99dfc977a 100644 --- a/source/libs/parser/inc/parAst.h +++ b/source/libs/parser/inc/parAst.h @@ -164,9 +164,9 @@ SNode* createIntervalWindowNode(SAstCreateContext* pCxt, SNode* pInterval, S SNode* createWindowOffsetNode(SAstCreateContext* pCxt, SNode* pStartOffset, SNode* pEndOffset); SNode* createFillNode(SAstCreateContext* pCxt, EFillMode mode, SNode* pValues); SNode* createGroupingSetNode(SAstCreateContext* pCxt, SNode* pNode); -SNode* createInterpTimeRange(SAstCreateContext* pCxt, SNode* pStart, SNode* pEnd); +SNode* createInterpTimeRange(SAstCreateContext* pCxt, SNode* pStart, SNode* pEnd, SNode* pInterval); SNode* createInterpTimePoint(SAstCreateContext* pCxt, SNode* pPoint); -SNode* createInterpTimeAround(SAstCreateContext* pCxt, SNode* pTimepoint, SNode* pInterval); +SNode* createInterpTimeAround(SAstCreateContext* pCxt, SNode* pStart, SNode* pEnd, SNode* pInterval); SNode* createWhenThenNode(SAstCreateContext* pCxt, SNode* pWhen, SNode* pThen); SNode* createCaseWhenNode(SAstCreateContext* pCxt, SNode* pCase, SNodeList* pWhenThenList, SNode* pElse); SNode* createAlterSingleTagColumnNode(SAstCreateContext* pCtx, SToken* token, SNode* pVal); diff --git a/source/libs/parser/inc/sql.y b/source/libs/parser/inc/sql.y index 9642eb7f5b..cc410f0507 100755 --- a/source/libs/parser/inc/sql.y +++ b/source/libs/parser/inc/sql.y @@ -1705,7 +1705,10 @@ having_clause_opt(A) ::= HAVING search_condition(B). range_opt(A) ::= . { A = NULL; } range_opt(A) ::= - RANGE NK_LP expr_or_subquery(B) NK_COMMA expr_or_subquery(C) NK_RP. { A = createInterpTimeRange(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)); } + RANGE NK_LP expr_or_subquery(B) NK_COMMA expr_or_subquery(C) NK_COMMA expr_or_subquery(D) NK_RP. { + A = createInterpTimeRange(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D)); } +range_opt(A) ::= + RANGE NK_LP expr_or_subquery(B) NK_COMMA expr_or_subquery(C) NK_RP. { A = createInterpTimeRange(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C), NULL); } range_opt(A) ::= RANGE NK_LP expr_or_subquery(B) NK_RP. { A = createInterpTimePoint(pCxt, releaseRawExprNode(pCxt, B)); } diff --git a/source/libs/parser/src/parAstCreater.c b/source/libs/parser/src/parAstCreater.c index 0c0c42def5..2ca072fef1 100644 --- a/source/libs/parser/src/parAstCreater.c +++ b/source/libs/parser/src/parAstCreater.c @@ -1471,13 +1471,19 @@ _err: return NULL; } -SNode* createInterpTimeRange(SAstCreateContext* pCxt, SNode* pStart, SNode* pEnd) { +SNode* createInterpTimeRange(SAstCreateContext* pCxt, SNode* pStart, SNode* pEnd, SNode* pInterval) { CHECK_PARSER_STATUS(pCxt); - if (pEnd && nodeType(pEnd) == QUERY_NODE_VALUE && ((SValueNode*)pEnd)->flag & VALUE_FLAG_IS_DURATION) { - return createInterpTimeAround(pCxt, pStart, pEnd); + if (NULL == pInterval) { + if (pEnd && nodeType(pEnd) == QUERY_NODE_VALUE && ((SValueNode*)pEnd)->flag & VALUE_FLAG_IS_DURATION) { + return createInterpTimeAround(pCxt, pStart, NULL, pEnd); + } + return createBetweenAnd(pCxt, createPrimaryKeyCol(pCxt, NULL), pStart, pEnd); } - return createBetweenAnd(pCxt, createPrimaryKeyCol(pCxt, NULL), pStart, pEnd); + + return createInterpTimeAround(pCxt, pStart, pEnd, pInterval); + _err: + nodesDestroyNode(pStart); nodesDestroyNode(pEnd); return NULL; @@ -1491,12 +1497,16 @@ _err: return NULL; } -SNode* createInterpTimeAround(SAstCreateContext* pCxt, SNode* pTimepoint, SNode* pInterval) { +SNode* createInterpTimeAround(SAstCreateContext* pCxt, SNode* pStart, SNode* pEnd, SNode* pInterval) { CHECK_PARSER_STATUS(pCxt); SRangeAroundNode* pAround = NULL; pCxt->errCode = nodesMakeNode(QUERY_NODE_RANGE_AROUND, (SNode**)&pAround); CHECK_PARSER_STATUS(pCxt); - pAround->pTimepoint = createInterpTimePoint(pCxt, pTimepoint); + if (NULL == pEnd) { + pAround->pRange = createInterpTimePoint(pCxt, pStart); + } else { + pAround->pRange = createBetweenAnd(pCxt, createPrimaryKeyCol(pCxt, NULL), pStart, pEnd); + } pAround->pInterval = pInterval; CHECK_PARSER_STATUS(pCxt); return (SNode*)pAround; @@ -1668,7 +1678,7 @@ SNode* addRangeClause(SAstCreateContext* pCxt, SNode* pStmt, SNode* pRange) { if (pRange && nodeType(pRange) == QUERY_NODE_RANGE_AROUND) { pSelect->pRangeAround = pRange; SRangeAroundNode* pAround = (SRangeAroundNode*)pRange; - TSWAP(pSelect->pRange, pAround->pTimepoint); + TSWAP(pSelect->pRange, pAround->pRange); } else { pSelect->pRange = pRange; } diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index 43ac27ea33..17c9d315bc 100755 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -2572,7 +2572,7 @@ static int32_t translateInterpFunc(STranslateContext* pCxt, SFunctionNode* pFunc if (!fmIsInterpFunc(pFunc->funcId)) { return TSDB_CODE_SUCCESS; } - if (!isSelectStmt(pCxt->pCurrStmt) || SQL_CLAUSE_SELECT != pCxt->currClause) { + if (!isSelectStmt(pCxt->pCurrStmt) || (SQL_CLAUSE_SELECT != pCxt->currClause && SQL_CLAUSE_ORDER_BY != pCxt->currClause)) { return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_NOT_ALLOWED_FUNC); } SSelectStmt* pSelect = (SSelectStmt*)pCxt->pCurrStmt; @@ -6415,7 +6415,7 @@ static int32_t translateInterpAround(STranslateContext* pCxt, SSelectStmt* pSele SRangeAroundNode* pAround = (SRangeAroundNode*)pSelect->pRangeAround; code = translateExpr(pCxt, &pAround->pInterval); if (TSDB_CODE_SUCCESS == code) { - if (nodeType(pAround->pInterval) == QUERY_NODE_VALUE) { + if (nodeType(pAround->pInterval) == QUERY_NODE_VALUE && ((SValueNode*)pAround->pInterval)->flag & VALUE_FLAG_IS_DURATION) { SValueNode* pVal = (SValueNode*)pAround->pInterval; if (pVal->datum.i == 0) { return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_FILL_TIME_RANGE, @@ -6475,14 +6475,8 @@ static int32_t translateInterp(STranslateContext* pCxt, SSelectStmt* pSelect) { "Missing RANGE clause, EVERY clause or FILL clause"); } } - } else { - if (pSelect->pEvery) { - return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_INTERP_CLAUSE, - "Range clause with around interval can't be used with EVERY clause"); - } - if (!pSelect->pFill) { - return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_INTERP_CLAUSE, "Missing FILL clause"); - } + } else if (!pSelect->pFill) { + return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_INTERP_CLAUSE, "Missing FILL clause"); } } diff --git a/tests/army/query/function/in/interp.in b/tests/army/query/function/in/interp.in index 1ba768e6e3..c087309b4c 100644 --- a/tests/army/query/function/in/interp.in +++ b/tests/army/query/function/in/interp.in @@ -68,3 +68,102 @@ select _irowts, interp(c1), t1 from test.ts5941_child range('2020-02-01 00:00:00 select _irowts, interp(c1), t1 from test.ts5941_child range('2020-02-01 00:00:00', '2020-02-01 00:00:20') every(1s) fill(linear); select _irowts, interp(c1), t1 from test.ts5941_child range('2020-02-01 00:00:00', '2020-02-01 00:00:20') every(1s) fill(null); select _irowts, interp(c1), t1 from test.ts5941_child range('2020-02-01 00:00:00', '2020-02-01 00:00:20') every(1s) fill(value, 1); + +select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99); +select interp(c1), _isfilled from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99); +select _isfilled, _irowts, interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99); +select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99) order by _irowts; +select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99) order by interp(c1) desc; +select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99) order by _irowts desc; +select interp(c1), _irowts_origin from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99); +select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99) order by _irowts_origin; +select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99) order by _irowts_origin desc; +select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99) order by interp(c1), _irowts_origin desc; +select _irowts, interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99) order by interp(c1) desc, _irowts desc; +select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99) order by _irowts, _irowts_origin desc; +select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99) order by _irowts desc, _irowts_origin; +select _irowts_origin, interp(c1), _irowts from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99); +select _irowts_origin, interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99) order by _irowts; +select _irowts_origin, interp(c1), _irowts from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99) order by _irowts_origin desc, _irowts; +select _isfilled, _irowts_origin, _irowts, interp(c1), tbname from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99) order by _irowts_origin desc, _irowts desc; +select interp(c1), interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, 98); +select interp(c1), _isfilled, interp(c6) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, false); +select _isfilled, _irowts, interp(c1), interp(c5) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, 98); +select interp(c1), interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, NULL) order by _irowts; +select interp(c1), interp(c6) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, 0) order by _irowts desc; +select interp(c1), _irowts_origin, interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, 'a'); +select interp(c1), interp(c4), interp(c5) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, 9.9, 9) order by _irowts_origin; +select interp(c1), interp(c2) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, 9) order by _irowts_origin desc; +select interp(c6), interp(c1) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 3, 99) order by _irowts, _irowts_origin desc; +select interp(c1), interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 100, 99) order by _irowts desc, _irowts_origin; +select _irowts_origin, interp(c1), _irowts, interp(c6) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, 0); +select _irowts_origin, interp(c6), interp(c1) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, 99) order by _irowts; +select _irowts_origin, interp(c4), interp(c1), _irowts from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, 9) order by _irowts_origin desc, _irowts; +select _isfilled, interp(c4), _irowts_origin, _irowts, interp(c1), tbname from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, 1) order by _irowts_origin desc, _irowts desc; + + +select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99); +select interp(c1), _isfilled from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99); +select _isfilled, _irowts, interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99); +select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99) order by _irowts; +select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99) order by interp(c1) desc; +select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99) order by _irowts desc; +select interp(c1), _irowts_origin from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99); +select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99) order by _irowts_origin; +select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99) order by _irowts_origin desc; +select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99) order by interp(c1), _irowts_origin desc; +select _irowts, interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99) order by interp(c1) desc, _irowts desc; +select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99) order by _irowts, _irowts_origin desc; +select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99) order by _irowts desc, _irowts_origin; +select _irowts_origin, interp(c1), _irowts from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99); +select _irowts_origin, interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99) order by _irowts; +select _irowts_origin, interp(c1), _irowts from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99) order by _irowts_origin desc, _irowts; +select _isfilled, _irowts_origin, _irowts, interp(c1), tbname from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99) order by _irowts_origin desc, _irowts desc; +select interp(c1), interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, 98); +select interp(c1), _isfilled, interp(c6) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, false); +select _isfilled, _irowts, interp(c1), interp(c5) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, 98); +select interp(c1), interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, NULL) order by _irowts; +select interp(c1), interp(c6) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, 0) order by _irowts desc; +select interp(c1), _irowts_origin, interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, 'a'); +select interp(c1), interp(c4), interp(c5) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, 9.9, 9) order by _irowts_origin; +select interp(c1), interp(c2) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, 9) order by _irowts_origin desc; +select interp(c6), interp(c1) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 3, 99) order by _irowts, _irowts_origin desc; +select interp(c1), interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 100, 99) order by _irowts desc, _irowts_origin; +select _irowts_origin, interp(c1), _irowts, interp(c6) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, 0); +select _irowts_origin, interp(c6), interp(c1) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, 99) order by _irowts; +select _irowts_origin, interp(c4), interp(c1), _irowts from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, 9) order by _irowts_origin desc, _irowts; +select _isfilled, interp(c4), _irowts_origin, _irowts, interp(c1), tbname from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, 1) order by _irowts_origin desc, _irowts desc; + + +select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99); +select interp(c1), _isfilled from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99); +select _isfilled, _irowts, interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99); +select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99) order by _irowts; +select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99) order by interp(c1) desc; +select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99) order by _irowts desc; +select interp(c1), _irowts_origin from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99); +select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99) order by _irowts_origin; +select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99) order by _irowts_origin desc; +select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99) order by interp(c1), _irowts_origin desc; +select _irowts, interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99) order by interp(c1) desc, _irowts desc; +select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99) order by _irowts, _irowts_origin desc; +select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99) order by _irowts desc, _irowts_origin; +select _irowts_origin, interp(c1), _irowts from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99); +select _irowts_origin, interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99) order by _irowts; +select _irowts_origin, interp(c1), _irowts from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99) order by _irowts_origin desc, _irowts; +select _isfilled, _irowts_origin, _irowts, interp(c1), tbname from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99) order by _irowts_origin desc, _irowts desc; +select interp(c1), interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, 98); +select interp(c1), _isfilled, interp(c6) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, false); +select _isfilled, _irowts, interp(c1), interp(c5) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, 98); +select interp(c1), interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, NULL) order by _irowts; +select interp(c1), interp(c6) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, 0) order by _irowts desc; +select interp(c1), _irowts_origin, interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, 'a'); +select interp(c1), interp(c4), interp(c5) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, 9.9, 9) order by _irowts_origin; +select interp(c1), interp(c2) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, 9) order by _irowts_origin desc; +select interp(c6), interp(c1) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 3, 99) order by _irowts, _irowts_origin desc; +select interp(c1), interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 100, 99) order by _irowts desc, _irowts_origin; +select _irowts_origin, interp(c1), _irowts, interp(c6) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, 0); +select _irowts_origin, interp(c6), interp(c1) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, 99) order by _irowts; +select _irowts_origin, interp(c4), interp(c1), _irowts from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, 9) order by _irowts_origin desc, _irowts; +select _isfilled, interp(c4), _irowts_origin, _irowts, interp(c1), tbname from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, 1) order by _irowts_origin desc, _irowts desc; + diff --git a/tests/army/query/function/test_interp.py b/tests/army/query/function/test_interp.py index e543d81363..ffbadd6e7e 100644 --- a/tests/army/query/function/test_interp.py +++ b/tests/army/query/function/test_interp.py @@ -71,8 +71,27 @@ class TDTestCase(TBase): tdCom.compare_testcase_result(self.sqlFile, self.ansFile, testCase) + def test_abnormal_query(self, testCase): + tdLog.info("test abnormal query.") + tdSql.error("select interp(c1), interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99);") + tdSql.error("select _irowts from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near);") + tdSql.error("select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s);") + tdSql.error("select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) fill(near);") + tdSql.error("select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near);") + tdSql.error("select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, c1);") + tdSql.error("select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', 1s, '2020-01-01 00:00:30.000') every(2s) fill(near, 99);") + tdSql.error("select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(linear, 99);") + tdSql.error("select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(value, 99);") + tdSql.error("select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(value_f, 99);") + tdSql.error("select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(null, 99);") + tdSql.error("select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(null_f, 99);") + tdSql.error("select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', '1s') every(2s) fill(prev, 99);") + tdSql.error("select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1n) every(2s) fill(prev, 99);") + tdSql.error("select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1y) every(2s) fill(prev, 99);") + def test_interp(self): self.test_normal_query_new("interp") + self.test_abnormal_query("interp") def run(self): tdLog.debug(f"start to excute {__file__}") From e6799c90706458a5295ea0b6940015470e3fff9b Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Wed, 12 Feb 2025 10:20:58 +0800 Subject: [PATCH 2/5] fix: correct expected result --- tests/army/query/function/ans/interp.csv | 1621 ++++++++++++++++++++++ 1 file changed, 1621 insertions(+) diff --git a/tests/army/query/function/ans/interp.csv b/tests/army/query/function/ans/interp.csv index 1d4e2b0a38..66e4fdc3c6 100644 --- a/tests/army/query/function/ans/interp.csv +++ b/tests/army/query/function/ans/interp.csv @@ -1120,3 +1120,1624 @@ taos> select _irowts, interp(c1), t1 from test.ts5941_child range('2020-02-01 00 2020-02-01 00:00:19.000 | 1 | testts5941 | 2020-02-01 00:00:20.000 | 1 | testts5941 | +taos> select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99); + interp(c1) | +============== + 0 | + 1 | + 3 | + 6 | + 99 | + 10 | + 99 | + 99 | + 15 | + 99 | + 99 | + 21 | + 99 | + 99 | + 99 | + 99 | + +taos> select interp(c1), _isfilled from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99); + interp(c1) | _isfilled | +========================== + 0 | false | + 1 | true | + 3 | true | + 6 | false | + 99 | true | + 10 | false | + 99 | true | + 99 | true | + 15 | true | + 99 | true | + 99 | true | + 21 | true | + 99 | true | + 99 | true | + 99 | true | + 99 | true | + +taos> select _isfilled, _irowts, interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99); + _isfilled | _irowts | interp(c1) | +==================================================== + false | 2020-01-01 00:00:00.000 | 0 | + true | 2020-01-01 00:00:02.000 | 1 | + true | 2020-01-01 00:00:04.000 | 3 | + false | 2020-01-01 00:00:06.000 | 6 | + true | 2020-01-01 00:00:08.000 | 99 | + false | 2020-01-01 00:00:10.000 | 10 | + true | 2020-01-01 00:00:12.000 | 99 | + true | 2020-01-01 00:00:14.000 | 99 | + true | 2020-01-01 00:00:16.000 | 15 | + true | 2020-01-01 00:00:18.000 | 99 | + true | 2020-01-01 00:00:20.000 | 99 | + true | 2020-01-01 00:00:22.000 | 21 | + true | 2020-01-01 00:00:24.000 | 99 | + true | 2020-01-01 00:00:26.000 | 99 | + true | 2020-01-01 00:00:28.000 | 99 | + true | 2020-01-01 00:00:30.000 | 99 | + +taos> select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99) order by _irowts; + interp(c1) | +============== + 0 | + 1 | + 3 | + 6 | + 99 | + 10 | + 99 | + 99 | + 15 | + 99 | + 99 | + 21 | + 99 | + 99 | + 99 | + 99 | + +taos> select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99) order by interp(c1) desc; + interp(c1) | +============== + 99 | + 99 | + 99 | + 99 | + 99 | + 99 | + 99 | + 99 | + 99 | + 21 | + 15 | + 10 | + 6 | + 3 | + 1 | + 0 | + +taos> select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99) order by _irowts desc; + interp(c1) | +============== + 99 | + 99 | + 99 | + 99 | + 21 | + 99 | + 99 | + 15 | + 99 | + 99 | + 10 | + 99 | + 6 | + 3 | + 1 | + 0 | + +taos> select interp(c1), _irowts_origin from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99); + interp(c1) | _irowts_origin | +======================================== + 0 | 2020-01-01 00:00:00.000 | + 1 | 2020-01-01 00:00:01.000 | + 3 | 2020-01-01 00:00:03.000 | + 6 | 2020-01-01 00:00:06.000 | + 99 | NULL | + 10 | 2020-01-01 00:00:10.000 | + 99 | NULL | + 99 | NULL | + 15 | 2020-01-01 00:00:15.000 | + 99 | NULL | + 99 | NULL | + 21 | 2020-01-01 00:00:21.000 | + 99 | NULL | + 99 | NULL | + 99 | NULL | + 99 | NULL | + +taos> select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99) order by _irowts_origin; + interp(c1) | +============== + 99 | + 99 | + 99 | + 99 | + 99 | + 99 | + 99 | + 99 | + 99 | + 0 | + 1 | + 3 | + 6 | + 10 | + 15 | + 21 | + +taos> select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99) order by _irowts_origin desc; + interp(c1) | +============== + 21 | + 15 | + 10 | + 6 | + 3 | + 1 | + 0 | + 99 | + 99 | + 99 | + 99 | + 99 | + 99 | + 99 | + 99 | + 99 | + +taos> select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99) order by interp(c1), _irowts_origin desc; + interp(c1) | +============== + 0 | + 1 | + 3 | + 6 | + 10 | + 15 | + 21 | + 99 | + 99 | + 99 | + 99 | + 99 | + 99 | + 99 | + 99 | + 99 | + +taos> select _irowts, interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99) order by interp(c1) desc, _irowts desc; + _irowts | interp(c1) | +======================================== + 2020-01-01 00:00:30.000 | 99 | + 2020-01-01 00:00:28.000 | 99 | + 2020-01-01 00:00:26.000 | 99 | + 2020-01-01 00:00:24.000 | 99 | + 2020-01-01 00:00:20.000 | 99 | + 2020-01-01 00:00:18.000 | 99 | + 2020-01-01 00:00:14.000 | 99 | + 2020-01-01 00:00:12.000 | 99 | + 2020-01-01 00:00:08.000 | 99 | + 2020-01-01 00:00:22.000 | 21 | + 2020-01-01 00:00:16.000 | 15 | + 2020-01-01 00:00:10.000 | 10 | + 2020-01-01 00:00:06.000 | 6 | + 2020-01-01 00:00:04.000 | 3 | + 2020-01-01 00:00:02.000 | 1 | + 2020-01-01 00:00:00.000 | 0 | + +taos> select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99) order by _irowts, _irowts_origin desc; + interp(c1) | +============== + 0 | + 1 | + 3 | + 6 | + 99 | + 10 | + 99 | + 99 | + 15 | + 99 | + 99 | + 21 | + 99 | + 99 | + 99 | + 99 | + +taos> select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99) order by _irowts desc, _irowts_origin; + interp(c1) | +============== + 99 | + 99 | + 99 | + 99 | + 21 | + 99 | + 99 | + 15 | + 99 | + 99 | + 10 | + 99 | + 6 | + 3 | + 1 | + 0 | + +taos> select _irowts_origin, interp(c1), _irowts from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99); + _irowts_origin | interp(c1) | _irowts | +================================================================== + 2020-01-01 00:00:00.000 | 0 | 2020-01-01 00:00:00.000 | + 2020-01-01 00:00:01.000 | 1 | 2020-01-01 00:00:02.000 | + 2020-01-01 00:00:03.000 | 3 | 2020-01-01 00:00:04.000 | + 2020-01-01 00:00:06.000 | 6 | 2020-01-01 00:00:06.000 | + NULL | 99 | 2020-01-01 00:00:08.000 | + 2020-01-01 00:00:10.000 | 10 | 2020-01-01 00:00:10.000 | + NULL | 99 | 2020-01-01 00:00:12.000 | + NULL | 99 | 2020-01-01 00:00:14.000 | + 2020-01-01 00:00:15.000 | 15 | 2020-01-01 00:00:16.000 | + NULL | 99 | 2020-01-01 00:00:18.000 | + NULL | 99 | 2020-01-01 00:00:20.000 | + 2020-01-01 00:00:21.000 | 21 | 2020-01-01 00:00:22.000 | + NULL | 99 | 2020-01-01 00:00:24.000 | + NULL | 99 | 2020-01-01 00:00:26.000 | + NULL | 99 | 2020-01-01 00:00:28.000 | + NULL | 99 | 2020-01-01 00:00:30.000 | + +taos> select _irowts_origin, interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99) order by _irowts; + _irowts_origin | interp(c1) | +======================================== + 2020-01-01 00:00:00.000 | 0 | + 2020-01-01 00:00:01.000 | 1 | + 2020-01-01 00:00:03.000 | 3 | + 2020-01-01 00:00:06.000 | 6 | + NULL | 99 | + 2020-01-01 00:00:10.000 | 10 | + NULL | 99 | + NULL | 99 | + 2020-01-01 00:00:15.000 | 15 | + NULL | 99 | + NULL | 99 | + 2020-01-01 00:00:21.000 | 21 | + NULL | 99 | + NULL | 99 | + NULL | 99 | + NULL | 99 | + +taos> select _irowts_origin, interp(c1), _irowts from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99) order by _irowts_origin desc, _irowts; + _irowts_origin | interp(c1) | _irowts | +================================================================== + 2020-01-01 00:00:21.000 | 21 | 2020-01-01 00:00:22.000 | + 2020-01-01 00:00:15.000 | 15 | 2020-01-01 00:00:16.000 | + 2020-01-01 00:00:10.000 | 10 | 2020-01-01 00:00:10.000 | + 2020-01-01 00:00:06.000 | 6 | 2020-01-01 00:00:06.000 | + 2020-01-01 00:00:03.000 | 3 | 2020-01-01 00:00:04.000 | + 2020-01-01 00:00:01.000 | 1 | 2020-01-01 00:00:02.000 | + 2020-01-01 00:00:00.000 | 0 | 2020-01-01 00:00:00.000 | + NULL | 99 | 2020-01-01 00:00:08.000 | + NULL | 99 | 2020-01-01 00:00:12.000 | + NULL | 99 | 2020-01-01 00:00:14.000 | + NULL | 99 | 2020-01-01 00:00:18.000 | + NULL | 99 | 2020-01-01 00:00:20.000 | + NULL | 99 | 2020-01-01 00:00:24.000 | + NULL | 99 | 2020-01-01 00:00:26.000 | + NULL | 99 | 2020-01-01 00:00:28.000 | + NULL | 99 | 2020-01-01 00:00:30.000 | + +taos> select _isfilled, _irowts_origin, _irowts, interp(c1), tbname from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(prev, 99) order by _irowts_origin desc, _irowts desc; + _isfilled | _irowts_origin | _irowts | interp(c1) | tbname | +=============================================================================================================== + true | 2020-01-01 00:00:21.000 | 2020-01-01 00:00:22.000 | 21 | td32861 | + true | 2020-01-01 00:00:15.000 | 2020-01-01 00:00:16.000 | 15 | td32861 | + false | 2020-01-01 00:00:10.000 | 2020-01-01 00:00:10.000 | 10 | td32861 | + false | 2020-01-01 00:00:06.000 | 2020-01-01 00:00:06.000 | 6 | td32861 | + true | 2020-01-01 00:00:03.000 | 2020-01-01 00:00:04.000 | 3 | td32861 | + true | 2020-01-01 00:00:01.000 | 2020-01-01 00:00:02.000 | 1 | td32861 | + false | 2020-01-01 00:00:00.000 | 2020-01-01 00:00:00.000 | 0 | td32861 | + true | NULL | 2020-01-01 00:00:30.000 | 99 | td32861 | + true | NULL | 2020-01-01 00:00:28.000 | 99 | td32861 | + true | NULL | 2020-01-01 00:00:26.000 | 99 | td32861 | + true | NULL | 2020-01-01 00:00:24.000 | 99 | td32861 | + true | NULL | 2020-01-01 00:00:20.000 | 99 | td32861 | + true | NULL | 2020-01-01 00:00:18.000 | 99 | td32861 | + true | NULL | 2020-01-01 00:00:14.000 | 99 | td32861 | + true | NULL | 2020-01-01 00:00:12.000 | 99 | td32861 | + true | NULL | 2020-01-01 00:00:08.000 | 99 | td32861 | + +taos> select interp(c1), interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, 98); + interp(c1) | interp(c4) | +========================================= + 5 | 5.000000000000000 | + 99 | 98.000000000000000 | + 10 | 10.000000000000000 | + 99 | 98.000000000000000 | + 99 | 98.000000000000000 | + 15 | 15.000000000000000 | + 99 | 98.000000000000000 | + 99 | 98.000000000000000 | + 99 | 98.000000000000000 | + 99 | 98.000000000000000 | + 99 | 98.000000000000000 | + 99 | 98.000000000000000 | + 99 | 98.000000000000000 | + +taos> select interp(c1), _isfilled, interp(c6) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, false); + interp(c1) | _isfilled | interp(c6) | +====================================== + 5 | true | true | + 99 | true | false | + 10 | false | true | + 99 | true | false | + 99 | true | false | + 15 | true | true | + 99 | true | false | + 99 | true | false | + 99 | true | false | + 99 | true | false | + 99 | true | false | + 99 | true | false | + 99 | true | false | + +taos> select _isfilled, _irowts, interp(c1), interp(c5) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, 98); + _isfilled | _irowts | interp(c1) | interp(c5) | +========================================================================== + true | 2020-02-01 00:00:06.000 | 5 | 5.0000000 | + true | 2020-02-01 00:00:08.000 | 99 | 98.0000000 | + false | 2020-02-01 00:00:10.000 | 10 | 10.0000000 | + true | 2020-02-01 00:00:12.000 | 99 | 98.0000000 | + true | 2020-02-01 00:00:14.000 | 99 | 98.0000000 | + true | 2020-02-01 00:00:16.000 | 15 | 15.0000000 | + true | 2020-02-01 00:00:18.000 | 99 | 98.0000000 | + true | 2020-02-01 00:00:20.000 | 99 | 98.0000000 | + true | 2020-02-01 00:00:22.000 | 99 | 98.0000000 | + true | 2020-02-01 00:00:24.000 | 99 | 98.0000000 | + true | 2020-02-01 00:00:26.000 | 99 | 98.0000000 | + true | 2020-02-01 00:00:28.000 | 99 | 98.0000000 | + true | 2020-02-01 00:00:30.000 | 99 | 98.0000000 | + +taos> select interp(c1), interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, NULL) order by _irowts; + interp(c1) | interp(c4) | +========================================= + 5 | 5.000000000000000 | + 99 | NULL | + 10 | 10.000000000000000 | + 99 | NULL | + 99 | NULL | + 15 | 15.000000000000000 | + 99 | NULL | + 99 | NULL | + 99 | NULL | + 99 | NULL | + 99 | NULL | + 99 | NULL | + 99 | NULL | + +taos> select interp(c1), interp(c6) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, 0) order by _irowts desc; + interp(c1) | interp(c6) | +========================== + 99 | false | + 99 | false | + 99 | false | + 99 | false | + 99 | false | + 99 | false | + 99 | false | + 15 | true | + 99 | false | + 99 | false | + 10 | true | + 99 | false | + 5 | true | + +taos> select interp(c1), _irowts_origin, interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, 'a'); + interp(c1) | _irowts_origin | interp(c4) | +=================================================================== + 5 | 2020-02-01 00:00:05.000 | 5.000000000000000 | + 99 | NULL | 0.000000000000000 | + 10 | 2020-02-01 00:00:10.000 | 10.000000000000000 | + 99 | NULL | 0.000000000000000 | + 99 | NULL | 0.000000000000000 | + 15 | 2020-02-01 00:00:15.000 | 15.000000000000000 | + 99 | NULL | 0.000000000000000 | + 99 | NULL | 0.000000000000000 | + 99 | NULL | 0.000000000000000 | + 99 | NULL | 0.000000000000000 | + 99 | NULL | 0.000000000000000 | + 99 | NULL | 0.000000000000000 | + 99 | NULL | 0.000000000000000 | + +taos> select interp(c1), interp(c4), interp(c5) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, 9.9, 9) order by _irowts_origin; + interp(c1) | interp(c4) | interp(c5) | +================================================================ + 99 | 9.900000000000000 | 9.0000000 | + 99 | 9.900000000000000 | 9.0000000 | + 99 | 9.900000000000000 | 9.0000000 | + 99 | 9.900000000000000 | 9.0000000 | + 99 | 9.900000000000000 | 9.0000000 | + 99 | 9.900000000000000 | 9.0000000 | + 99 | 9.900000000000000 | 9.0000000 | + 99 | 9.900000000000000 | 9.0000000 | + 99 | 9.900000000000000 | 9.0000000 | + 99 | 9.900000000000000 | 9.0000000 | + 5 | 5.000000000000000 | 5.0000000 | + 10 | 10.000000000000000 | 10.0000000 | + 15 | 15.000000000000000 | 15.0000000 | + +taos> select interp(c1), interp(c2) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, 9) order by _irowts_origin desc; + interp(c1) | interp(c2) | +=========================== + 15 | 15 | + 10 | 10 | + 5 | 5 | + 99 | 9 | + 99 | 9 | + 99 | 9 | + 99 | 9 | + 99 | 9 | + 99 | 9 | + 99 | 9 | + 99 | 9 | + 99 | 9 | + 99 | 9 | + +taos> select interp(c6), interp(c1) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 3, 99) order by _irowts, _irowts_origin desc; + interp(c6) | interp(c1) | +========================== + true | 5 | + true | 99 | + true | 10 | + true | 99 | + true | 99 | + true | 15 | + true | 99 | + true | 99 | + true | 99 | + true | 99 | + true | 99 | + true | 99 | + true | 99 | + +taos> select interp(c1), interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 100, 99) order by _irowts desc, _irowts_origin; + interp(c1) | interp(c4) | +========================================= + 100 | 99.000000000000000 | + 100 | 99.000000000000000 | + 100 | 99.000000000000000 | + 100 | 99.000000000000000 | + 100 | 99.000000000000000 | + 100 | 99.000000000000000 | + 100 | 99.000000000000000 | + 15 | 15.000000000000000 | + 100 | 99.000000000000000 | + 100 | 99.000000000000000 | + 10 | 10.000000000000000 | + 100 | 99.000000000000000 | + 5 | 5.000000000000000 | + +taos> select _irowts_origin, interp(c1), _irowts, interp(c6) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, 0); + _irowts_origin | interp(c1) | _irowts | interp(c6) | +============================================================================== + 2020-02-01 00:00:05.000 | 5 | 2020-02-01 00:00:06.000 | true | + NULL | 99 | 2020-02-01 00:00:08.000 | false | + 2020-02-01 00:00:10.000 | 10 | 2020-02-01 00:00:10.000 | true | + NULL | 99 | 2020-02-01 00:00:12.000 | false | + NULL | 99 | 2020-02-01 00:00:14.000 | false | + 2020-02-01 00:00:15.000 | 15 | 2020-02-01 00:00:16.000 | true | + NULL | 99 | 2020-02-01 00:00:18.000 | false | + NULL | 99 | 2020-02-01 00:00:20.000 | false | + NULL | 99 | 2020-02-01 00:00:22.000 | false | + NULL | 99 | 2020-02-01 00:00:24.000 | false | + NULL | 99 | 2020-02-01 00:00:26.000 | false | + NULL | 99 | 2020-02-01 00:00:28.000 | false | + NULL | 99 | 2020-02-01 00:00:30.000 | false | + +taos> select _irowts_origin, interp(c6), interp(c1) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, 99) order by _irowts; + _irowts_origin | interp(c6) | interp(c1) | +==================================================== + 2020-02-01 00:00:05.000 | true | 5 | + NULL | true | 99 | + 2020-02-01 00:00:10.000 | true | 10 | + NULL | true | 99 | + NULL | true | 99 | + 2020-02-01 00:00:15.000 | true | 15 | + NULL | true | 99 | + NULL | true | 99 | + NULL | true | 99 | + NULL | true | 99 | + NULL | true | 99 | + NULL | true | 99 | + NULL | true | 99 | + +taos> select _irowts_origin, interp(c4), interp(c1), _irowts from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, 9) order by _irowts_origin desc, _irowts; + _irowts_origin | interp(c4) | interp(c1) | _irowts | +============================================================================================= + 2020-02-01 00:00:15.000 | 15.000000000000000 | 15 | 2020-02-01 00:00:16.000 | + 2020-02-01 00:00:10.000 | 10.000000000000000 | 10 | 2020-02-01 00:00:10.000 | + 2020-02-01 00:00:05.000 | 5.000000000000000 | 5 | 2020-02-01 00:00:06.000 | + NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:08.000 | + NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:12.000 | + NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:14.000 | + NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:18.000 | + NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:20.000 | + NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:22.000 | + NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:24.000 | + NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:26.000 | + NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:28.000 | + NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:30.000 | + +taos> select _isfilled, interp(c4), _irowts_origin, _irowts, interp(c1), tbname from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, 1) order by _irowts_origin desc, _irowts desc; + _isfilled | interp(c4) | _irowts_origin | _irowts | interp(c1) | tbname | +========================================================================================================================================== + true | 15.000000000000000 | 2020-02-01 00:00:15.000 | 2020-02-01 00:00:16.000 | 15 | td32727 | + false | 10.000000000000000 | 2020-02-01 00:00:10.000 | 2020-02-01 00:00:10.000 | 10 | td32727 | + true | 5.000000000000000 | 2020-02-01 00:00:05.000 | 2020-02-01 00:00:06.000 | 5 | td32727 | + true | 99.000000000000000 | NULL | 2020-02-01 00:00:30.000 | 1 | td32727 | + true | 99.000000000000000 | NULL | 2020-02-01 00:00:28.000 | 1 | td32727 | + true | 99.000000000000000 | NULL | 2020-02-01 00:00:26.000 | 1 | td32727 | + true | 99.000000000000000 | NULL | 2020-02-01 00:00:24.000 | 1 | td32727 | + true | 99.000000000000000 | NULL | 2020-02-01 00:00:22.000 | 1 | td32727 | + true | 99.000000000000000 | NULL | 2020-02-01 00:00:20.000 | 1 | td32727 | + true | 99.000000000000000 | NULL | 2020-02-01 00:00:18.000 | 1 | td32727 | + true | 99.000000000000000 | NULL | 2020-02-01 00:00:14.000 | 1 | td32727 | + true | 99.000000000000000 | NULL | 2020-02-01 00:00:12.000 | 1 | td32727 | + true | 99.000000000000000 | NULL | 2020-02-01 00:00:08.000 | 1 | td32727 | + +taos> select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99); + interp(c1) | +============== + 0 | + 3 | + 99 | + 6 | + 99 | + 10 | + 99 | + 15 | + 99 | + 99 | + 21 | + +taos> select interp(c1), _isfilled from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99); + interp(c1) | _isfilled | +========================== + 0 | false | + 3 | true | + 99 | true | + 6 | false | + 99 | true | + 10 | false | + 99 | true | + 15 | true | + 99 | true | + 99 | true | + 21 | true | + +taos> select _isfilled, _irowts, interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99); + _isfilled | _irowts | interp(c1) | +==================================================== + false | 2020-01-01 00:00:00.000 | 0 | + true | 2020-01-01 00:00:02.000 | 3 | + true | 2020-01-01 00:00:04.000 | 99 | + false | 2020-01-01 00:00:06.000 | 6 | + true | 2020-01-01 00:00:08.000 | 99 | + false | 2020-01-01 00:00:10.000 | 10 | + true | 2020-01-01 00:00:12.000 | 99 | + true | 2020-01-01 00:00:14.000 | 15 | + true | 2020-01-01 00:00:16.000 | 99 | + true | 2020-01-01 00:00:18.000 | 99 | + true | 2020-01-01 00:00:20.000 | 21 | + +taos> select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99) order by _irowts; + interp(c1) | +============== + 0 | + 3 | + 99 | + 6 | + 99 | + 10 | + 99 | + 15 | + 99 | + 99 | + 21 | + +taos> select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99) order by interp(c1) desc; + interp(c1) | +============== + 99 | + 99 | + 99 | + 99 | + 99 | + 21 | + 15 | + 10 | + 6 | + 3 | + 0 | + +taos> select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99) order by _irowts desc; + interp(c1) | +============== + 21 | + 99 | + 99 | + 15 | + 99 | + 10 | + 99 | + 6 | + 99 | + 3 | + 0 | + +taos> select interp(c1), _irowts_origin from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99); + interp(c1) | _irowts_origin | +======================================== + 0 | 2020-01-01 00:00:00.000 | + 3 | 2020-01-01 00:00:03.000 | + 99 | NULL | + 6 | 2020-01-01 00:00:06.000 | + 99 | NULL | + 10 | 2020-01-01 00:00:10.000 | + 99 | NULL | + 15 | 2020-01-01 00:00:15.000 | + 99 | NULL | + 99 | NULL | + 21 | 2020-01-01 00:00:21.000 | + +taos> select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99) order by _irowts_origin; + interp(c1) | +============== + 99 | + 99 | + 99 | + 99 | + 99 | + 0 | + 3 | + 6 | + 10 | + 15 | + 21 | + +taos> select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99) order by _irowts_origin desc; + interp(c1) | +============== + 21 | + 15 | + 10 | + 6 | + 3 | + 0 | + 99 | + 99 | + 99 | + 99 | + 99 | + +taos> select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99) order by interp(c1), _irowts_origin desc; + interp(c1) | +============== + 0 | + 3 | + 6 | + 10 | + 15 | + 21 | + 99 | + 99 | + 99 | + 99 | + 99 | + +taos> select _irowts, interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99) order by interp(c1) desc, _irowts desc; + _irowts | interp(c1) | +======================================== + 2020-01-01 00:00:18.000 | 99 | + 2020-01-01 00:00:16.000 | 99 | + 2020-01-01 00:00:12.000 | 99 | + 2020-01-01 00:00:08.000 | 99 | + 2020-01-01 00:00:04.000 | 99 | + 2020-01-01 00:00:20.000 | 21 | + 2020-01-01 00:00:14.000 | 15 | + 2020-01-01 00:00:10.000 | 10 | + 2020-01-01 00:00:06.000 | 6 | + 2020-01-01 00:00:02.000 | 3 | + 2020-01-01 00:00:00.000 | 0 | + +taos> select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99) order by _irowts, _irowts_origin desc; + interp(c1) | +============== + 0 | + 3 | + 99 | + 6 | + 99 | + 10 | + 99 | + 15 | + 99 | + 99 | + 21 | + +taos> select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99) order by _irowts desc, _irowts_origin; + interp(c1) | +============== + 21 | + 99 | + 99 | + 15 | + 99 | + 10 | + 99 | + 6 | + 99 | + 3 | + 0 | + +taos> select _irowts_origin, interp(c1), _irowts from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99); + _irowts_origin | interp(c1) | _irowts | +================================================================== + 2020-01-01 00:00:00.000 | 0 | 2020-01-01 00:00:00.000 | + 2020-01-01 00:00:03.000 | 3 | 2020-01-01 00:00:02.000 | + NULL | 99 | 2020-01-01 00:00:04.000 | + 2020-01-01 00:00:06.000 | 6 | 2020-01-01 00:00:06.000 | + NULL | 99 | 2020-01-01 00:00:08.000 | + 2020-01-01 00:00:10.000 | 10 | 2020-01-01 00:00:10.000 | + NULL | 99 | 2020-01-01 00:00:12.000 | + 2020-01-01 00:00:15.000 | 15 | 2020-01-01 00:00:14.000 | + NULL | 99 | 2020-01-01 00:00:16.000 | + NULL | 99 | 2020-01-01 00:00:18.000 | + 2020-01-01 00:00:21.000 | 21 | 2020-01-01 00:00:20.000 | + +taos> select _irowts_origin, interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99) order by _irowts; + _irowts_origin | interp(c1) | +======================================== + 2020-01-01 00:00:00.000 | 0 | + 2020-01-01 00:00:03.000 | 3 | + NULL | 99 | + 2020-01-01 00:00:06.000 | 6 | + NULL | 99 | + 2020-01-01 00:00:10.000 | 10 | + NULL | 99 | + 2020-01-01 00:00:15.000 | 15 | + NULL | 99 | + NULL | 99 | + 2020-01-01 00:00:21.000 | 21 | + +taos> select _irowts_origin, interp(c1), _irowts from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99) order by _irowts_origin desc, _irowts; + _irowts_origin | interp(c1) | _irowts | +================================================================== + 2020-01-01 00:00:21.000 | 21 | 2020-01-01 00:00:20.000 | + 2020-01-01 00:00:15.000 | 15 | 2020-01-01 00:00:14.000 | + 2020-01-01 00:00:10.000 | 10 | 2020-01-01 00:00:10.000 | + 2020-01-01 00:00:06.000 | 6 | 2020-01-01 00:00:06.000 | + 2020-01-01 00:00:03.000 | 3 | 2020-01-01 00:00:02.000 | + 2020-01-01 00:00:00.000 | 0 | 2020-01-01 00:00:00.000 | + NULL | 99 | 2020-01-01 00:00:04.000 | + NULL | 99 | 2020-01-01 00:00:08.000 | + NULL | 99 | 2020-01-01 00:00:12.000 | + NULL | 99 | 2020-01-01 00:00:16.000 | + NULL | 99 | 2020-01-01 00:00:18.000 | + +taos> select _isfilled, _irowts_origin, _irowts, interp(c1), tbname from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99) order by _irowts_origin desc, _irowts desc; + _isfilled | _irowts_origin | _irowts | interp(c1) | tbname | +=============================================================================================================== + true | 2020-01-01 00:00:21.000 | 2020-01-01 00:00:20.000 | 21 | td32861 | + true | 2020-01-01 00:00:15.000 | 2020-01-01 00:00:14.000 | 15 | td32861 | + false | 2020-01-01 00:00:10.000 | 2020-01-01 00:00:10.000 | 10 | td32861 | + false | 2020-01-01 00:00:06.000 | 2020-01-01 00:00:06.000 | 6 | td32861 | + true | 2020-01-01 00:00:03.000 | 2020-01-01 00:00:02.000 | 3 | td32861 | + false | 2020-01-01 00:00:00.000 | 2020-01-01 00:00:00.000 | 0 | td32861 | + true | NULL | 2020-01-01 00:00:18.000 | 99 | td32861 | + true | NULL | 2020-01-01 00:00:16.000 | 99 | td32861 | + true | NULL | 2020-01-01 00:00:12.000 | 99 | td32861 | + true | NULL | 2020-01-01 00:00:08.000 | 99 | td32861 | + true | NULL | 2020-01-01 00:00:04.000 | 99 | td32861 | + +taos> select interp(c1), interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, 98); + interp(c1) | interp(c4) | +========================================= + 99 | 98.000000000000000 | + 99 | 98.000000000000000 | + 5 | 5.000000000000000 | + 99 | 98.000000000000000 | + 99 | 98.000000000000000 | + 10 | 10.000000000000000 | + 99 | 98.000000000000000 | + 15 | 15.000000000000000 | + +taos> select interp(c1), _isfilled, interp(c6) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, false); + interp(c1) | _isfilled | interp(c6) | +====================================== + 99 | true | false | + 99 | true | false | + 5 | true | true | + 99 | true | false | + 99 | true | false | + 10 | false | true | + 99 | true | false | + 15 | true | true | + +taos> select _isfilled, _irowts, interp(c1), interp(c5) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, 98); + _isfilled | _irowts | interp(c1) | interp(c5) | +========================================================================== + true | 2020-02-01 00:00:00.000 | 99 | 98.0000000 | + true | 2020-02-01 00:00:02.000 | 99 | 98.0000000 | + true | 2020-02-01 00:00:04.000 | 5 | 5.0000000 | + true | 2020-02-01 00:00:06.000 | 99 | 98.0000000 | + true | 2020-02-01 00:00:08.000 | 99 | 98.0000000 | + false | 2020-02-01 00:00:10.000 | 10 | 10.0000000 | + true | 2020-02-01 00:00:12.000 | 99 | 98.0000000 | + true | 2020-02-01 00:00:14.000 | 15 | 15.0000000 | + +taos> select interp(c1), interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, NULL) order by _irowts; + interp(c1) | interp(c4) | +========================================= + 99 | NULL | + 99 | NULL | + 5 | 5.000000000000000 | + 99 | NULL | + 99 | NULL | + 10 | 10.000000000000000 | + 99 | NULL | + 15 | 15.000000000000000 | + +taos> select interp(c1), interp(c6) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, 0) order by _irowts desc; + interp(c1) | interp(c6) | +========================== + 15 | true | + 99 | false | + 10 | true | + 99 | false | + 99 | false | + 5 | true | + 99 | false | + 99 | false | + +taos> select interp(c1), _irowts_origin, interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, 'a'); + interp(c1) | _irowts_origin | interp(c4) | +=================================================================== + 99 | NULL | 0.000000000000000 | + 99 | NULL | 0.000000000000000 | + 5 | 2020-02-01 00:00:05.000 | 5.000000000000000 | + 99 | NULL | 0.000000000000000 | + 99 | NULL | 0.000000000000000 | + 10 | 2020-02-01 00:00:10.000 | 10.000000000000000 | + 99 | NULL | 0.000000000000000 | + 15 | 2020-02-01 00:00:15.000 | 15.000000000000000 | + +taos> select interp(c1), interp(c4), interp(c5) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, 9.9, 9) order by _irowts_origin; + interp(c1) | interp(c4) | interp(c5) | +================================================================ + 99 | 9.900000000000000 | 9.0000000 | + 99 | 9.900000000000000 | 9.0000000 | + 99 | 9.900000000000000 | 9.0000000 | + 99 | 9.900000000000000 | 9.0000000 | + 99 | 9.900000000000000 | 9.0000000 | + 5 | 5.000000000000000 | 5.0000000 | + 10 | 10.000000000000000 | 10.0000000 | + 15 | 15.000000000000000 | 15.0000000 | + +taos> select interp(c1), interp(c2) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, 9) order by _irowts_origin desc; + interp(c1) | interp(c2) | +=========================== + 15 | 15 | + 10 | 10 | + 5 | 5 | + 99 | 9 | + 99 | 9 | + 99 | 9 | + 99 | 9 | + 99 | 9 | + +taos> select interp(c6), interp(c1) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 3, 99) order by _irowts, _irowts_origin desc; + interp(c6) | interp(c1) | +========================== + true | 99 | + true | 99 | + true | 5 | + true | 99 | + true | 99 | + true | 10 | + true | 99 | + true | 15 | + +taos> select interp(c1), interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 100, 99) order by _irowts desc, _irowts_origin; + interp(c1) | interp(c4) | +========================================= + 15 | 15.000000000000000 | + 100 | 99.000000000000000 | + 10 | 10.000000000000000 | + 100 | 99.000000000000000 | + 100 | 99.000000000000000 | + 5 | 5.000000000000000 | + 100 | 99.000000000000000 | + 100 | 99.000000000000000 | + +taos> select _irowts_origin, interp(c1), _irowts, interp(c6) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, 0); + _irowts_origin | interp(c1) | _irowts | interp(c6) | +============================================================================== + NULL | 99 | 2020-02-01 00:00:00.000 | false | + NULL | 99 | 2020-02-01 00:00:02.000 | false | + 2020-02-01 00:00:05.000 | 5 | 2020-02-01 00:00:04.000 | true | + NULL | 99 | 2020-02-01 00:00:06.000 | false | + NULL | 99 | 2020-02-01 00:00:08.000 | false | + 2020-02-01 00:00:10.000 | 10 | 2020-02-01 00:00:10.000 | true | + NULL | 99 | 2020-02-01 00:00:12.000 | false | + 2020-02-01 00:00:15.000 | 15 | 2020-02-01 00:00:14.000 | true | + +taos> select _irowts_origin, interp(c6), interp(c1) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, 99) order by _irowts; + _irowts_origin | interp(c6) | interp(c1) | +==================================================== + NULL | true | 99 | + NULL | true | 99 | + 2020-02-01 00:00:05.000 | true | 5 | + NULL | true | 99 | + NULL | true | 99 | + 2020-02-01 00:00:10.000 | true | 10 | + NULL | true | 99 | + 2020-02-01 00:00:15.000 | true | 15 | + +taos> select _irowts_origin, interp(c4), interp(c1), _irowts from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, 9) order by _irowts_origin desc, _irowts; + _irowts_origin | interp(c4) | interp(c1) | _irowts | +============================================================================================= + 2020-02-01 00:00:15.000 | 15.000000000000000 | 15 | 2020-02-01 00:00:14.000 | + 2020-02-01 00:00:10.000 | 10.000000000000000 | 10 | 2020-02-01 00:00:10.000 | + 2020-02-01 00:00:05.000 | 5.000000000000000 | 5 | 2020-02-01 00:00:04.000 | + NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:00.000 | + NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:02.000 | + NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:06.000 | + NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:08.000 | + NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:12.000 | + +taos> select _isfilled, interp(c4), _irowts_origin, _irowts, interp(c1), tbname from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, 1) order by _irowts_origin desc, _irowts desc; + _isfilled | interp(c4) | _irowts_origin | _irowts | interp(c1) | tbname | +========================================================================================================================================== + true | 15.000000000000000 | 2020-02-01 00:00:15.000 | 2020-02-01 00:00:14.000 | 15 | td32727 | + false | 10.000000000000000 | 2020-02-01 00:00:10.000 | 2020-02-01 00:00:10.000 | 10 | td32727 | + true | 5.000000000000000 | 2020-02-01 00:00:05.000 | 2020-02-01 00:00:04.000 | 5 | td32727 | + true | 99.000000000000000 | NULL | 2020-02-01 00:00:12.000 | 1 | td32727 | + true | 99.000000000000000 | NULL | 2020-02-01 00:00:08.000 | 1 | td32727 | + true | 99.000000000000000 | NULL | 2020-02-01 00:00:06.000 | 1 | td32727 | + true | 99.000000000000000 | NULL | 2020-02-01 00:00:02.000 | 1 | td32727 | + true | 99.000000000000000 | NULL | 2020-02-01 00:00:00.000 | 1 | td32727 | + +taos> select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99); + interp(c1) | +============== + 0 | + 1 | + 3 | + 6 | + 99 | + 10 | + 99 | + 15 | + 15 | + 99 | + 21 | + 21 | + 99 | + 99 | + 99 | + 99 | + +taos> select interp(c1), _isfilled from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99); + interp(c1) | _isfilled | +========================== + 0 | false | + 1 | true | + 3 | true | + 6 | false | + 99 | true | + 10 | false | + 99 | true | + 15 | true | + 15 | true | + 99 | true | + 21 | true | + 21 | true | + 99 | true | + 99 | true | + 99 | true | + 99 | true | + +taos> select _isfilled, _irowts, interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99); + _isfilled | _irowts | interp(c1) | +==================================================== + false | 2020-01-01 00:00:00.000 | 0 | + true | 2020-01-01 00:00:02.000 | 1 | + true | 2020-01-01 00:00:04.000 | 3 | + false | 2020-01-01 00:00:06.000 | 6 | + true | 2020-01-01 00:00:08.000 | 99 | + false | 2020-01-01 00:00:10.000 | 10 | + true | 2020-01-01 00:00:12.000 | 99 | + true | 2020-01-01 00:00:14.000 | 15 | + true | 2020-01-01 00:00:16.000 | 15 | + true | 2020-01-01 00:00:18.000 | 99 | + true | 2020-01-01 00:00:20.000 | 21 | + true | 2020-01-01 00:00:22.000 | 21 | + true | 2020-01-01 00:00:24.000 | 99 | + true | 2020-01-01 00:00:26.000 | 99 | + true | 2020-01-01 00:00:28.000 | 99 | + true | 2020-01-01 00:00:30.000 | 99 | + +taos> select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99) order by _irowts; + interp(c1) | +============== + 0 | + 1 | + 3 | + 6 | + 99 | + 10 | + 99 | + 15 | + 15 | + 99 | + 21 | + 21 | + 99 | + 99 | + 99 | + 99 | + +taos> select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99) order by interp(c1) desc; + interp(c1) | +============== + 99 | + 99 | + 99 | + 99 | + 99 | + 99 | + 99 | + 21 | + 21 | + 15 | + 15 | + 10 | + 6 | + 3 | + 1 | + 0 | + +taos> select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99) order by _irowts desc; + interp(c1) | +============== + 99 | + 99 | + 99 | + 99 | + 21 | + 21 | + 99 | + 15 | + 15 | + 99 | + 10 | + 99 | + 6 | + 3 | + 1 | + 0 | + +taos> select interp(c1), _irowts_origin from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99); + interp(c1) | _irowts_origin | +======================================== + 0 | 2020-01-01 00:00:00.000 | + 1 | 2020-01-01 00:00:01.000 | + 3 | 2020-01-01 00:00:03.000 | + 6 | 2020-01-01 00:00:06.000 | + 99 | NULL | + 10 | 2020-01-01 00:00:10.000 | + 99 | NULL | + 15 | 2020-01-01 00:00:15.000 | + 15 | 2020-01-01 00:00:15.000 | + 99 | NULL | + 21 | 2020-01-01 00:00:21.000 | + 21 | 2020-01-01 00:00:21.000 | + 99 | NULL | + 99 | NULL | + 99 | NULL | + 99 | NULL | + +taos> select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99) order by _irowts_origin; + interp(c1) | +============== + 99 | + 99 | + 99 | + 99 | + 99 | + 99 | + 99 | + 0 | + 1 | + 3 | + 6 | + 10 | + 15 | + 15 | + 21 | + 21 | + +taos> select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99) order by _irowts_origin desc; + interp(c1) | +============== + 21 | + 21 | + 15 | + 15 | + 10 | + 6 | + 3 | + 1 | + 0 | + 99 | + 99 | + 99 | + 99 | + 99 | + 99 | + 99 | + +taos> select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99) order by interp(c1), _irowts_origin desc; + interp(c1) | +============== + 0 | + 1 | + 3 | + 6 | + 10 | + 15 | + 15 | + 21 | + 21 | + 99 | + 99 | + 99 | + 99 | + 99 | + 99 | + 99 | + +taos> select _irowts, interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99) order by interp(c1) desc, _irowts desc; + _irowts | interp(c1) | +======================================== + 2020-01-01 00:00:30.000 | 99 | + 2020-01-01 00:00:28.000 | 99 | + 2020-01-01 00:00:26.000 | 99 | + 2020-01-01 00:00:24.000 | 99 | + 2020-01-01 00:00:18.000 | 99 | + 2020-01-01 00:00:12.000 | 99 | + 2020-01-01 00:00:08.000 | 99 | + 2020-01-01 00:00:22.000 | 21 | + 2020-01-01 00:00:20.000 | 21 | + 2020-01-01 00:00:16.000 | 15 | + 2020-01-01 00:00:14.000 | 15 | + 2020-01-01 00:00:10.000 | 10 | + 2020-01-01 00:00:06.000 | 6 | + 2020-01-01 00:00:04.000 | 3 | + 2020-01-01 00:00:02.000 | 1 | + 2020-01-01 00:00:00.000 | 0 | + +taos> select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99) order by _irowts, _irowts_origin desc; + interp(c1) | +============== + 0 | + 1 | + 3 | + 6 | + 99 | + 10 | + 99 | + 15 | + 15 | + 99 | + 21 | + 21 | + 99 | + 99 | + 99 | + 99 | + +taos> select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99) order by _irowts desc, _irowts_origin; + interp(c1) | +============== + 99 | + 99 | + 99 | + 99 | + 21 | + 21 | + 99 | + 15 | + 15 | + 99 | + 10 | + 99 | + 6 | + 3 | + 1 | + 0 | + +taos> select _irowts_origin, interp(c1), _irowts from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99); + _irowts_origin | interp(c1) | _irowts | +================================================================== + 2020-01-01 00:00:00.000 | 0 | 2020-01-01 00:00:00.000 | + 2020-01-01 00:00:01.000 | 1 | 2020-01-01 00:00:02.000 | + 2020-01-01 00:00:03.000 | 3 | 2020-01-01 00:00:04.000 | + 2020-01-01 00:00:06.000 | 6 | 2020-01-01 00:00:06.000 | + NULL | 99 | 2020-01-01 00:00:08.000 | + 2020-01-01 00:00:10.000 | 10 | 2020-01-01 00:00:10.000 | + NULL | 99 | 2020-01-01 00:00:12.000 | + 2020-01-01 00:00:15.000 | 15 | 2020-01-01 00:00:14.000 | + 2020-01-01 00:00:15.000 | 15 | 2020-01-01 00:00:16.000 | + NULL | 99 | 2020-01-01 00:00:18.000 | + 2020-01-01 00:00:21.000 | 21 | 2020-01-01 00:00:20.000 | + 2020-01-01 00:00:21.000 | 21 | 2020-01-01 00:00:22.000 | + NULL | 99 | 2020-01-01 00:00:24.000 | + NULL | 99 | 2020-01-01 00:00:26.000 | + NULL | 99 | 2020-01-01 00:00:28.000 | + NULL | 99 | 2020-01-01 00:00:30.000 | + +taos> select _irowts_origin, interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99) order by _irowts; + _irowts_origin | interp(c1) | +======================================== + 2020-01-01 00:00:00.000 | 0 | + 2020-01-01 00:00:01.000 | 1 | + 2020-01-01 00:00:03.000 | 3 | + 2020-01-01 00:00:06.000 | 6 | + NULL | 99 | + 2020-01-01 00:00:10.000 | 10 | + NULL | 99 | + 2020-01-01 00:00:15.000 | 15 | + 2020-01-01 00:00:15.000 | 15 | + NULL | 99 | + 2020-01-01 00:00:21.000 | 21 | + 2020-01-01 00:00:21.000 | 21 | + NULL | 99 | + NULL | 99 | + NULL | 99 | + NULL | 99 | + +taos> select _irowts_origin, interp(c1), _irowts from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99) order by _irowts_origin desc, _irowts; + _irowts_origin | interp(c1) | _irowts | +================================================================== + 2020-01-01 00:00:21.000 | 21 | 2020-01-01 00:00:20.000 | + 2020-01-01 00:00:21.000 | 21 | 2020-01-01 00:00:22.000 | + 2020-01-01 00:00:15.000 | 15 | 2020-01-01 00:00:14.000 | + 2020-01-01 00:00:15.000 | 15 | 2020-01-01 00:00:16.000 | + 2020-01-01 00:00:10.000 | 10 | 2020-01-01 00:00:10.000 | + 2020-01-01 00:00:06.000 | 6 | 2020-01-01 00:00:06.000 | + 2020-01-01 00:00:03.000 | 3 | 2020-01-01 00:00:04.000 | + 2020-01-01 00:00:01.000 | 1 | 2020-01-01 00:00:02.000 | + 2020-01-01 00:00:00.000 | 0 | 2020-01-01 00:00:00.000 | + NULL | 99 | 2020-01-01 00:00:08.000 | + NULL | 99 | 2020-01-01 00:00:12.000 | + NULL | 99 | 2020-01-01 00:00:18.000 | + NULL | 99 | 2020-01-01 00:00:24.000 | + NULL | 99 | 2020-01-01 00:00:26.000 | + NULL | 99 | 2020-01-01 00:00:28.000 | + NULL | 99 | 2020-01-01 00:00:30.000 | + +taos> select _isfilled, _irowts_origin, _irowts, interp(c1), tbname from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99) order by _irowts_origin desc, _irowts desc; + _isfilled | _irowts_origin | _irowts | interp(c1) | tbname | +=============================================================================================================== + true | 2020-01-01 00:00:21.000 | 2020-01-01 00:00:22.000 | 21 | td32861 | + true | 2020-01-01 00:00:21.000 | 2020-01-01 00:00:20.000 | 21 | td32861 | + true | 2020-01-01 00:00:15.000 | 2020-01-01 00:00:16.000 | 15 | td32861 | + true | 2020-01-01 00:00:15.000 | 2020-01-01 00:00:14.000 | 15 | td32861 | + false | 2020-01-01 00:00:10.000 | 2020-01-01 00:00:10.000 | 10 | td32861 | + false | 2020-01-01 00:00:06.000 | 2020-01-01 00:00:06.000 | 6 | td32861 | + true | 2020-01-01 00:00:03.000 | 2020-01-01 00:00:04.000 | 3 | td32861 | + true | 2020-01-01 00:00:01.000 | 2020-01-01 00:00:02.000 | 1 | td32861 | + false | 2020-01-01 00:00:00.000 | 2020-01-01 00:00:00.000 | 0 | td32861 | + true | NULL | 2020-01-01 00:00:30.000 | 99 | td32861 | + true | NULL | 2020-01-01 00:00:28.000 | 99 | td32861 | + true | NULL | 2020-01-01 00:00:26.000 | 99 | td32861 | + true | NULL | 2020-01-01 00:00:24.000 | 99 | td32861 | + true | NULL | 2020-01-01 00:00:18.000 | 99 | td32861 | + true | NULL | 2020-01-01 00:00:12.000 | 99 | td32861 | + true | NULL | 2020-01-01 00:00:08.000 | 99 | td32861 | + +taos> select interp(c1), interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, 98); + interp(c1) | interp(c4) | +========================================= + 99 | 98.000000000000000 | + 99 | 98.000000000000000 | + 5 | 5.000000000000000 | + 5 | 5.000000000000000 | + 99 | 98.000000000000000 | + 10 | 10.000000000000000 | + 99 | 98.000000000000000 | + 15 | 15.000000000000000 | + 15 | 15.000000000000000 | + 99 | 98.000000000000000 | + 99 | 98.000000000000000 | + 99 | 98.000000000000000 | + 99 | 98.000000000000000 | + 99 | 98.000000000000000 | + 99 | 98.000000000000000 | + 99 | 98.000000000000000 | + +taos> select interp(c1), _isfilled, interp(c6) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, false); + interp(c1) | _isfilled | interp(c6) | +====================================== + 99 | true | false | + 99 | true | false | + 5 | true | true | + 5 | true | true | + 99 | true | false | + 10 | false | true | + 99 | true | false | + 15 | true | true | + 15 | true | true | + 99 | true | false | + 99 | true | false | + 99 | true | false | + 99 | true | false | + 99 | true | false | + 99 | true | false | + 99 | true | false | + +taos> select _isfilled, _irowts, interp(c1), interp(c5) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, 98); + _isfilled | _irowts | interp(c1) | interp(c5) | +========================================================================== + true | 2020-02-01 00:00:00.000 | 99 | 98.0000000 | + true | 2020-02-01 00:00:02.000 | 99 | 98.0000000 | + true | 2020-02-01 00:00:04.000 | 5 | 5.0000000 | + true | 2020-02-01 00:00:06.000 | 5 | 5.0000000 | + true | 2020-02-01 00:00:08.000 | 99 | 98.0000000 | + false | 2020-02-01 00:00:10.000 | 10 | 10.0000000 | + true | 2020-02-01 00:00:12.000 | 99 | 98.0000000 | + true | 2020-02-01 00:00:14.000 | 15 | 15.0000000 | + true | 2020-02-01 00:00:16.000 | 15 | 15.0000000 | + true | 2020-02-01 00:00:18.000 | 99 | 98.0000000 | + true | 2020-02-01 00:00:20.000 | 99 | 98.0000000 | + true | 2020-02-01 00:00:22.000 | 99 | 98.0000000 | + true | 2020-02-01 00:00:24.000 | 99 | 98.0000000 | + true | 2020-02-01 00:00:26.000 | 99 | 98.0000000 | + true | 2020-02-01 00:00:28.000 | 99 | 98.0000000 | + true | 2020-02-01 00:00:30.000 | 99 | 98.0000000 | + +taos> select interp(c1), interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, NULL) order by _irowts; + interp(c1) | interp(c4) | +========================================= + 99 | NULL | + 99 | NULL | + 5 | 5.000000000000000 | + 5 | 5.000000000000000 | + 99 | NULL | + 10 | 10.000000000000000 | + 99 | NULL | + 15 | 15.000000000000000 | + 15 | 15.000000000000000 | + 99 | NULL | + 99 | NULL | + 99 | NULL | + 99 | NULL | + 99 | NULL | + 99 | NULL | + 99 | NULL | + +taos> select interp(c1), interp(c6) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, 0) order by _irowts desc; + interp(c1) | interp(c6) | +========================== + 99 | false | + 99 | false | + 99 | false | + 99 | false | + 99 | false | + 99 | false | + 99 | false | + 15 | true | + 15 | true | + 99 | false | + 10 | true | + 99 | false | + 5 | true | + 5 | true | + 99 | false | + 99 | false | + +taos> select interp(c1), _irowts_origin, interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, 'a'); + interp(c1) | _irowts_origin | interp(c4) | +=================================================================== + 99 | NULL | 0.000000000000000 | + 99 | NULL | 0.000000000000000 | + 5 | 2020-02-01 00:00:05.000 | 5.000000000000000 | + 5 | 2020-02-01 00:00:05.000 | 5.000000000000000 | + 99 | NULL | 0.000000000000000 | + 10 | 2020-02-01 00:00:10.000 | 10.000000000000000 | + 99 | NULL | 0.000000000000000 | + 15 | 2020-02-01 00:00:15.000 | 15.000000000000000 | + 15 | 2020-02-01 00:00:15.000 | 15.000000000000000 | + 99 | NULL | 0.000000000000000 | + 99 | NULL | 0.000000000000000 | + 99 | NULL | 0.000000000000000 | + 99 | NULL | 0.000000000000000 | + 99 | NULL | 0.000000000000000 | + 99 | NULL | 0.000000000000000 | + 99 | NULL | 0.000000000000000 | + +taos> select interp(c1), interp(c4), interp(c5) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, 9.9, 9) order by _irowts_origin; + interp(c1) | interp(c4) | interp(c5) | +================================================================ + 99 | 9.900000000000000 | 9.0000000 | + 99 | 9.900000000000000 | 9.0000000 | + 99 | 9.900000000000000 | 9.0000000 | + 99 | 9.900000000000000 | 9.0000000 | + 99 | 9.900000000000000 | 9.0000000 | + 99 | 9.900000000000000 | 9.0000000 | + 99 | 9.900000000000000 | 9.0000000 | + 99 | 9.900000000000000 | 9.0000000 | + 99 | 9.900000000000000 | 9.0000000 | + 99 | 9.900000000000000 | 9.0000000 | + 99 | 9.900000000000000 | 9.0000000 | + 5 | 5.000000000000000 | 5.0000000 | + 5 | 5.000000000000000 | 5.0000000 | + 10 | 10.000000000000000 | 10.0000000 | + 15 | 15.000000000000000 | 15.0000000 | + 15 | 15.000000000000000 | 15.0000000 | + +taos> select interp(c1), interp(c2) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, 9) order by _irowts_origin desc; + interp(c1) | interp(c2) | +=========================== + 15 | 15 | + 15 | 15 | + 10 | 10 | + 5 | 5 | + 5 | 5 | + 99 | 9 | + 99 | 9 | + 99 | 9 | + 99 | 9 | + 99 | 9 | + 99 | 9 | + 99 | 9 | + 99 | 9 | + 99 | 9 | + 99 | 9 | + 99 | 9 | + +taos> select interp(c6), interp(c1) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 3, 99) order by _irowts, _irowts_origin desc; + interp(c6) | interp(c1) | +========================== + true | 99 | + true | 99 | + true | 5 | + true | 5 | + true | 99 | + true | 10 | + true | 99 | + true | 15 | + true | 15 | + true | 99 | + true | 99 | + true | 99 | + true | 99 | + true | 99 | + true | 99 | + true | 99 | + +taos> select interp(c1), interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 100, 99) order by _irowts desc, _irowts_origin; + interp(c1) | interp(c4) | +========================================= + 100 | 99.000000000000000 | + 100 | 99.000000000000000 | + 100 | 99.000000000000000 | + 100 | 99.000000000000000 | + 100 | 99.000000000000000 | + 100 | 99.000000000000000 | + 100 | 99.000000000000000 | + 15 | 15.000000000000000 | + 15 | 15.000000000000000 | + 100 | 99.000000000000000 | + 10 | 10.000000000000000 | + 100 | 99.000000000000000 | + 5 | 5.000000000000000 | + 5 | 5.000000000000000 | + 100 | 99.000000000000000 | + 100 | 99.000000000000000 | + +taos> select _irowts_origin, interp(c1), _irowts, interp(c6) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, 0); + _irowts_origin | interp(c1) | _irowts | interp(c6) | +============================================================================== + NULL | 99 | 2020-02-01 00:00:00.000 | false | + NULL | 99 | 2020-02-01 00:00:02.000 | false | + 2020-02-01 00:00:05.000 | 5 | 2020-02-01 00:00:04.000 | true | + 2020-02-01 00:00:05.000 | 5 | 2020-02-01 00:00:06.000 | true | + NULL | 99 | 2020-02-01 00:00:08.000 | false | + 2020-02-01 00:00:10.000 | 10 | 2020-02-01 00:00:10.000 | true | + NULL | 99 | 2020-02-01 00:00:12.000 | false | + 2020-02-01 00:00:15.000 | 15 | 2020-02-01 00:00:14.000 | true | + 2020-02-01 00:00:15.000 | 15 | 2020-02-01 00:00:16.000 | true | + NULL | 99 | 2020-02-01 00:00:18.000 | false | + NULL | 99 | 2020-02-01 00:00:20.000 | false | + NULL | 99 | 2020-02-01 00:00:22.000 | false | + NULL | 99 | 2020-02-01 00:00:24.000 | false | + NULL | 99 | 2020-02-01 00:00:26.000 | false | + NULL | 99 | 2020-02-01 00:00:28.000 | false | + NULL | 99 | 2020-02-01 00:00:30.000 | false | + +taos> select _irowts_origin, interp(c6), interp(c1) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, 99) order by _irowts; + _irowts_origin | interp(c6) | interp(c1) | +==================================================== + NULL | true | 99 | + NULL | true | 99 | + 2020-02-01 00:00:05.000 | true | 5 | + 2020-02-01 00:00:05.000 | true | 5 | + NULL | true | 99 | + 2020-02-01 00:00:10.000 | true | 10 | + NULL | true | 99 | + 2020-02-01 00:00:15.000 | true | 15 | + 2020-02-01 00:00:15.000 | true | 15 | + NULL | true | 99 | + NULL | true | 99 | + NULL | true | 99 | + NULL | true | 99 | + NULL | true | 99 | + NULL | true | 99 | + NULL | true | 99 | + +taos> select _irowts_origin, interp(c4), interp(c1), _irowts from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, 9) order by _irowts_origin desc, _irowts; + _irowts_origin | interp(c4) | interp(c1) | _irowts | +============================================================================================= + 2020-02-01 00:00:15.000 | 15.000000000000000 | 15 | 2020-02-01 00:00:14.000 | + 2020-02-01 00:00:15.000 | 15.000000000000000 | 15 | 2020-02-01 00:00:16.000 | + 2020-02-01 00:00:10.000 | 10.000000000000000 | 10 | 2020-02-01 00:00:10.000 | + 2020-02-01 00:00:05.000 | 5.000000000000000 | 5 | 2020-02-01 00:00:04.000 | + 2020-02-01 00:00:05.000 | 5.000000000000000 | 5 | 2020-02-01 00:00:06.000 | + NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:00.000 | + NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:02.000 | + NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:08.000 | + NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:12.000 | + NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:18.000 | + NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:20.000 | + NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:22.000 | + NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:24.000 | + NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:26.000 | + NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:28.000 | + NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:30.000 | + +taos> select _isfilled, interp(c4), _irowts_origin, _irowts, interp(c1), tbname from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, 1) order by _irowts_origin desc, _irowts desc; + _isfilled | interp(c4) | _irowts_origin | _irowts | interp(c1) | tbname | +========================================================================================================================================== + true | 15.000000000000000 | 2020-02-01 00:00:15.000 | 2020-02-01 00:00:16.000 | 15 | td32727 | + true | 15.000000000000000 | 2020-02-01 00:00:15.000 | 2020-02-01 00:00:14.000 | 15 | td32727 | + false | 10.000000000000000 | 2020-02-01 00:00:10.000 | 2020-02-01 00:00:10.000 | 10 | td32727 | + true | 5.000000000000000 | 2020-02-01 00:00:05.000 | 2020-02-01 00:00:06.000 | 5 | td32727 | + true | 5.000000000000000 | 2020-02-01 00:00:05.000 | 2020-02-01 00:00:04.000 | 5 | td32727 | + true | 99.000000000000000 | NULL | 2020-02-01 00:00:30.000 | 1 | td32727 | + true | 99.000000000000000 | NULL | 2020-02-01 00:00:28.000 | 1 | td32727 | + true | 99.000000000000000 | NULL | 2020-02-01 00:00:26.000 | 1 | td32727 | + true | 99.000000000000000 | NULL | 2020-02-01 00:00:24.000 | 1 | td32727 | + true | 99.000000000000000 | NULL | 2020-02-01 00:00:22.000 | 1 | td32727 | + true | 99.000000000000000 | NULL | 2020-02-01 00:00:20.000 | 1 | td32727 | + true | 99.000000000000000 | NULL | 2020-02-01 00:00:18.000 | 1 | td32727 | + true | 99.000000000000000 | NULL | 2020-02-01 00:00:12.000 | 1 | td32727 | + true | 99.000000000000000 | NULL | 2020-02-01 00:00:08.000 | 1 | td32727 | + true | 99.000000000000000 | NULL | 2020-02-01 00:00:02.000 | 1 | td32727 | + true | 99.000000000000000 | NULL | 2020-02-01 00:00:00.000 | 1 | td32727 | + From f6f029468450012ef4ae2bf866415ce60cbd4540 Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Wed, 12 Feb 2025 13:58:09 +0800 Subject: [PATCH 3/5] fix: add test cases and fix error message --- source/libs/parser/src/parTranslater.c | 36 +- tests/army/query/function/ans/interp.csv | 540 +++++++++++------------ tests/army/query/function/test_interp.py | 6 +- 3 files changed, 290 insertions(+), 292 deletions(-) diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index 17c9d315bc..c5798b3674 100755 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -5484,7 +5484,7 @@ static int32_t doCheckFillValues(STranslateContext* pCxt, SFillNode* pFill, SNod SNodeListNode* pFillValues = (SNodeListNode*)pFill->pValues; SNode* pProject = NULL; if (!pFillValues) - return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_WRONG_VALUE_TYPE, "Filled values number mismatch"); + return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_WRONG_VALUE_TYPE, "Filled values number mismatch"); FOREACH(pProject, pProjectionList) { if (needFill(pProject)) { if (fillNo >= LIST_LENGTH(pFillValues->pNodeList)) { @@ -6418,16 +6418,16 @@ static int32_t translateInterpAround(STranslateContext* pCxt, SSelectStmt* pSele if (nodeType(pAround->pInterval) == QUERY_NODE_VALUE && ((SValueNode*)pAround->pInterval)->flag & VALUE_FLAG_IS_DURATION) { SValueNode* pVal = (SValueNode*)pAround->pInterval; if (pVal->datum.i == 0) { - return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_FILL_TIME_RANGE, + return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_SYNTAX_ERROR, "Range interval cannot be 0"); } int8_t unit = pVal->unit; if (unit == TIME_UNIT_YEAR || unit == TIME_UNIT_MONTH) { - return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_WRONG_VALUE_TYPE, + return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_SYNTAX_ERROR, "Unsupported time unit in RANGE clause"); } } else { - return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_FILL_TIME_RANGE, "Invalid range interval"); + return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_SYNTAX_ERROR, "Invalid range interval"); } } } @@ -6465,31 +6465,27 @@ static int32_t translateInterp(STranslateContext* pCxt, SSelectStmt* pSelect) { return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_STREAM_QUERY, "Missing EVERY clause or FILL clause"); } - } else { - if (!pSelect->pRangeAround) { - if (NULL == pSelect->pRange || NULL == pSelect->pEvery || NULL == pSelect->pFill) { - if (pSelect->pRange != NULL && QUERY_NODE_OPERATOR == nodeType(pSelect->pRange) && pSelect->pEvery == NULL) { - // single point interp every can be omitted - } else { - return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_INTERP_CLAUSE, - "Missing RANGE clause, EVERY clause or FILL clause"); - } - } - } else if (!pSelect->pFill) { - return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_INTERP_CLAUSE, "Missing FILL clause"); + } else if (NULL == pSelect->pRange || NULL == pSelect->pEvery || NULL == pSelect->pFill) { + if (pSelect->pRange != NULL && QUERY_NODE_OPERATOR == nodeType(pSelect->pRange) && pSelect->pEvery == NULL) { + // single point interp every can be omitted + } else { + return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_INTERP_CLAUSE, + "Missing RANGE clause, EVERY clause or FILL clause"); } } - code = translateExpr(pCxt, &pSelect->pRange); + if (TSDB_CODE_SUCCESS == code) { + code = translateInterpAround(pCxt, pSelect); + } + if (TSDB_CODE_SUCCESS == code) { + code = translateExpr(pCxt, &pSelect->pRange); + } if (TSDB_CODE_SUCCESS == code) { code = translateInterpEvery(pCxt, &pSelect->pEvery); } if (TSDB_CODE_SUCCESS == code) { code = translateInterpFill(pCxt, pSelect); } - if (TSDB_CODE_SUCCESS == code) { - code = translateInterpAround(pCxt, pSelect); - } if (TSDB_CODE_SUCCESS == code) { code = checkInterpForStream(pCxt, pSelect); } diff --git a/tests/army/query/function/ans/interp.csv b/tests/army/query/function/ans/interp.csv index 66e4fdc3c6..8af73074f3 100644 --- a/tests/army/query/function/ans/interp.csv +++ b/tests/army/query/function/ans/interp.csv @@ -1463,19 +1463,19 @@ taos> select _isfilled, _irowts_origin, _irowts, interp(c1), tbname from test.td taos> select interp(c1), interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, 98); interp(c1) | interp(c4) | ========================================= - 5 | 5.000000000000000 | - 99 | 98.000000000000000 | - 10 | 10.000000000000000 | - 99 | 98.000000000000000 | - 99 | 98.000000000000000 | - 15 | 15.000000000000000 | - 99 | 98.000000000000000 | - 99 | 98.000000000000000 | - 99 | 98.000000000000000 | - 99 | 98.000000000000000 | - 99 | 98.000000000000000 | - 99 | 98.000000000000000 | - 99 | 98.000000000000000 | + 5 | 5 | + 99 | 98 | + 10 | 10 | + 99 | 98 | + 99 | 98 | + 15 | 15 | + 99 | 98 | + 99 | 98 | + 99 | 98 | + 99 | 98 | + 99 | 98 | + 99 | 98 | + 99 | 98 | taos> select interp(c1), _isfilled, interp(c6) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, false); interp(c1) | _isfilled | interp(c6) | @@ -1497,29 +1497,29 @@ taos> select interp(c1), _isfilled, interp(c6) from test.td32727 range('2020-02- taos> select _isfilled, _irowts, interp(c1), interp(c5) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, 98); _isfilled | _irowts | interp(c1) | interp(c5) | ========================================================================== - true | 2020-02-01 00:00:06.000 | 5 | 5.0000000 | - true | 2020-02-01 00:00:08.000 | 99 | 98.0000000 | - false | 2020-02-01 00:00:10.000 | 10 | 10.0000000 | - true | 2020-02-01 00:00:12.000 | 99 | 98.0000000 | - true | 2020-02-01 00:00:14.000 | 99 | 98.0000000 | - true | 2020-02-01 00:00:16.000 | 15 | 15.0000000 | - true | 2020-02-01 00:00:18.000 | 99 | 98.0000000 | - true | 2020-02-01 00:00:20.000 | 99 | 98.0000000 | - true | 2020-02-01 00:00:22.000 | 99 | 98.0000000 | - true | 2020-02-01 00:00:24.000 | 99 | 98.0000000 | - true | 2020-02-01 00:00:26.000 | 99 | 98.0000000 | - true | 2020-02-01 00:00:28.000 | 99 | 98.0000000 | - true | 2020-02-01 00:00:30.000 | 99 | 98.0000000 | + true | 2020-02-01 00:00:06.000 | 5 | 5 | + true | 2020-02-01 00:00:08.000 | 99 | 98 | + false | 2020-02-01 00:00:10.000 | 10 | 10 | + true | 2020-02-01 00:00:12.000 | 99 | 98 | + true | 2020-02-01 00:00:14.000 | 99 | 98 | + true | 2020-02-01 00:00:16.000 | 15 | 15 | + true | 2020-02-01 00:00:18.000 | 99 | 98 | + true | 2020-02-01 00:00:20.000 | 99 | 98 | + true | 2020-02-01 00:00:22.000 | 99 | 98 | + true | 2020-02-01 00:00:24.000 | 99 | 98 | + true | 2020-02-01 00:00:26.000 | 99 | 98 | + true | 2020-02-01 00:00:28.000 | 99 | 98 | + true | 2020-02-01 00:00:30.000 | 99 | 98 | taos> select interp(c1), interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, NULL) order by _irowts; interp(c1) | interp(c4) | ========================================= - 5 | 5.000000000000000 | + 5 | 5 | 99 | NULL | - 10 | 10.000000000000000 | + 10 | 10 | 99 | NULL | 99 | NULL | - 15 | 15.000000000000000 | + 15 | 15 | 99 | NULL | 99 | NULL | 99 | NULL | @@ -1548,36 +1548,36 @@ taos> select interp(c1), interp(c6) from test.td32727 range('2020-02-01 00:00:00 taos> select interp(c1), _irowts_origin, interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, 'a'); interp(c1) | _irowts_origin | interp(c4) | =================================================================== - 5 | 2020-02-01 00:00:05.000 | 5.000000000000000 | - 99 | NULL | 0.000000000000000 | - 10 | 2020-02-01 00:00:10.000 | 10.000000000000000 | - 99 | NULL | 0.000000000000000 | - 99 | NULL | 0.000000000000000 | - 15 | 2020-02-01 00:00:15.000 | 15.000000000000000 | - 99 | NULL | 0.000000000000000 | - 99 | NULL | 0.000000000000000 | - 99 | NULL | 0.000000000000000 | - 99 | NULL | 0.000000000000000 | - 99 | NULL | 0.000000000000000 | - 99 | NULL | 0.000000000000000 | - 99 | NULL | 0.000000000000000 | + 5 | 2020-02-01 00:00:05.000 | 5 | + 99 | NULL | 0 | + 10 | 2020-02-01 00:00:10.000 | 10 | + 99 | NULL | 0 | + 99 | NULL | 0 | + 15 | 2020-02-01 00:00:15.000 | 15 | + 99 | NULL | 0 | + 99 | NULL | 0 | + 99 | NULL | 0 | + 99 | NULL | 0 | + 99 | NULL | 0 | + 99 | NULL | 0 | + 99 | NULL | 0 | taos> select interp(c1), interp(c4), interp(c5) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, 9.9, 9) order by _irowts_origin; interp(c1) | interp(c4) | interp(c5) | ================================================================ - 99 | 9.900000000000000 | 9.0000000 | - 99 | 9.900000000000000 | 9.0000000 | - 99 | 9.900000000000000 | 9.0000000 | - 99 | 9.900000000000000 | 9.0000000 | - 99 | 9.900000000000000 | 9.0000000 | - 99 | 9.900000000000000 | 9.0000000 | - 99 | 9.900000000000000 | 9.0000000 | - 99 | 9.900000000000000 | 9.0000000 | - 99 | 9.900000000000000 | 9.0000000 | - 99 | 9.900000000000000 | 9.0000000 | - 5 | 5.000000000000000 | 5.0000000 | - 10 | 10.000000000000000 | 10.0000000 | - 15 | 15.000000000000000 | 15.0000000 | + 99 | 9.9 | 9 | + 99 | 9.9 | 9 | + 99 | 9.9 | 9 | + 99 | 9.9 | 9 | + 99 | 9.9 | 9 | + 99 | 9.9 | 9 | + 99 | 9.9 | 9 | + 99 | 9.9 | 9 | + 99 | 9.9 | 9 | + 99 | 9.9 | 9 | + 5 | 5 | 5 | + 10 | 10 | 10 | + 15 | 15 | 15 | taos> select interp(c1), interp(c2) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, 9) order by _irowts_origin desc; interp(c1) | interp(c2) | @@ -1616,19 +1616,19 @@ taos> select interp(c6), interp(c1) from test.td32727 range('2020-02-01 00:00:00 taos> select interp(c1), interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 100, 99) order by _irowts desc, _irowts_origin; interp(c1) | interp(c4) | ========================================= - 100 | 99.000000000000000 | - 100 | 99.000000000000000 | - 100 | 99.000000000000000 | - 100 | 99.000000000000000 | - 100 | 99.000000000000000 | - 100 | 99.000000000000000 | - 100 | 99.000000000000000 | - 15 | 15.000000000000000 | - 100 | 99.000000000000000 | - 100 | 99.000000000000000 | - 10 | 10.000000000000000 | - 100 | 99.000000000000000 | - 5 | 5.000000000000000 | + 100 | 99 | + 100 | 99 | + 100 | 99 | + 100 | 99 | + 100 | 99 | + 100 | 99 | + 100 | 99 | + 15 | 15 | + 100 | 99 | + 100 | 99 | + 10 | 10 | + 100 | 99 | + 5 | 5 | taos> select _irowts_origin, interp(c1), _irowts, interp(c6) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, 0); _irowts_origin | interp(c1) | _irowts | interp(c6) | @@ -1667,36 +1667,36 @@ taos> select _irowts_origin, interp(c6), interp(c1) from test.td32727 range('202 taos> select _irowts_origin, interp(c4), interp(c1), _irowts from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, 9) order by _irowts_origin desc, _irowts; _irowts_origin | interp(c4) | interp(c1) | _irowts | ============================================================================================= - 2020-02-01 00:00:15.000 | 15.000000000000000 | 15 | 2020-02-01 00:00:16.000 | - 2020-02-01 00:00:10.000 | 10.000000000000000 | 10 | 2020-02-01 00:00:10.000 | - 2020-02-01 00:00:05.000 | 5.000000000000000 | 5 | 2020-02-01 00:00:06.000 | - NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:08.000 | - NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:12.000 | - NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:14.000 | - NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:18.000 | - NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:20.000 | - NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:22.000 | - NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:24.000 | - NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:26.000 | - NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:28.000 | - NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:30.000 | + 2020-02-01 00:00:15.000 | 15 | 15 | 2020-02-01 00:00:16.000 | + 2020-02-01 00:00:10.000 | 10 | 10 | 2020-02-01 00:00:10.000 | + 2020-02-01 00:00:05.000 | 5 | 5 | 2020-02-01 00:00:06.000 | + NULL | 99 | 9 | 2020-02-01 00:00:08.000 | + NULL | 99 | 9 | 2020-02-01 00:00:12.000 | + NULL | 99 | 9 | 2020-02-01 00:00:14.000 | + NULL | 99 | 9 | 2020-02-01 00:00:18.000 | + NULL | 99 | 9 | 2020-02-01 00:00:20.000 | + NULL | 99 | 9 | 2020-02-01 00:00:22.000 | + NULL | 99 | 9 | 2020-02-01 00:00:24.000 | + NULL | 99 | 9 | 2020-02-01 00:00:26.000 | + NULL | 99 | 9 | 2020-02-01 00:00:28.000 | + NULL | 99 | 9 | 2020-02-01 00:00:30.000 | taos> select _isfilled, interp(c4), _irowts_origin, _irowts, interp(c1), tbname from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99, 1) order by _irowts_origin desc, _irowts desc; _isfilled | interp(c4) | _irowts_origin | _irowts | interp(c1) | tbname | ========================================================================================================================================== - true | 15.000000000000000 | 2020-02-01 00:00:15.000 | 2020-02-01 00:00:16.000 | 15 | td32727 | - false | 10.000000000000000 | 2020-02-01 00:00:10.000 | 2020-02-01 00:00:10.000 | 10 | td32727 | - true | 5.000000000000000 | 2020-02-01 00:00:05.000 | 2020-02-01 00:00:06.000 | 5 | td32727 | - true | 99.000000000000000 | NULL | 2020-02-01 00:00:30.000 | 1 | td32727 | - true | 99.000000000000000 | NULL | 2020-02-01 00:00:28.000 | 1 | td32727 | - true | 99.000000000000000 | NULL | 2020-02-01 00:00:26.000 | 1 | td32727 | - true | 99.000000000000000 | NULL | 2020-02-01 00:00:24.000 | 1 | td32727 | - true | 99.000000000000000 | NULL | 2020-02-01 00:00:22.000 | 1 | td32727 | - true | 99.000000000000000 | NULL | 2020-02-01 00:00:20.000 | 1 | td32727 | - true | 99.000000000000000 | NULL | 2020-02-01 00:00:18.000 | 1 | td32727 | - true | 99.000000000000000 | NULL | 2020-02-01 00:00:14.000 | 1 | td32727 | - true | 99.000000000000000 | NULL | 2020-02-01 00:00:12.000 | 1 | td32727 | - true | 99.000000000000000 | NULL | 2020-02-01 00:00:08.000 | 1 | td32727 | + true | 15 | 2020-02-01 00:00:15.000 | 2020-02-01 00:00:16.000 | 15 | td32727 | + false | 10 | 2020-02-01 00:00:10.000 | 2020-02-01 00:00:10.000 | 10 | td32727 | + true | 5 | 2020-02-01 00:00:05.000 | 2020-02-01 00:00:06.000 | 5 | td32727 | + true | 99 | NULL | 2020-02-01 00:00:30.000 | 1 | td32727 | + true | 99 | NULL | 2020-02-01 00:00:28.000 | 1 | td32727 | + true | 99 | NULL | 2020-02-01 00:00:26.000 | 1 | td32727 | + true | 99 | NULL | 2020-02-01 00:00:24.000 | 1 | td32727 | + true | 99 | NULL | 2020-02-01 00:00:22.000 | 1 | td32727 | + true | 99 | NULL | 2020-02-01 00:00:20.000 | 1 | td32727 | + true | 99 | NULL | 2020-02-01 00:00:18.000 | 1 | td32727 | + true | 99 | NULL | 2020-02-01 00:00:14.000 | 1 | td32727 | + true | 99 | NULL | 2020-02-01 00:00:12.000 | 1 | td32727 | + true | 99 | NULL | 2020-02-01 00:00:08.000 | 1 | td32727 | taos> select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(next, 99); interp(c1) | @@ -1956,14 +1956,14 @@ taos> select _isfilled, _irowts_origin, _irowts, interp(c1), tbname from test.td taos> select interp(c1), interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, 98); interp(c1) | interp(c4) | ========================================= - 99 | 98.000000000000000 | - 99 | 98.000000000000000 | - 5 | 5.000000000000000 | - 99 | 98.000000000000000 | - 99 | 98.000000000000000 | - 10 | 10.000000000000000 | - 99 | 98.000000000000000 | - 15 | 15.000000000000000 | + 99 | 98 | + 99 | 98 | + 5 | 5 | + 99 | 98 | + 99 | 98 | + 10 | 10 | + 99 | 98 | + 15 | 15 | taos> select interp(c1), _isfilled, interp(c6) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, false); interp(c1) | _isfilled | interp(c6) | @@ -1980,26 +1980,26 @@ taos> select interp(c1), _isfilled, interp(c6) from test.td32727 range('2020-02- taos> select _isfilled, _irowts, interp(c1), interp(c5) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, 98); _isfilled | _irowts | interp(c1) | interp(c5) | ========================================================================== - true | 2020-02-01 00:00:00.000 | 99 | 98.0000000 | - true | 2020-02-01 00:00:02.000 | 99 | 98.0000000 | - true | 2020-02-01 00:00:04.000 | 5 | 5.0000000 | - true | 2020-02-01 00:00:06.000 | 99 | 98.0000000 | - true | 2020-02-01 00:00:08.000 | 99 | 98.0000000 | - false | 2020-02-01 00:00:10.000 | 10 | 10.0000000 | - true | 2020-02-01 00:00:12.000 | 99 | 98.0000000 | - true | 2020-02-01 00:00:14.000 | 15 | 15.0000000 | + true | 2020-02-01 00:00:00.000 | 99 | 98 | + true | 2020-02-01 00:00:02.000 | 99 | 98 | + true | 2020-02-01 00:00:04.000 | 5 | 5 | + true | 2020-02-01 00:00:06.000 | 99 | 98 | + true | 2020-02-01 00:00:08.000 | 99 | 98 | + false | 2020-02-01 00:00:10.000 | 10 | 10 | + true | 2020-02-01 00:00:12.000 | 99 | 98 | + true | 2020-02-01 00:00:14.000 | 15 | 15 | taos> select interp(c1), interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, NULL) order by _irowts; interp(c1) | interp(c4) | ========================================= 99 | NULL | 99 | NULL | - 5 | 5.000000000000000 | + 5 | 5 | 99 | NULL | 99 | NULL | - 10 | 10.000000000000000 | + 10 | 10 | 99 | NULL | - 15 | 15.000000000000000 | + 15 | 15 | taos> select interp(c1), interp(c6) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, 0) order by _irowts desc; interp(c1) | interp(c6) | @@ -2016,26 +2016,26 @@ taos> select interp(c1), interp(c6) from test.td32727 range('2020-02-01 00:00:00 taos> select interp(c1), _irowts_origin, interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, 'a'); interp(c1) | _irowts_origin | interp(c4) | =================================================================== - 99 | NULL | 0.000000000000000 | - 99 | NULL | 0.000000000000000 | - 5 | 2020-02-01 00:00:05.000 | 5.000000000000000 | - 99 | NULL | 0.000000000000000 | - 99 | NULL | 0.000000000000000 | - 10 | 2020-02-01 00:00:10.000 | 10.000000000000000 | - 99 | NULL | 0.000000000000000 | - 15 | 2020-02-01 00:00:15.000 | 15.000000000000000 | + 99 | NULL | 0 | + 99 | NULL | 0 | + 5 | 2020-02-01 00:00:05.000 | 5 | + 99 | NULL | 0 | + 99 | NULL | 0 | + 10 | 2020-02-01 00:00:10.000 | 10 | + 99 | NULL | 0 | + 15 | 2020-02-01 00:00:15.000 | 15 | taos> select interp(c1), interp(c4), interp(c5) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, 9.9, 9) order by _irowts_origin; interp(c1) | interp(c4) | interp(c5) | ================================================================ - 99 | 9.900000000000000 | 9.0000000 | - 99 | 9.900000000000000 | 9.0000000 | - 99 | 9.900000000000000 | 9.0000000 | - 99 | 9.900000000000000 | 9.0000000 | - 99 | 9.900000000000000 | 9.0000000 | - 5 | 5.000000000000000 | 5.0000000 | - 10 | 10.000000000000000 | 10.0000000 | - 15 | 15.000000000000000 | 15.0000000 | + 99 | 9.9 | 9 | + 99 | 9.9 | 9 | + 99 | 9.9 | 9 | + 99 | 9.9 | 9 | + 99 | 9.9 | 9 | + 5 | 5 | 5 | + 10 | 10 | 10 | + 15 | 15 | 15 | taos> select interp(c1), interp(c2) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, 9) order by _irowts_origin desc; interp(c1) | interp(c2) | @@ -2064,14 +2064,14 @@ taos> select interp(c6), interp(c1) from test.td32727 range('2020-02-01 00:00:00 taos> select interp(c1), interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 100, 99) order by _irowts desc, _irowts_origin; interp(c1) | interp(c4) | ========================================= - 15 | 15.000000000000000 | - 100 | 99.000000000000000 | - 10 | 10.000000000000000 | - 100 | 99.000000000000000 | - 100 | 99.000000000000000 | - 5 | 5.000000000000000 | - 100 | 99.000000000000000 | - 100 | 99.000000000000000 | + 15 | 15 | + 100 | 99 | + 10 | 10 | + 100 | 99 | + 100 | 99 | + 5 | 5 | + 100 | 99 | + 100 | 99 | taos> select _irowts_origin, interp(c1), _irowts, interp(c6) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, 0); _irowts_origin | interp(c1) | _irowts | interp(c6) | @@ -2100,26 +2100,26 @@ taos> select _irowts_origin, interp(c6), interp(c1) from test.td32727 range('202 taos> select _irowts_origin, interp(c4), interp(c1), _irowts from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, 9) order by _irowts_origin desc, _irowts; _irowts_origin | interp(c4) | interp(c1) | _irowts | ============================================================================================= - 2020-02-01 00:00:15.000 | 15.000000000000000 | 15 | 2020-02-01 00:00:14.000 | - 2020-02-01 00:00:10.000 | 10.000000000000000 | 10 | 2020-02-01 00:00:10.000 | - 2020-02-01 00:00:05.000 | 5.000000000000000 | 5 | 2020-02-01 00:00:04.000 | - NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:00.000 | - NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:02.000 | - NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:06.000 | - NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:08.000 | - NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:12.000 | + 2020-02-01 00:00:15.000 | 15 | 15 | 2020-02-01 00:00:14.000 | + 2020-02-01 00:00:10.000 | 10 | 10 | 2020-02-01 00:00:10.000 | + 2020-02-01 00:00:05.000 | 5 | 5 | 2020-02-01 00:00:04.000 | + NULL | 99 | 9 | 2020-02-01 00:00:00.000 | + NULL | 99 | 9 | 2020-02-01 00:00:02.000 | + NULL | 99 | 9 | 2020-02-01 00:00:06.000 | + NULL | 99 | 9 | 2020-02-01 00:00:08.000 | + NULL | 99 | 9 | 2020-02-01 00:00:12.000 | taos> select _isfilled, interp(c4), _irowts_origin, _irowts, interp(c1), tbname from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(next, 99, 1) order by _irowts_origin desc, _irowts desc; _isfilled | interp(c4) | _irowts_origin | _irowts | interp(c1) | tbname | ========================================================================================================================================== - true | 15.000000000000000 | 2020-02-01 00:00:15.000 | 2020-02-01 00:00:14.000 | 15 | td32727 | - false | 10.000000000000000 | 2020-02-01 00:00:10.000 | 2020-02-01 00:00:10.000 | 10 | td32727 | - true | 5.000000000000000 | 2020-02-01 00:00:05.000 | 2020-02-01 00:00:04.000 | 5 | td32727 | - true | 99.000000000000000 | NULL | 2020-02-01 00:00:12.000 | 1 | td32727 | - true | 99.000000000000000 | NULL | 2020-02-01 00:00:08.000 | 1 | td32727 | - true | 99.000000000000000 | NULL | 2020-02-01 00:00:06.000 | 1 | td32727 | - true | 99.000000000000000 | NULL | 2020-02-01 00:00:02.000 | 1 | td32727 | - true | 99.000000000000000 | NULL | 2020-02-01 00:00:00.000 | 1 | td32727 | + true | 15 | 2020-02-01 00:00:15.000 | 2020-02-01 00:00:14.000 | 15 | td32727 | + false | 10 | 2020-02-01 00:00:10.000 | 2020-02-01 00:00:10.000 | 10 | td32727 | + true | 5 | 2020-02-01 00:00:05.000 | 2020-02-01 00:00:04.000 | 5 | td32727 | + true | 99 | NULL | 2020-02-01 00:00:12.000 | 1 | td32727 | + true | 99 | NULL | 2020-02-01 00:00:08.000 | 1 | td32727 | + true | 99 | NULL | 2020-02-01 00:00:06.000 | 1 | td32727 | + true | 99 | NULL | 2020-02-01 00:00:02.000 | 1 | td32727 | + true | 99 | NULL | 2020-02-01 00:00:00.000 | 1 | td32727 | taos> select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, 99); interp(c1) | @@ -2464,22 +2464,22 @@ taos> select _isfilled, _irowts_origin, _irowts, interp(c1), tbname from test.td taos> select interp(c1), interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, 98); interp(c1) | interp(c4) | ========================================= - 99 | 98.000000000000000 | - 99 | 98.000000000000000 | - 5 | 5.000000000000000 | - 5 | 5.000000000000000 | - 99 | 98.000000000000000 | - 10 | 10.000000000000000 | - 99 | 98.000000000000000 | - 15 | 15.000000000000000 | - 15 | 15.000000000000000 | - 99 | 98.000000000000000 | - 99 | 98.000000000000000 | - 99 | 98.000000000000000 | - 99 | 98.000000000000000 | - 99 | 98.000000000000000 | - 99 | 98.000000000000000 | - 99 | 98.000000000000000 | + 99 | 98 | + 99 | 98 | + 5 | 5 | + 5 | 5 | + 99 | 98 | + 10 | 10 | + 99 | 98 | + 15 | 15 | + 15 | 15 | + 99 | 98 | + 99 | 98 | + 99 | 98 | + 99 | 98 | + 99 | 98 | + 99 | 98 | + 99 | 98 | taos> select interp(c1), _isfilled, interp(c6) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, false); interp(c1) | _isfilled | interp(c6) | @@ -2504,35 +2504,35 @@ taos> select interp(c1), _isfilled, interp(c6) from test.td32727 range('2020-02- taos> select _isfilled, _irowts, interp(c1), interp(c5) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, 98); _isfilled | _irowts | interp(c1) | interp(c5) | ========================================================================== - true | 2020-02-01 00:00:00.000 | 99 | 98.0000000 | - true | 2020-02-01 00:00:02.000 | 99 | 98.0000000 | - true | 2020-02-01 00:00:04.000 | 5 | 5.0000000 | - true | 2020-02-01 00:00:06.000 | 5 | 5.0000000 | - true | 2020-02-01 00:00:08.000 | 99 | 98.0000000 | - false | 2020-02-01 00:00:10.000 | 10 | 10.0000000 | - true | 2020-02-01 00:00:12.000 | 99 | 98.0000000 | - true | 2020-02-01 00:00:14.000 | 15 | 15.0000000 | - true | 2020-02-01 00:00:16.000 | 15 | 15.0000000 | - true | 2020-02-01 00:00:18.000 | 99 | 98.0000000 | - true | 2020-02-01 00:00:20.000 | 99 | 98.0000000 | - true | 2020-02-01 00:00:22.000 | 99 | 98.0000000 | - true | 2020-02-01 00:00:24.000 | 99 | 98.0000000 | - true | 2020-02-01 00:00:26.000 | 99 | 98.0000000 | - true | 2020-02-01 00:00:28.000 | 99 | 98.0000000 | - true | 2020-02-01 00:00:30.000 | 99 | 98.0000000 | + true | 2020-02-01 00:00:00.000 | 99 | 98 | + true | 2020-02-01 00:00:02.000 | 99 | 98 | + true | 2020-02-01 00:00:04.000 | 5 | 5 | + true | 2020-02-01 00:00:06.000 | 5 | 5 | + true | 2020-02-01 00:00:08.000 | 99 | 98 | + false | 2020-02-01 00:00:10.000 | 10 | 10 | + true | 2020-02-01 00:00:12.000 | 99 | 98 | + true | 2020-02-01 00:00:14.000 | 15 | 15 | + true | 2020-02-01 00:00:16.000 | 15 | 15 | + true | 2020-02-01 00:00:18.000 | 99 | 98 | + true | 2020-02-01 00:00:20.000 | 99 | 98 | + true | 2020-02-01 00:00:22.000 | 99 | 98 | + true | 2020-02-01 00:00:24.000 | 99 | 98 | + true | 2020-02-01 00:00:26.000 | 99 | 98 | + true | 2020-02-01 00:00:28.000 | 99 | 98 | + true | 2020-02-01 00:00:30.000 | 99 | 98 | taos> select interp(c1), interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, NULL) order by _irowts; interp(c1) | interp(c4) | ========================================= 99 | NULL | 99 | NULL | - 5 | 5.000000000000000 | - 5 | 5.000000000000000 | + 5 | 5 | + 5 | 5 | 99 | NULL | - 10 | 10.000000000000000 | + 10 | 10 | 99 | NULL | - 15 | 15.000000000000000 | - 15 | 15.000000000000000 | + 15 | 15 | + 15 | 15 | 99 | NULL | 99 | NULL | 99 | NULL | @@ -2564,42 +2564,42 @@ taos> select interp(c1), interp(c6) from test.td32727 range('2020-02-01 00:00:00 taos> select interp(c1), _irowts_origin, interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, 'a'); interp(c1) | _irowts_origin | interp(c4) | =================================================================== - 99 | NULL | 0.000000000000000 | - 99 | NULL | 0.000000000000000 | - 5 | 2020-02-01 00:00:05.000 | 5.000000000000000 | - 5 | 2020-02-01 00:00:05.000 | 5.000000000000000 | - 99 | NULL | 0.000000000000000 | - 10 | 2020-02-01 00:00:10.000 | 10.000000000000000 | - 99 | NULL | 0.000000000000000 | - 15 | 2020-02-01 00:00:15.000 | 15.000000000000000 | - 15 | 2020-02-01 00:00:15.000 | 15.000000000000000 | - 99 | NULL | 0.000000000000000 | - 99 | NULL | 0.000000000000000 | - 99 | NULL | 0.000000000000000 | - 99 | NULL | 0.000000000000000 | - 99 | NULL | 0.000000000000000 | - 99 | NULL | 0.000000000000000 | - 99 | NULL | 0.000000000000000 | + 99 | NULL | 0 | + 99 | NULL | 0 | + 5 | 2020-02-01 00:00:05.000 | 5 | + 5 | 2020-02-01 00:00:05.000 | 5 | + 99 | NULL | 0 | + 10 | 2020-02-01 00:00:10.000 | 10 | + 99 | NULL | 0 | + 15 | 2020-02-01 00:00:15.000 | 15 | + 15 | 2020-02-01 00:00:15.000 | 15 | + 99 | NULL | 0 | + 99 | NULL | 0 | + 99 | NULL | 0 | + 99 | NULL | 0 | + 99 | NULL | 0 | + 99 | NULL | 0 | + 99 | NULL | 0 | taos> select interp(c1), interp(c4), interp(c5) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, 9.9, 9) order by _irowts_origin; interp(c1) | interp(c4) | interp(c5) | ================================================================ - 99 | 9.900000000000000 | 9.0000000 | - 99 | 9.900000000000000 | 9.0000000 | - 99 | 9.900000000000000 | 9.0000000 | - 99 | 9.900000000000000 | 9.0000000 | - 99 | 9.900000000000000 | 9.0000000 | - 99 | 9.900000000000000 | 9.0000000 | - 99 | 9.900000000000000 | 9.0000000 | - 99 | 9.900000000000000 | 9.0000000 | - 99 | 9.900000000000000 | 9.0000000 | - 99 | 9.900000000000000 | 9.0000000 | - 99 | 9.900000000000000 | 9.0000000 | - 5 | 5.000000000000000 | 5.0000000 | - 5 | 5.000000000000000 | 5.0000000 | - 10 | 10.000000000000000 | 10.0000000 | - 15 | 15.000000000000000 | 15.0000000 | - 15 | 15.000000000000000 | 15.0000000 | + 99 | 9.9 | 9 | + 99 | 9.9 | 9 | + 99 | 9.9 | 9 | + 99 | 9.9 | 9 | + 99 | 9.9 | 9 | + 99 | 9.9 | 9 | + 99 | 9.9 | 9 | + 99 | 9.9 | 9 | + 99 | 9.9 | 9 | + 99 | 9.9 | 9 | + 99 | 9.9 | 9 | + 5 | 5 | 5 | + 5 | 5 | 5 | + 10 | 10 | 10 | + 15 | 15 | 15 | + 15 | 15 | 15 | taos> select interp(c1), interp(c2) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, 9) order by _irowts_origin desc; interp(c1) | interp(c2) | @@ -2644,22 +2644,22 @@ taos> select interp(c6), interp(c1) from test.td32727 range('2020-02-01 00:00:00 taos> select interp(c1), interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 100, 99) order by _irowts desc, _irowts_origin; interp(c1) | interp(c4) | ========================================= - 100 | 99.000000000000000 | - 100 | 99.000000000000000 | - 100 | 99.000000000000000 | - 100 | 99.000000000000000 | - 100 | 99.000000000000000 | - 100 | 99.000000000000000 | - 100 | 99.000000000000000 | - 15 | 15.000000000000000 | - 15 | 15.000000000000000 | - 100 | 99.000000000000000 | - 10 | 10.000000000000000 | - 100 | 99.000000000000000 | - 5 | 5.000000000000000 | - 5 | 5.000000000000000 | - 100 | 99.000000000000000 | - 100 | 99.000000000000000 | + 100 | 99 | + 100 | 99 | + 100 | 99 | + 100 | 99 | + 100 | 99 | + 100 | 99 | + 100 | 99 | + 15 | 15 | + 15 | 15 | + 100 | 99 | + 10 | 10 | + 100 | 99 | + 5 | 5 | + 5 | 5 | + 100 | 99 | + 100 | 99 | taos> select _irowts_origin, interp(c1), _irowts, interp(c6) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, 0); _irowts_origin | interp(c1) | _irowts | interp(c6) | @@ -2704,40 +2704,40 @@ taos> select _irowts_origin, interp(c6), interp(c1) from test.td32727 range('202 taos> select _irowts_origin, interp(c4), interp(c1), _irowts from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, 9) order by _irowts_origin desc, _irowts; _irowts_origin | interp(c4) | interp(c1) | _irowts | ============================================================================================= - 2020-02-01 00:00:15.000 | 15.000000000000000 | 15 | 2020-02-01 00:00:14.000 | - 2020-02-01 00:00:15.000 | 15.000000000000000 | 15 | 2020-02-01 00:00:16.000 | - 2020-02-01 00:00:10.000 | 10.000000000000000 | 10 | 2020-02-01 00:00:10.000 | - 2020-02-01 00:00:05.000 | 5.000000000000000 | 5 | 2020-02-01 00:00:04.000 | - 2020-02-01 00:00:05.000 | 5.000000000000000 | 5 | 2020-02-01 00:00:06.000 | - NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:00.000 | - NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:02.000 | - NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:08.000 | - NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:12.000 | - NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:18.000 | - NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:20.000 | - NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:22.000 | - NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:24.000 | - NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:26.000 | - NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:28.000 | - NULL | 99.000000000000000 | 9 | 2020-02-01 00:00:30.000 | + 2020-02-01 00:00:15.000 | 15 | 15 | 2020-02-01 00:00:14.000 | + 2020-02-01 00:00:15.000 | 15 | 15 | 2020-02-01 00:00:16.000 | + 2020-02-01 00:00:10.000 | 10 | 10 | 2020-02-01 00:00:10.000 | + 2020-02-01 00:00:05.000 | 5 | 5 | 2020-02-01 00:00:04.000 | + 2020-02-01 00:00:05.000 | 5 | 5 | 2020-02-01 00:00:06.000 | + NULL | 99 | 9 | 2020-02-01 00:00:00.000 | + NULL | 99 | 9 | 2020-02-01 00:00:02.000 | + NULL | 99 | 9 | 2020-02-01 00:00:08.000 | + NULL | 99 | 9 | 2020-02-01 00:00:12.000 | + NULL | 99 | 9 | 2020-02-01 00:00:18.000 | + NULL | 99 | 9 | 2020-02-01 00:00:20.000 | + NULL | 99 | 9 | 2020-02-01 00:00:22.000 | + NULL | 99 | 9 | 2020-02-01 00:00:24.000 | + NULL | 99 | 9 | 2020-02-01 00:00:26.000 | + NULL | 99 | 9 | 2020-02-01 00:00:28.000 | + NULL | 99 | 9 | 2020-02-01 00:00:30.000 | taos> select _isfilled, interp(c4), _irowts_origin, _irowts, interp(c1), tbname from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(near, 99, 1) order by _irowts_origin desc, _irowts desc; _isfilled | interp(c4) | _irowts_origin | _irowts | interp(c1) | tbname | ========================================================================================================================================== - true | 15.000000000000000 | 2020-02-01 00:00:15.000 | 2020-02-01 00:00:16.000 | 15 | td32727 | - true | 15.000000000000000 | 2020-02-01 00:00:15.000 | 2020-02-01 00:00:14.000 | 15 | td32727 | - false | 10.000000000000000 | 2020-02-01 00:00:10.000 | 2020-02-01 00:00:10.000 | 10 | td32727 | - true | 5.000000000000000 | 2020-02-01 00:00:05.000 | 2020-02-01 00:00:06.000 | 5 | td32727 | - true | 5.000000000000000 | 2020-02-01 00:00:05.000 | 2020-02-01 00:00:04.000 | 5 | td32727 | - true | 99.000000000000000 | NULL | 2020-02-01 00:00:30.000 | 1 | td32727 | - true | 99.000000000000000 | NULL | 2020-02-01 00:00:28.000 | 1 | td32727 | - true | 99.000000000000000 | NULL | 2020-02-01 00:00:26.000 | 1 | td32727 | - true | 99.000000000000000 | NULL | 2020-02-01 00:00:24.000 | 1 | td32727 | - true | 99.000000000000000 | NULL | 2020-02-01 00:00:22.000 | 1 | td32727 | - true | 99.000000000000000 | NULL | 2020-02-01 00:00:20.000 | 1 | td32727 | - true | 99.000000000000000 | NULL | 2020-02-01 00:00:18.000 | 1 | td32727 | - true | 99.000000000000000 | NULL | 2020-02-01 00:00:12.000 | 1 | td32727 | - true | 99.000000000000000 | NULL | 2020-02-01 00:00:08.000 | 1 | td32727 | - true | 99.000000000000000 | NULL | 2020-02-01 00:00:02.000 | 1 | td32727 | - true | 99.000000000000000 | NULL | 2020-02-01 00:00:00.000 | 1 | td32727 | + true | 15 | 2020-02-01 00:00:15.000 | 2020-02-01 00:00:16.000 | 15 | td32727 | + true | 15 | 2020-02-01 00:00:15.000 | 2020-02-01 00:00:14.000 | 15 | td32727 | + false | 10 | 2020-02-01 00:00:10.000 | 2020-02-01 00:00:10.000 | 10 | td32727 | + true | 5 | 2020-02-01 00:00:05.000 | 2020-02-01 00:00:06.000 | 5 | td32727 | + true | 5 | 2020-02-01 00:00:05.000 | 2020-02-01 00:00:04.000 | 5 | td32727 | + true | 99 | NULL | 2020-02-01 00:00:30.000 | 1 | td32727 | + true | 99 | NULL | 2020-02-01 00:00:28.000 | 1 | td32727 | + true | 99 | NULL | 2020-02-01 00:00:26.000 | 1 | td32727 | + true | 99 | NULL | 2020-02-01 00:00:24.000 | 1 | td32727 | + true | 99 | NULL | 2020-02-01 00:00:22.000 | 1 | td32727 | + true | 99 | NULL | 2020-02-01 00:00:20.000 | 1 | td32727 | + true | 99 | NULL | 2020-02-01 00:00:18.000 | 1 | td32727 | + true | 99 | NULL | 2020-02-01 00:00:12.000 | 1 | td32727 | + true | 99 | NULL | 2020-02-01 00:00:08.000 | 1 | td32727 | + true | 99 | NULL | 2020-02-01 00:00:02.000 | 1 | td32727 | + true | 99 | NULL | 2020-02-01 00:00:00.000 | 1 | td32727 | diff --git a/tests/army/query/function/test_interp.py b/tests/army/query/function/test_interp.py index ffbadd6e7e..64e380a542 100644 --- a/tests/army/query/function/test_interp.py +++ b/tests/army/query/function/test_interp.py @@ -76,18 +76,20 @@ class TDTestCase(TBase): tdSql.error("select interp(c1), interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99);") tdSql.error("select _irowts from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near);") tdSql.error("select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s);") - tdSql.error("select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) fill(near);") + tdSql.error("select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) fill(near, 2);") tdSql.error("select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near);") tdSql.error("select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near, c1);") tdSql.error("select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', 1s, '2020-01-01 00:00:30.000') every(2s) fill(near, 99);") + tdSql.error("select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', '1s') every(2s) fill(near, 99);") tdSql.error("select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(linear, 99);") tdSql.error("select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(value, 99);") tdSql.error("select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(value_f, 99);") tdSql.error("select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(null, 99);") tdSql.error("select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(null_f, 99);") - tdSql.error("select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', '1s') every(2s) fill(prev, 99);") tdSql.error("select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1n) every(2s) fill(prev, 99);") tdSql.error("select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1y) every(2s) fill(prev, 99);") + tdSql.error("select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1) every(2s) fill(prev, 99);") + tdSql.error("create stream s1 trigger force_window_close into test.s1res as select _irowts, interp(c1), interp(c2)from test.td32727 partition by tbname range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(1s) fill(near, 1, 1);") def test_interp(self): self.test_normal_query_new("interp") From e572806c013fcf1f6903c47c62079fd1c639b01f Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Wed, 12 Feb 2025 16:23:43 +0800 Subject: [PATCH 4/5] fix: correct error code --- tests/system-test/2-query/interp_extension.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tests/system-test/2-query/interp_extension.py b/tests/system-test/2-query/interp_extension.py index 0300e10e21..eb65ea58cc 100644 --- a/tests/system-test/2-query/interp_extension.py +++ b/tests/system-test/2-query/interp_extension.py @@ -376,7 +376,7 @@ class TDTestCase: ### range with around interval cannot specify two timepoints, currently not supported sql = f"select _irowts, interp(c1), interp(c2), _isfilled from test.meters range('2020-02-01 00:00:00', '2020-02-01 00:02:00', 1h) fill(near, 1, 1)" - tdSql.error(sql, -2147473920) ## syntax error + tdSql.error(sql, -2147473827) ## syntax error ### NULL/linear cannot specify other values sql = f"select _irowts, interp(c1), interp(c2), _isfilled from test.meters range('2020-02-01 00:00:00', '2020-02-01 00:02:00') fill(NULL, 1, 1)" @@ -387,7 +387,8 @@ class TDTestCase: ### cannot have every clause with range around sql = f"select _irowts, interp(c1), interp(c2), _isfilled from test.meters range('2020-02-01 00:00:00', 1h) every(1s) fill(prev, 1, 1)" - tdSql.error(sql, -2147473827) ## TSDB_CODE_PAR_INVALID_INTERP_CLAUSE + tdSql.query(sql, queryTimes=1) + tdSql.checkRows(1) ### cannot specify near/prev/next values when using range sql = f"select _irowts, interp(c1), interp(c2), _isfilled from test.meters range('2020-02-01 00:00:00', '2020-02-01 00:01:00') every(1s) fill(near, 1, 1)" @@ -409,13 +410,13 @@ class TDTestCase: ### range interval cannot be 0 sql = f"select _irowts, interp(c1), interp(c2), _isfilled from test.meters range('2020-02-01 00:00:00', 0h) fill(near, 1, 1)" - tdSql.error(sql, -2147473861) ## TSDB_CODE_PAR_INVALID_FILL_TIME_RANGE + tdSql.error(sql, -2147473920) ## syntax error sql = f"select _irowts, interp(c1), interp(c2), _isfilled from test.meters range('2020-02-01 00:00:00', 1y) fill(near, 1, 1)" - tdSql.error(sql, -2147473915) ## TSDB_CODE_PAR_WRONG_VALUE_TYPE + tdSql.error(sql, -2147473920) ## syntax error sql = f"select _irowts, interp(c1), interp(c2), _isfilled from test.meters range('2020-02-01 00:00:00', 1n) fill(near, 1, 1)" - tdSql.error(sql, -2147473915) ## TSDB_CODE_PAR_WRONG_VALUE_TYPE + tdSql.error(sql, -2147473920) ## syntax error sql = f"select _irowts, interp(c1), interp(c2), _isfilled from test.meters where ts between '2020-02-01 00:00:00' and '2020-02-01 00:00:00' range('2020-02-01 00:00:00', 1h) fill(near, 1, 1)" tdSql.query(sql, queryTimes=1) From 0d3887ba05dbe8f71dee3e364767165bad2d74f0 Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Wed, 12 Feb 2025 17:21:15 +0800 Subject: [PATCH 5/5] docs: modify interp function docs --- docs/en/14-reference/03-taos-sql/06-select.md | 3 +-- docs/en/14-reference/03-taos-sql/10-function.md | 2 +- docs/zh/14-reference/03-taos-sql/06-select.md | 3 +-- docs/zh/14-reference/03-taos-sql/10-function.md | 2 +- source/libs/parser/src/parTranslater.c | 4 ++-- tests/army/query/function/test_interp.py | 1 + 6 files changed, 7 insertions(+), 8 deletions(-) diff --git a/docs/en/14-reference/03-taos-sql/06-select.md b/docs/en/14-reference/03-taos-sql/06-select.md index 3b89c4fe5a..21cb419bed 100644 --- a/docs/en/14-reference/03-taos-sql/06-select.md +++ b/docs/en/14-reference/03-taos-sql/06-select.md @@ -61,8 +61,7 @@ window_clause: { | COUNT_WINDOW(count_val[, sliding_val]) interp_clause: - RANGE(ts_val [, ts_val]) EVERY(every_val) FILL(fill_mod_and_val) - | RANGE(ts_val, surrounding_time_val) FILL(fill_mod_and_val) + RANGE(ts_val [, ts_val] [, surrounding_time_val]) EVERY(every_val) FILL(fill_mod_and_val) partition_by_clause: PARTITION BY partition_by_expr [, partition_by_expr] ... diff --git a/docs/en/14-reference/03-taos-sql/10-function.md b/docs/en/14-reference/03-taos-sql/10-function.md index 8397c59177..46ac6b00d5 100644 --- a/docs/en/14-reference/03-taos-sql/10-function.md +++ b/docs/en/14-reference/03-taos-sql/10-function.md @@ -1967,7 +1967,7 @@ ignore_null_values: { - For queries on tables with composite primary keys, if there are data with the same timestamp, only the data with the smallest composite primary key participates in the calculation. - INTERP query supports NEAR FILL mode, i.e., when FILL is needed, it uses the data closest to the current time point for interpolation. When the timestamps before and after are equally close to the current time slice, FILL the previous row's value. This mode is not supported in stream computing and window queries. For example: SELECT INTERP(col) FROM tb RANGE('2023-01-01 00:00:00', '2023-01-01 00:10:00') FILL(NEAR).(Supported from version 3.3.4.9). - INTERP can only use the pseudocolumn `_irowts_origin` when using FILL PREV/NEXT/NEAR modes. `_irowts_origin` is supported from version 3.3.4.9. -- INTERP `RANGE` clause supports the expansion of the time range (supported from version 3.3.4.9), such as `RANGE('2023-01-01 00:00:00', 10s)` means to find data 10s before and after the time point '2023-01-01 00:00:00' for interpolation, FILL PREV/NEXT/NEAR respectively means to look for data forward/backward/around the time point, if there is no data around the time point, then use the value specified by FILL for interpolation, therefore the FILL clause must specify a value at this time. For example: SELECT INTERP(col) FROM tb RANGE('2023-01-01 00:00:00', 10s) FILL(PREV, 1). Currently, only the combination of time point and time range is supported, not the combination of time interval and time range, i.e., RANGE('2023-01-01 00:00:00', '2023-02-01 00:00:00', 1h) is not supported. The specified time range rules are similar to EVERY, the unit cannot be year or month, the value cannot be 0, and cannot have quotes. When using this extension, other FILL modes except FILL PREV/NEXT/NEAR are not supported, and the EVERY clause cannot be specified. +- INTERP `RANGE` clause supports the expansion of the time range (supported from version 3.3.4.9), For example, `RANGE('2023-01-01 00:00:00', 10s)` means that only data within 10s around the time point '2023-01-01 00:00:00' can be used for interpolation. `FILL PREV/NEXT/NEAR` respectively means to look for data forward/backward/around the time point. If there is no data around the time point, the default value specified by `FILL` is used for interpolation. Therefore the `FILL` clause must specify the default value at the same time. For example: SELECT INTERP(col) FROM tb RANGE('2023-01-01 00:00:00', 10s) FILL(PREV, 1). Starting from the 3.3.6.0 version, the combination of time period and time range is supported. When interpolating for each point within the time period, the time range requirement must be met. Prior versions only supported single time point and its time range. The available values for time range are similar to `EVERY`, the unit cannot be year or month, the value must be greater than 0, and cannot be in quotes. When using this extension, `FILL` modes other than `PREV/NEXT/NEAR` are not supported. ### LAST diff --git a/docs/zh/14-reference/03-taos-sql/06-select.md b/docs/zh/14-reference/03-taos-sql/06-select.md index cd6835b55e..3375fe6134 100644 --- a/docs/zh/14-reference/03-taos-sql/06-select.md +++ b/docs/zh/14-reference/03-taos-sql/06-select.md @@ -62,8 +62,7 @@ window_clause: { | COUNT_WINDOW(count_val[, sliding_val]) interp_clause: - RANGE(ts_val [, ts_val]) EVERY(every_val) FILL(fill_mod_and_val) - | RANGE(ts_val, surrounding_time_val) FILL(fill_mod_and_val) + RANGE(ts_val [, ts_val] [, surrounding_time_val]) EVERY(every_val) FILL(fill_mod_and_val) partition_by_clause: PARTITION BY partition_by_expr [, partition_by_expr] ... diff --git a/docs/zh/14-reference/03-taos-sql/10-function.md b/docs/zh/14-reference/03-taos-sql/10-function.md index c0e80e80df..529b11503e 100644 --- a/docs/zh/14-reference/03-taos-sql/10-function.md +++ b/docs/zh/14-reference/03-taos-sql/10-function.md @@ -1890,7 +1890,7 @@ ignore_null_values: { - INTERP 对于带复合主键的表的查询,若存在相同时间戳的数据,则只有对应的复合主键最小的数据参与运算。 - INTERP 查询支持 NEAR FILL 模式, 即当需要 FILL 时, 使用距离当前时间点最近的数据进行插值, 当前后时间戳与当前时间断面一样近时, FILL 前一行的值. 此模式在流计算中和窗口查询中不支持。例如: SELECT INTERP(col) FROM tb RANGE('2023-01-01 00:00:00', '2023-01-01 00:10:00') FILL(NEAR)(3.3.4.9 版本及以后支持)。 - INTERP 只有在使用 FILL PREV/NEXT/NEAR 模式时才可以使用伪列 `_irowts_origin`。`_irowts_origin`在 3.3.4.9 版本及以后支持。 -- INTERP `RANGE`子句支持时间范围的扩展(3.3.4.9 版本及以后支持), 如`RANGE('2023-01-01 00:00:00', 10s)`表示在时间点 '2023-01-01 00:00:00' 查找前后 10s 的数据进行插值, FILL PREV/NEXT/NEAR 分别表示从时间点向前/向后/前后查找数据, 若时间点周围没有数据, 则使用 FILL 指定的值进行插值, 因此此时 FILL 子句必须指定值。例如: SELECT INTERP(col) FROM tb RANGE('2023-01-01 00:00:00', 10s) FILL(PREV, 1)。目前仅支持时间点和时间范围的组合, 不支持时间区间和时间范围的组合, 即不支持 RANGE('2023-01-01 00:00:00', '2023-02-01 00:00:00', 1h)。所指定的时间范围规则与 EVERY 类似, 单位不能是年或月, 值不能为 0, 不能带引号。使用该扩展时, 不支持除FILL PREV/NEXT/NEAR外的其他 FILL 模式, 且不能指定 EVERY 子句。 +- INTERP `RANGE`子句从3.3.4.9版本开始支持时间范围的扩展, 如`RANGE('2023-01-01 00:00:00', 10s)`表示只能使用时间点 '2023-01-01 00:00:00' 周边 10s 内的数据进行插值, FILL PREV/NEXT/NEAR 分别表示从时间点开始向前/向后/前后在时间范围内查找数据, 若时间点周边在指定时间范围内没有数据, 则使用 FILL 指定的默认值进行插值, 因此此时 FILL 子句必须同时指定默认值。例如: SELECT INTERP(col) FROM tb RANGE('2023-01-01 00:00:00', 10s) FILL(PREV, 1)。从3.3.6.0版本开始支持时间区间和时间范围的组合,对于时间区间内的每个断面进行插值时都需要满足时间范围的要求,在此之前的版本仅支持时间点和时间范围的组合。时间范围的值域规则与 EVERY 类似, 单位不能是年或月, 值必须大于 0, 不能带引号。使用该扩展时, 不支持除 FILL PREV/NEXT/NEAR 外的其他 FILL 模式。 ### LAST diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index c5798b3674..0850b6ca00 100755 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -6417,9 +6417,9 @@ static int32_t translateInterpAround(STranslateContext* pCxt, SSelectStmt* pSele if (TSDB_CODE_SUCCESS == code) { if (nodeType(pAround->pInterval) == QUERY_NODE_VALUE && ((SValueNode*)pAround->pInterval)->flag & VALUE_FLAG_IS_DURATION) { SValueNode* pVal = (SValueNode*)pAround->pInterval; - if (pVal->datum.i == 0) { + if (pVal->datum.i <= 0) { return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_SYNTAX_ERROR, - "Range interval cannot be 0"); + "Range interval must be greater than 0"); } int8_t unit = pVal->unit; if (unit == TIME_UNIT_YEAR || unit == TIME_UNIT_MONTH) { diff --git a/tests/army/query/function/test_interp.py b/tests/army/query/function/test_interp.py index 64e380a542..d8ed82cbca 100644 --- a/tests/army/query/function/test_interp.py +++ b/tests/army/query/function/test_interp.py @@ -73,6 +73,7 @@ class TDTestCase(TBase): def test_abnormal_query(self, testCase): tdLog.info("test abnormal query.") + tdSql.error("select interp(c1) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', -1s) every(2s) fill(prev, 99);") tdSql.error("select interp(c1), interp(c4) from test.td32727 range('2020-02-01 00:00:00.000', '2020-02-01 00:00:30.000', 1s) every(2s) fill(prev, 99);") tdSql.error("select _irowts from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s) fill(near);") tdSql.error("select interp(c1) from test.td32861 range('2020-01-01 00:00:00.000', '2020-01-01 00:00:30.000', 1s) every(2s);")