现象
升级 @objectstack/* 到 17.0.0-rc.0 后,客服仪表盘所有 widget 显示 0 / 暂无数据,而数据库中有 38 条工单(30 条未关闭,全部在近 30 天窗口内)。
复现
- 升级到 17.0.0-rc.0,SQLite(better-sqlite3)驱动,全新种子数据
- 打开客服仪表盘(dateRange: last_30_days,字段 created_date,类型 datetime)
- 所有基于 case_metrics 的 widget 返回空
widget 实际 SQL:WHERE is_closed = ? AND created_date >= ? AND created_date <= ?。列内容为 ISO 文本(如 2026-07-26T00:00:00.000Z)。同一查询手工验证:ISO 字符串参数返回 29 行,epoch 毫秒参数返回 0 行 —— 17.0 驱动把 datetime 比较参数转成了 epoch 毫秒,与磁盘上的 ISO 文本比较永假。
date 类型字段(如 close_date)不受影响(销售/高管仪表盘正常)。数据库是 17.0 自己新建的,属于写入端(ISO)/读取端(epoch)不一致(对应 spec 中 SqlDriver.temporalFilterValue 的行为)。
影响
所有 datetime 字段上的 dateRange / {30_days_ago} 类时间窗过滤。升级阻断。
详见分支 upgrade/objectstack-17 的 docs/upgrade-17/test-report.md §3 P1。
现象
升级 @objectstack/* 到 17.0.0-rc.0 后,客服仪表盘所有 widget 显示 0 / 暂无数据,而数据库中有 38 条工单(30 条未关闭,全部在近 30 天窗口内)。
复现
widget 实际 SQL:
WHERE is_closed = ? AND created_date >= ? AND created_date <= ?。列内容为 ISO 文本(如2026-07-26T00:00:00.000Z)。同一查询手工验证:ISO 字符串参数返回 29 行,epoch 毫秒参数返回 0 行 —— 17.0 驱动把 datetime 比较参数转成了 epoch 毫秒,与磁盘上的 ISO 文本比较永假。date类型字段(如 close_date)不受影响(销售/高管仪表盘正常)。数据库是 17.0 自己新建的,属于写入端(ISO)/读取端(epoch)不一致(对应 spec 中SqlDriver.temporalFilterValue的行为)。影响
所有 datetime 字段上的 dateRange /
{30_days_ago}类时间窗过滤。升级阻断。详见分支
upgrade/objectstack-17的 docs/upgrade-17/test-report.md §3 P1。