matrixorigin / matrixorigin/matrixone
[Bug]: UNIX_TIMESTAMP mishandles explicit zero fractional seconds and pre-epoch values
- Dominant language
- Go
- Stars
- 1.9k
- Forks
- 311
- Avg merge
- 1d 3h
- Merged PRs (30d)
- 768
Description
## 现象
在 MatrixOne main `99ed717b769e261b842c2f17345bd65865fc1470`,`UNIX_TIMESTAMP()` 对带显式零小数部分的 Unix epoch 解析错误,并错误处理 epoch 之前的时间:
```sql
SELECT UNIX_TIMESTAMP('1970-01-01 00:00:00'); -- 0
SELECT UNIX_TIMESTAMP('1970-01-01 00:00:00.000000'); -- NULL(异常)
SELECT UNIX_TIMESTAMP('1969-12-31 23:59:59'); -- NULL(异常)
SELECT UNIX_TIMESTAMP('1969-12-31 23:59:59.500000'); -- 18446744073709.051616(异常)
```
同一函数对 `'1970-01-01 00:00:00.000001'` 返回 `0.000001`,说明问题与显式零 fractional seconds 和负 epoch 路径相关。
## 期望
按照 MySQL 的越界约定,epoch 起点及其等价的零小数表示、1970 年之前的时间都应返回数值 `0`(而不是 `NULL`);不应出现无符号回绕的大正数。
## 影响
时间序列边界、审计和往返转换会因输入格式添加 `.0` 或出现 1970 年之前时间而产生错误数值。
## 复现信息
- MatrixOne main: `99ed717b769e261b842c2f17345bd65865fc1470`
- 重复执行 3 次,结果一致
Contributor guide
Assessment
This issue has not been assessed yet.