matrixorigin / matrixorigin/matrixone

[Bug]: DATE_ADD and TIMESTAMPADD MICROSECOND overflow produce year 10000 or zero dates

Open
#28,142 3 comments 0 reactions 1 assignee Claimed by @jiangxinmeng1 View on GitHub
kind/bug needs-triage
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.