Skip to content

driver-sql:两类无意义比较对象仍编译成「静默空谓词」—— $in/$nin 的非 $field 对象成员,与 LIKE 族的对象比较值(String 成 [object Object]) #5234

Description

@xuyushun441-sys

#5041(PR #5223)实施过程中的范围外发现,只记录不修、不指派。发现者(os-dev)已实测,证据基础同 PR #5223 的探针方法。

两个形状

  1. $in / $nin 列表里的非 $field 对象成员:{ status: { $in: ['a', { foo: 1 }] } } —— 编译通过、执行、静默零行(该成员绑定为无法命中的值)。PR fix(driver-sql): $field 跨字段比较按 ADR-0112 响亮拒绝,不再抛裸 TypeError (#5041) #5223 已拦下列表成员是 {$field: ...} 的情形(按成员序号点名拒绝),但其它对象成员仍走旧路。
  2. LIKE 族($contains/$startsWith/$endsWith…)遇对象比较值:被 String()'[object Object]' 参与匹配 —— 语义上永假,静默零行

为什么当时没有一并修(记录 dev 的边界判断,供接手者参考)

与既有账的关系

同属 #3948 / #4209 点名的「静默错误答案」类;修法大概率是把 PR #5223 在三个比较发射器上装的形状守卫拓宽到这两类(同一收口点、同一 INVALID_FILTER 信封),但需要先测量 $in 数组成员与 LIKE 比较值的合法形状全集,避免误伤。

Refs:#5041、PR #5223(探针与发射器清单)、#5222($field 的 SQL 实现,v18)、#3948#4209

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