[td-14266] fix bug.
This commit is contained in:
parent
bdb5323fd9
commit
fb94d2da92
|
@ -458,16 +458,21 @@ int64_t taosTimeAdd(int64_t t, int64_t duration, char unit, int32_t precision) {
|
||||||
if (duration == 0) {
|
if (duration == 0) {
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
if (unit == 'y') {
|
|
||||||
duration *= 12;
|
if (unit != 'n' && unit != 'y') {
|
||||||
} else if (unit != 'n') {
|
|
||||||
return t + duration;
|
return t + duration;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The following code handles the y/n time duration
|
||||||
|
int64_t numOfMonth = duration;
|
||||||
|
if (unit == 'y') {
|
||||||
|
numOfMonth *= 12;
|
||||||
|
}
|
||||||
|
|
||||||
struct tm tm;
|
struct tm tm;
|
||||||
time_t tt = (time_t)(t / TSDB_TICK_PER_SECOND(precision));
|
time_t tt = (time_t)(t / TSDB_TICK_PER_SECOND(precision));
|
||||||
taosLocalTime(&tt, &tm);
|
taosLocalTime(&tt, &tm);
|
||||||
int32_t mon = tm.tm_year * 12 + tm.tm_mon + (int32_t)duration;
|
int32_t mon = tm.tm_year * 12 + tm.tm_mon + (int32_t)numOfMonth;
|
||||||
tm.tm_year = mon / 12;
|
tm.tm_year = mon / 12;
|
||||||
tm.tm_mon = mon % 12;
|
tm.tm_mon = mon % 12;
|
||||||
|
|
||||||
|
@ -574,12 +579,23 @@ int64_t taosTimeTruncate(int64_t t, const SInterval* pInterval, int32_t precisio
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ASSERT(pInterval->offset >= 0);
|
||||||
|
|
||||||
if (pInterval->offset > 0) {
|
if (pInterval->offset > 0) {
|
||||||
start = taosTimeAdd(start, pInterval->offset, pInterval->offsetUnit, precision);
|
start = taosTimeAdd(start, pInterval->offset, pInterval->offsetUnit, precision);
|
||||||
if (start > t) {
|
if (start > t) {
|
||||||
start = taosTimeAdd(start, -pInterval->interval, pInterval->intervalUnit, precision);
|
start = taosTimeAdd(start, -pInterval->interval, pInterval->intervalUnit, precision);
|
||||||
|
} else {
|
||||||
|
// try to move current window to the left-hande-side, due to the offset effect.
|
||||||
|
int64_t end = start + pInterval->interval - 1;
|
||||||
|
ASSERT(end >= t);
|
||||||
|
end = taosTimeAdd(end, -pInterval->sliding, pInterval->slidingUnit, precision);
|
||||||
|
if (end >= t) {
|
||||||
|
start = taosTimeAdd(start, -pInterval->sliding, pInterval->slidingUnit, precision);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return start;
|
return start;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7576,7 +7576,7 @@ SOperatorInfo* createIntervalOperatorInfo(SOperatorInfo* downstream, SExprInfo*
|
||||||
}
|
}
|
||||||
|
|
||||||
pInfo->order = TSDB_ORDER_ASC;
|
pInfo->order = TSDB_ORDER_ASC;
|
||||||
pInfo->precision = TSDB_TIME_PRECISION_MICRO;
|
pInfo->precision = TSDB_TIME_PRECISION_MILLI;
|
||||||
pInfo->win = pTaskInfo->window;
|
pInfo->win = pTaskInfo->window;
|
||||||
pInfo->interval = *pInterval;
|
pInfo->interval = *pInterval;
|
||||||
|
|
||||||
|
|
|
@ -88,6 +88,7 @@ print ===> rows5: $data50 $data51 $data52 $data53 $data54
|
||||||
print ===> rows6: $data60 $data61 $data62 $data63 $data64
|
print ===> rows6: $data60 $data61 $data62 $data63 $data64
|
||||||
print ===> rows7: $data70 $data71 $data72 $data73 $data74
|
print ===> rows7: $data70 $data71 $data72 $data73 $data74
|
||||||
if $rows != 8 then
|
if $rows != 8 then
|
||||||
|
print expect 8, actual $rows
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data00 != 2 then
|
if $data00 != 2 then
|
||||||
|
|
Loading…
Reference in New Issue