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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions