matrixorigin / matrixorigin/matrixone

[Bug]: UNIX_TIMESTAMP mishandles explicit zero fractional seconds and pre-epoch values

Open
#28,143 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`,`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

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.