Skip to content

drivers(turso): RemoteTransport 条件层的 $-算子键被当列名编译成静默空集 —— SqlDriver 已按 #5348 拒收,remote 是唯一剩余面(cloud#1077 移交) #5769

Description

@claude

Part of objectstack-ai/cloud#1077(原单在 cloud;随 #4645 Phase A/B 驱动迁移,driver-turso 已迁回本仓,落点现为 packages/drivers/driver-turso/src/remote-transport.ts。cloud 侧已无该代码面,原单关闭移交,完整实测证据见其正文与维护者两条评论)。

缺陷

buildWhereSQL 条件层只识别 $and / $or / $not;其余任何 $ 开头的键落字段路径,双引号标识符被 SQLite 按向后兼容规则当字符串字面量静默空结果集(维护者实测更正:不是 no such column;where {"$eq":"won"}SELECT … WHERE "$eq" = ?RESOLVED [])。写路径(deleteMany / updateMany)上同一个编不出的条件意味着谓词恒假或恒真,取决于落侧 —— 修时一并核并加断言。

上下文(全部已就位,本单严格更简单)

  • framework 侧同款缺口已修:objectstack#5348 裁定拒收,PR fix(driver-sql,driver-memory,driver-mongodb): 越界过滤输入在门口拒收,而不是每个后端各答一个 (#5347, #5348) #5368SqlDriver校验遍历(reduceFilterKey,非发射器 —— 发射器会被布尔单位元整段跳过)加闸:节点位置 $ 开头且非逻辑算子 → INVALID_FILTER / 400。SqliteWasmDriver / Turso local 继承。RemoteTransport 是这条规则唯一剩余面,且方向是反的:local 严、remote 松。
  • 信封半边已随迁:remote-transport.ts:235invalidFilterError()(cloud#1117 落地,INVALID_FILTER/400,取自 @objectstack/spec StandardErrorCode)。新闸只需 return invalidFilterError(...);拒收表测试(remote-transport-comparand-refusal.test.ts 等)已随迁本仓,加行即可。
  • 消息分两种(cloud#1077 正文建议):是 FieldOperatorsSchema 认识的字段算子($eq/$gt/…)→ 指路「你可能想写 { 字段名: { 算子: 值 } }」;未知 $ 键 → 点名拒收。与 matchesFilterCondition 对条件层未知 $ 键的 fail-closed 姿态一致。
  • $nor / $elemMatch 今天只是被 CLI: add remote API commands for Data API and Metadata API #1058/fix(studio): use getRequestListener() with extractBody() for Vercel POST support #1066 的比较值守卫偶然拦下且信封不合规(code=undefined)—— 节点级闸落地后按本闸拒收。
  • 顺带(维护者点名同轮该看):remote-transport.ts:462Unsupported aggregate function 仍是裸 Error,不属过滤器拒收(更像 INVALID_QUERY 一类)—— 按 ADR-0112 标准目录选码同 PR 收尾,或在 PR 里明确说明不做及理由。

验收

条件层未知 $ 键在 find / deleteMany / updateMany 三路皆响亮 INVALID_FILTER(不再静默空集/全表写);新用例进已随迁的拒收表;若共享一致性表(FILTER_LOGIC_CASES 一族)已覆盖 remote 面,按共享一致性覆盖条款加轴而非另起独立文件。


Generated by Claude Code

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions