Skip to content

drivers: distinct 的第三参在 memory 与 sql 上语义不同 —— 把 sql 那面的写法交给 memory,静默返回未过滤全集(运行期实测) #6320

Description

@os-zhuang

#6212 的测量棒中带出(基线 d367f03d6)。不是类型冗余,是具体缺陷,故独立立单而非压在 #6212 的观察清单下。

事实

同名方法,第三参要的东西不一样:

驱动 签名 方法体怎么读
driver-memory/src/memory-driver.ts:612 distinct(object, field, query?: QueryInput) query.where(要 query 信封)
driver-sql/src/sql-driver.ts:3481 distinct(object, field, filters?: any) 直接 applyFilters(builder, filters)(要裸 filter)

两边的测试自己就是证据:memory-driver.test.ts:310{ object, where: {...} };sql-driver-advanced.test.ts:393sqlite-wasm-driver-advanced.test.ts:382{ status: 'completed' }

运行期实测(built driver-memory,三行:Laptop/Mouse 为 completed、Ghost 为 pending)

memory.distinct envelope {object,where}: ["Laptop","Mouse"]
memory.distinct bare filter  {status}  : ["Laptop","Mouse","Ghost"]
memory.distinct no filter              : ["Laptop","Mouse","Ghost"]
bare === unfiltered (SILENT PASS-THROUGH)? true

把 SQL 那一面的写法交给 memory:不报错、不告警,直接返回未过滤的全集。方向是放宽 —— 一个本意「按条件去重取值」的调用拿到了全部值。

为什么今天没炸

distinct非测试生产者为零(全仓实测),所以是休眠缺陷。但它与 #5234 刚更正过的那类同形:「静默错答案」在没有对抗性 fixture 时不会被任何测试看见。

处置线索(不代裁)

关联:#6212(测量棒出处)、#5234(同族「静默错答案」且严重度曾被低估)、#5499(冻结令)、#5181/#6075(签名收窄程序)。

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions