1. fix interval query with month interval day slidng returning wrong window
2. fix error msg for creating tsma
This commit is contained in:
parent
d6b3b3b49f
commit
d1ed3b3abb
|
@ -815,6 +815,12 @@ int64_t taosTimeTruncate(int64_t ts, const SInterval* pInterval) {
|
|||
if (IS_CALENDAR_TIME_DURATION(pInterval->intervalUnit)) {
|
||||
int64_t news = (ts / pInterval->sliding) * pInterval->sliding;
|
||||
ASSERT(news <= ts);
|
||||
if (pInterval->slidingUnit == 'd' || pInterval->slidingUnit == 'w') {
|
||||
#if defined(WINDOWS) && _MSC_VER >= 1900
|
||||
int64_t timezone = _timezone;
|
||||
#endif
|
||||
news += (int64_t)(timezone * TSDB_TICK_PER_SECOND(precision));
|
||||
}
|
||||
|
||||
if (news <= ts) {
|
||||
int64_t prev = news;
|
||||
|
|
|
@ -11864,7 +11864,7 @@ static int32_t buildCreateTSMAReq(STranslateContext* pCxt, SCreateTSMAStmt* pStm
|
|||
if (checkRecursiveTsmaInterval(pRecursiveTsma->interval, pRecursiveTsma->unit, pInterval->datum.i,
|
||||
pInterval->unit, pDbInfo.precision, true)) {
|
||||
} else {
|
||||
code = TSDB_CODE_TSMA_INVALID_PARA;
|
||||
code = TSDB_CODE_TSMA_INVALID_INTERVAL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -753,7 +753,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_TSMA_INVALID_STAT, "Invalid tsma state"
|
|||
TAOS_DEFINE_ERROR(TSDB_CODE_TSMA_INVALID_PTR, "Invalid tsma pointer")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_TSMA_INVALID_PARA, "Invalid tsma parameters")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_TSMA_INVALID_TB, "Invalid table to create tsma, only stable or normal table allowed")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_TSMA_INVALID_INTERVAL, "Invalid tsma interval, 1m ~ 1h is allowed")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_TSMA_INVALID_INTERVAL, "Invalid tsma interval, 1m ~ 1y is allowed")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_TSMA_INVALID_FUNC_PARAM, "Invalid tsma func param, only one non-tag column allowed")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_TSMA_UNSUPPORTED_FUNC, "Tsma func not supported")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_TSMA_MUST_BE_DROPPED, "Tsma must be dropped first")
|
||||
|
|
|
@ -1476,18 +1476,18 @@ class TDTestCase:
|
|||
tdSql.error(sql, -2147473920) # syntax error
|
||||
|
||||
sql = 'create recursive tsma tsma2 on test.tsma1 interval(1m)'
|
||||
tdSql.error(sql, -2147471099) # invalid tsma parameter
|
||||
tdSql.error(sql, -2147471097) # invalid tsma interval
|
||||
|
||||
sql = 'create recursive tsma tsma2 on test.tsma1 interval(7m)'
|
||||
tdSql.error(sql, -2147471099) # invalid tsma parameter
|
||||
tdSql.error(sql, -2147471097) # invalid tsma interval
|
||||
|
||||
sql = 'create recursive tsma tsma2 on test.tsma1 interval(11m)'
|
||||
tdSql.error(sql, -2147471099) # invalid tsma parameter
|
||||
tdSql.error(sql, -2147471097) # invalid tsma interval
|
||||
|
||||
self.create_recursive_tsma('tsma1', 'tsma2', 'test', '20m', 'meters')
|
||||
|
||||
sql = 'create recursive tsma tsma3 on test.tsma2 interval(30m)'
|
||||
tdSql.error(sql, -2147471099) # invalid tsma parameter
|
||||
tdSql.error(sql, -2147471097) # invalid tsma interval
|
||||
|
||||
self.create_recursive_tsma('tsma2', 'tsma3', 'test', '40m', 'meters')
|
||||
|
||||
|
|
|
@ -842,7 +842,7 @@ class TDTestCase:
|
|||
]
|
||||
tdSql.execute('use db')
|
||||
for (i, ri, ret) in examples:
|
||||
self.test_create_recursive_tsma_interval(db, tb, func, i, ri, ret, -2147471099)
|
||||
self.test_create_recursive_tsma_interval(db, tb, func, i, ri, ret, -2147471097)
|
||||
|
||||
self.create_tsma('tsma1', db, tb, func, '1h')
|
||||
self.create_recursive_tsma('tsma1', 'tsma2', db, '1n', tb, func)
|
||||
|
@ -898,7 +898,17 @@ class TDTestCase:
|
|||
.get_qc())
|
||||
|
||||
self.check(ctxs)
|
||||
tdSql.execute('drop database db')
|
||||
|
||||
sql = 'select count(*), _wstart, _wend from db.meters interval(1n) sliding(1d) limit 1'
|
||||
tdSql.query(sql)
|
||||
first_win: datetime = tdSql.queryResult[0][1]
|
||||
if first_win.hour != 0:
|
||||
tdLog.exit("day sliding should always aligned with current timezone")
|
||||
sql = 'select /*+skip_tsma()*/count(*), _wstart, _wend from db.meters interval(1n) sliding(1d) limit 1'
|
||||
tdSql.query(sql)
|
||||
first_win: datetime = tdSql.queryResult[0][1]
|
||||
if first_win.hour != 0:
|
||||
tdLog.exit("day sliding should always aligned with current timezone")
|
||||
|
||||
def stop(self):
|
||||
tdSql.close()
|
||||
|
|
Loading…
Reference in New Issue