matrixorigin / matrixorigin/matrixone
[Bug]: DATE_ADD and TIMESTAMPADD MICROSECOND overflow produce year 10000 or zero dates
- Dominant language
- Go
- Stars
- 1.9k
- Forks
- 311
- Avg merge
- 1d 3h
- Merged PRs (30d)
- 768
Description
## 现象
在 MatrixOne main `99ed717b769e261b842c2f17345bd65865fc1470`,日期加减使用 `MICROSECOND` 单位时没有执行边界校验,可能生成超出支持范围的年份:
```sql
SELECT DATE_ADD('9999-12-31 23:59:59.999999', INTERVAL 1 MICROSECOND);
-- 10000-01-01 00:00:00.000000
SELECT DATE_SUB('0001-01-01 00:00:00.000000', INTERVAL 1 MICROSECOND);
-- 0000-00-00 00:00:00.000000
SELECT TIMESTAMPADD(MICROSECOND, 1,
'9999-12-31 23:59:59.999999');
-- 10000-01-01 00:00:00
```
相同边界下,DAY/MONTH 以及 `TIMESTAMPADD(DAY,...)` 会返回 `NULL`,说明仅微秒路径缺少统一的范围保护。
## 期望
当结果超出 `DATETIME/TIMESTAMP` 支持范围时,应与其他时间单位一致返回 `NULL`(或按 SQL mode 产生标准错误/警告),不能返回年份 10000 或零日期伪值。
## 影响
非法时间值可进入表达式、CTAS 或后续计算,造成下游解析、排序和持久化语义不一致。
## 复现信息
- MatrixOne main: `99ed717b769e261b842c2f17345bd65865fc1470`
- 每条语句重复执行 3 次,结果一致
Contributor guide
Assessment
This issue has not been assessed yet.