Skip to content

driver-memory / driver-mongodb:裸日期 $lte 上界在 datetime 值上同样丢当天数据(#3777 的非 SQL 驱动对齐) #4042

Description

@os-zhuang

#3777 / PR #4041 把「裸 YYYY-MM-DD 上界 = 含当天整天」的操作符敏感翻译落在了 SQL 驱动的比较发射点(SqlDriver.calendarDayUpperBoundRewriteSqliteWasmDriver 继承)与 analytics 策略层。非 SQL 驱动未对齐,同一 dashboard 换驱动语义漂移:

driver-memory(已核实代码路径)

memory-matcher.ts$lte 是裸 JS 比较:

case'$lte':
if(!(value<=target))returnfalse;

存储值为 Date 或 ISO 字符串('2026-07-28T09:15:00.000Z')、target 为 '2026-07-28' 时,字符串序/coercion 都把当天 00:00 之后的值排除 —— 与 #3777 完全同构。memory-analytics.tsdateRange 归一成 {$gte: v[0], $lte: v[1]}(约 L765/L864)后走同一匹配器,所以 窗口路径同样命中$between(L126-129)同理。

driver-mongodb(推断,需验证)

$lte 直译给 Mongo。BSON Date 字段 vs 字符串 '2026-07-28' 是跨类型比较(BSON 类型序),行为更糟:可能整个窗口都不匹配而非只丢当天。需要按 #3777 的行结果探针实测。

建议落点

与 PR #4041 相同的规则与原语,不要新造判定:

验收

sql-driver-calendar-day-upper-bound.test.ts 的行结果探针(issue #3777 复现原样 + $gte/$gt/$lt 不变性 + 完整 ISO 不放宽)在两个驱动上各钉一份 —— 这也是 ADR-0053 D-A3 矩阵 driver 轴的两个格子(D-D2 已把 bound-semantics 轴写进 ADR)。

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions