Skip to content

D-A3 的 driver 轴只补到了 temporal 矩阵:pagination / filter-logic 两条共享矩阵的 driver-sql 消费者仍钉死 SQLite #4714

Description

@os-zhuang

#4245(PR #4713)收尾时发现,未在该 PR 内修——同一形状,但属于另外两条共享矩阵,按 Prime Directive #10 单开记录。

现状(已逐条核对)

#4245sql-driver-temporal-conformance.test.ts 按 driver 轴参数化了,并留下了可复用的 packages/plugins/driver-sql/src/live-dialect-matrix.testkit.tsDIALECT_CELLS + 服务器时区探测 + 三方错开守卫 + OS_EXPECT_LIVE_DIALECT_MATRIX)。但 driver-sql 还消费着另外两条 @objectstack/spec/data 的共享矩阵,两条都仍然只跑 SQLite:

文件 共享矩阵 硬编码
packages/plugins/driver-sql/src/sql-driver-pagination-conformance.test.ts PAGINATION_CASES / PAGINATION_UNORDERED_CASES client: 'better-sqlite3'(两个 describe)
packages/plugins/driver-sql/src/sql-driver-or-filter.test.ts FILTER_LOGIC_CASES client: 'better-sqlite3'(describe 名字就叫 filter logic conformance (SQLite)

为什么 pagination 那条尤其值得补

它的头注自己就说清了 SQLite 上这半边证明不了什么:

SQLite over a twelve-row table hands back both ties and wholly unordered rows in rowid order every time, so the partition check passes with or without the fix. … on SQL it would pass the day someone deletes the feature.

也就是说:分页的性质断言(页与页构成结果集的一个划分)在 SQLite 上是恒真的,文件靠第二半(断言真正到达数据库的 ORDER BY 子句)兜底。而在真 PG / MySQL 上,无 tiebreaker 的分页重排——性质断言在那里才第一次有牙。这与 objectui#3106 / #4363 的起因是同一件事。

filter-logic 那条则是 $or 编译(#3774applyFilterConditionlogicalOp='or' 传进分支导致结果集被放大)——方言之间 where 分组与 NULL 语义并不完全一致,PG / MySQL 上跑一遍是有信号的。

建议形状

复用 #4245 留下的 testkit,逐个消费者改成 for (const cell of DIALECT_CELLS),live cell 沿用同一套非空转守卫(缺 URL → 具名 skip;OS_EXPECT_LIVE_DIALECT_MATRIX=1 → 红)。CI 的 Temporal Conformance (live PG + MySQL) job 已经在跑整包 pnpm --filter @objectstack/driver-sql test,所以不需要新 job;表名沿用 issue 前缀避免与并行套件抢同一张表。

验收

同一批 PAGINATION_CASES / FILTER_LOGIC_CASES 在 SQLite / Postgres / MySQL 上返回完全相同的结果,任何一格不同即该方言的分页排序或逻辑组合子编译与共识有偏差。注意:这一格打开后 PG/MySQL 很可能真的红(分页在真服务器上会重排),那是发现不是失败——按本条验收,交付的是「格子存在且会红」。

关联

#4245 / PR #4713(driver 轴 + server-timezone 轴,temporal 矩阵)、#4081(D-A3 本体)、#4363、objectui#3106、#3774;ADR-0053 D-A3。

Activity

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions