feat: support range fill with interval limitation
This commit is contained in:
parent
cbf62c0eaf
commit
bf13c90a61
|
@ -420,7 +420,7 @@ typedef struct SWindowOffsetNode {
|
||||||
|
|
||||||
typedef struct SRangeAroundNode {
|
typedef struct SRangeAroundNode {
|
||||||
ENodeType type;
|
ENodeType type;
|
||||||
SNode* pTimepoint;
|
SNode* pRange;
|
||||||
SNode* pInterval;
|
SNode* pInterval;
|
||||||
} SRangeAroundNode;
|
} SRangeAroundNode;
|
||||||
|
|
||||||
|
|
|
@ -1271,7 +1271,7 @@ void nodesDestroyNode(SNode* pNode) {
|
||||||
case QUERY_NODE_RANGE_AROUND: {
|
case QUERY_NODE_RANGE_AROUND: {
|
||||||
SRangeAroundNode* pAround = (SRangeAroundNode*)pNode;
|
SRangeAroundNode* pAround = (SRangeAroundNode*)pNode;
|
||||||
nodesDestroyNode(pAround->pInterval);
|
nodesDestroyNode(pAround->pInterval);
|
||||||
nodesDestroyNode(pAround->pTimepoint);
|
nodesDestroyNode(pAround->pRange);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case QUERY_NODE_STREAM_NOTIFY_OPTIONS: {
|
case QUERY_NODE_STREAM_NOTIFY_OPTIONS: {
|
||||||
|
|
|
@ -164,9 +164,9 @@ SNode* createIntervalWindowNode(SAstCreateContext* pCxt, SNode* pInterval, S
|
||||||
SNode* createWindowOffsetNode(SAstCreateContext* pCxt, SNode* pStartOffset, SNode* pEndOffset);
|
SNode* createWindowOffsetNode(SAstCreateContext* pCxt, SNode* pStartOffset, SNode* pEndOffset);
|
||||||
SNode* createFillNode(SAstCreateContext* pCxt, EFillMode mode, SNode* pValues);
|
SNode* createFillNode(SAstCreateContext* pCxt, EFillMode mode, SNode* pValues);
|
||||||
SNode* createGroupingSetNode(SAstCreateContext* pCxt, SNode* pNode);
|
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* 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* createWhenThenNode(SAstCreateContext* pCxt, SNode* pWhen, SNode* pThen);
|
||||||
SNode* createCaseWhenNode(SAstCreateContext* pCxt, SNode* pCase, SNodeList* pWhenThenList, SNode* pElse);
|
SNode* createCaseWhenNode(SAstCreateContext* pCxt, SNode* pCase, SNodeList* pWhenThenList, SNode* pElse);
|
||||||
SNode* createAlterSingleTagColumnNode(SAstCreateContext* pCtx, SToken* token, SNode* pVal);
|
SNode* createAlterSingleTagColumnNode(SAstCreateContext* pCtx, SToken* token, SNode* pVal);
|
||||||
|
|
|
@ -1705,7 +1705,10 @@ having_clause_opt(A) ::= HAVING search_condition(B).
|
||||||
|
|
||||||
range_opt(A) ::= . { A = NULL; }
|
range_opt(A) ::= . { A = NULL; }
|
||||||
range_opt(A) ::=
|
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_opt(A) ::=
|
||||||
RANGE NK_LP expr_or_subquery(B) NK_RP. { A = createInterpTimePoint(pCxt, releaseRawExprNode(pCxt, B)); }
|
RANGE NK_LP expr_or_subquery(B) NK_RP. { A = createInterpTimePoint(pCxt, releaseRawExprNode(pCxt, B)); }
|
||||||
|
|
||||||
|
|
|
@ -1471,13 +1471,19 @@ _err:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
SNode* createInterpTimeRange(SAstCreateContext* pCxt, SNode* pStart, SNode* pEnd) {
|
SNode* createInterpTimeRange(SAstCreateContext* pCxt, SNode* pStart, SNode* pEnd, SNode* pInterval) {
|
||||||
CHECK_PARSER_STATUS(pCxt);
|
CHECK_PARSER_STATUS(pCxt);
|
||||||
if (pEnd && nodeType(pEnd) == QUERY_NODE_VALUE && ((SValueNode*)pEnd)->flag & VALUE_FLAG_IS_DURATION) {
|
if (NULL == pInterval) {
|
||||||
return createInterpTimeAround(pCxt, pStart, pEnd);
|
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:
|
_err:
|
||||||
|
|
||||||
nodesDestroyNode(pStart);
|
nodesDestroyNode(pStart);
|
||||||
nodesDestroyNode(pEnd);
|
nodesDestroyNode(pEnd);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -1491,12 +1497,16 @@ _err:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
SNode* createInterpTimeAround(SAstCreateContext* pCxt, SNode* pTimepoint, SNode* pInterval) {
|
SNode* createInterpTimeAround(SAstCreateContext* pCxt, SNode* pStart, SNode* pEnd, SNode* pInterval) {
|
||||||
CHECK_PARSER_STATUS(pCxt);
|
CHECK_PARSER_STATUS(pCxt);
|
||||||
SRangeAroundNode* pAround = NULL;
|
SRangeAroundNode* pAround = NULL;
|
||||||
pCxt->errCode = nodesMakeNode(QUERY_NODE_RANGE_AROUND, (SNode**)&pAround);
|
pCxt->errCode = nodesMakeNode(QUERY_NODE_RANGE_AROUND, (SNode**)&pAround);
|
||||||
CHECK_PARSER_STATUS(pCxt);
|
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;
|
pAround->pInterval = pInterval;
|
||||||
CHECK_PARSER_STATUS(pCxt);
|
CHECK_PARSER_STATUS(pCxt);
|
||||||
return (SNode*)pAround;
|
return (SNode*)pAround;
|
||||||
|
@ -1668,7 +1678,7 @@ SNode* addRangeClause(SAstCreateContext* pCxt, SNode* pStmt, SNode* pRange) {
|
||||||
if (pRange && nodeType(pRange) == QUERY_NODE_RANGE_AROUND) {
|
if (pRange && nodeType(pRange) == QUERY_NODE_RANGE_AROUND) {
|
||||||
pSelect->pRangeAround = pRange;
|
pSelect->pRangeAround = pRange;
|
||||||
SRangeAroundNode* pAround = (SRangeAroundNode*)pRange;
|
SRangeAroundNode* pAround = (SRangeAroundNode*)pRange;
|
||||||
TSWAP(pSelect->pRange, pAround->pTimepoint);
|
TSWAP(pSelect->pRange, pAround->pRange);
|
||||||
} else {
|
} else {
|
||||||
pSelect->pRange = pRange;
|
pSelect->pRange = pRange;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2572,7 +2572,7 @@ static int32_t translateInterpFunc(STranslateContext* pCxt, SFunctionNode* pFunc
|
||||||
if (!fmIsInterpFunc(pFunc->funcId)) {
|
if (!fmIsInterpFunc(pFunc->funcId)) {
|
||||||
return TSDB_CODE_SUCCESS;
|
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);
|
return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_NOT_ALLOWED_FUNC);
|
||||||
}
|
}
|
||||||
SSelectStmt* pSelect = (SSelectStmt*)pCxt->pCurrStmt;
|
SSelectStmt* pSelect = (SSelectStmt*)pCxt->pCurrStmt;
|
||||||
|
@ -6415,7 +6415,7 @@ static int32_t translateInterpAround(STranslateContext* pCxt, SSelectStmt* pSele
|
||||||
SRangeAroundNode* pAround = (SRangeAroundNode*)pSelect->pRangeAround;
|
SRangeAroundNode* pAround = (SRangeAroundNode*)pSelect->pRangeAround;
|
||||||
code = translateExpr(pCxt, &pAround->pInterval);
|
code = translateExpr(pCxt, &pAround->pInterval);
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
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;
|
SValueNode* pVal = (SValueNode*)pAround->pInterval;
|
||||||
if (pVal->datum.i == 0) {
|
if (pVal->datum.i == 0) {
|
||||||
return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_FILL_TIME_RANGE,
|
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");
|
"Missing RANGE clause, EVERY clause or FILL clause");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else if (!pSelect->pFill) {
|
||||||
if (pSelect->pEvery) {
|
return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_INTERP_CLAUSE, "Missing FILL clause");
|
||||||
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");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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(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(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 _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;
|
||||||
|
|
||||||
|
|
|
@ -71,8 +71,27 @@ class TDTestCase(TBase):
|
||||||
|
|
||||||
tdCom.compare_testcase_result(self.sqlFile, self.ansFile, testCase)
|
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):
|
def test_interp(self):
|
||||||
self.test_normal_query_new("interp")
|
self.test_normal_query_new("interp")
|
||||||
|
self.test_abnormal_query("interp")
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
tdLog.debug(f"start to excute {__file__}")
|
tdLog.debug(f"start to excute {__file__}")
|
||||||
|
|
Loading…
Reference in New Issue