fix: calander interval and sliding issue
This commit is contained in:
parent
9b81f536a1
commit
5e2c5b8894
|
@ -5401,7 +5401,7 @@ static int32_t translateFill(STranslateContext* pCxt, SSelectStmt* pSelect, SInt
|
|||
return checkFill(pCxt, (SFillNode*)pInterval->pFill, (SValueNode*)pInterval->pInterval, false);
|
||||
}
|
||||
|
||||
static int32_t getMonthsFromTimeVal(int64_t val, int32_t fromPrecision, char unit, int64_t* pMonth) {
|
||||
static int32_t getMonthsFromTimeVal(int64_t val, int32_t fromPrecision, char unit, double* pMonth) {
|
||||
int64_t days = -1;
|
||||
int32_t code = convertTimeFromPrecisionToUnit(val, fromPrecision, 'd', &days);
|
||||
if (TSDB_CODE_SUCCESS != code) {
|
||||
|
@ -5416,7 +5416,7 @@ static int32_t getMonthsFromTimeVal(int64_t val, int32_t fromPrecision, char uni
|
|||
case 'h':
|
||||
case 'd':
|
||||
case 'w':
|
||||
*pMonth = days / 28;
|
||||
*pMonth = days / 28.0;
|
||||
return code;
|
||||
case 'n':
|
||||
*pMonth = val;
|
||||
|
@ -5499,7 +5499,7 @@ static int32_t checkIntervalWindow(STranslateContext* pCxt, SIntervalWindowNode*
|
|||
return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INTER_OFFSET_TOO_BIG);
|
||||
}
|
||||
if (!fixed) {
|
||||
int64_t offsetMonth = 0, intervalMonth = 0;
|
||||
double offsetMonth = 0, intervalMonth = 0;
|
||||
int32_t code = getMonthsFromTimeVal(pOffset->datum.i, precision, pOffset->unit, &offsetMonth);
|
||||
if (TSDB_CODE_SUCCESS != code) {
|
||||
return code;
|
||||
|
@ -5530,7 +5530,21 @@ static int32_t checkIntervalWindow(STranslateContext* pCxt, SIntervalWindowNode*
|
|||
(pInter->datum.i / pSliding->datum.i > INTERVAL_SLIDING_FACTOR)) {
|
||||
return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INTER_SLIDING_TOO_SMALL);
|
||||
}
|
||||
if (pSliding->datum.i > pInter->datum.i) {
|
||||
if (valInter) {
|
||||
double slidingMonth = 0, intervalMonth = 0;
|
||||
int32_t code = getMonthsFromTimeVal(pSliding->datum.i, precision, pSliding->unit, &slidingMonth);
|
||||
if (TSDB_CODE_SUCCESS != code) {
|
||||
return code;
|
||||
}
|
||||
code = getMonthsFromTimeVal(pInter->datum.i, precision, pInter->unit, &intervalMonth);
|
||||
if (TSDB_CODE_SUCCESS != code) {
|
||||
return code;
|
||||
}
|
||||
if (slidingMonth > intervalMonth) {
|
||||
return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INTER_SLIDING_TOO_BIG);
|
||||
}
|
||||
}
|
||||
if (!valInter && pSliding->datum.i > pInter->datum.i) {
|
||||
return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INTER_SLIDING_TOO_BIG);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -276,6 +276,10 @@ sql insert into t6 values ("2024-03-01 14:34:07.051", 66);
|
|||
|
||||
sleep 300
|
||||
|
||||
sql select _wstart, count(*) from stb interval(1n) sliding(1d);
|
||||
sql select _wstart, count(*) from stb interval(1n) sliding(28d);
|
||||
sql_error select _wstart, count(*) from stb interval(1n) sliding(29d);
|
||||
|
||||
sql select _wstart, count(*) from (select * from stb partition by tbname) interval(2s);
|
||||
|
||||
print $data00,$data01
|
||||
|
|
Loading…
Reference in New Issue