Part of objectstack-ai/cloud#1005(随 #4645 驱动迁移移交本仓;完整分析与维护者 2026-08-03 决策记录在该单正文与评论,链接为准)。
现状(cloud#1005 实测)
SqlDriver.backfillCanonicalDatetimes 是 Knex 路径,remote 模式永不执行 → canonicalDatetimeFields / canonicalTimeFields 在 remote 恒空 → needsLegacyDatetimeRepair 恒 true,每次对 Field.datetime / Field.time 的 filter 都编译成修复表达式 —— 正确但不可索引,且 local 跑完 backfill 能退回 col >= ?,remote 没有出口,代价永久(后果 A)。
RemoteTransport 的 DDL 把时间列声明为 TEXT;数字 epoch 经 TEXT affinity 落成 '1753660800000.0' 一类文本,共享修复表达式 typeof(col) in ('integer','real') 一支永不命中、strftime 又解析不了 → 这一群 legacy 行在 remote 任何 filter 都匹配不到,而 local 的 INTEGER 孪生群体可修(后果 B)。
裁定(维护者 2026-08-03,原文见 cloud#1005 评论)
- 方案 1 派发:走
@libsql/client 的 remote backfill —— 大表分批、失败可恢复、成功后标记 canonical;解除后果 A,并一并处理后果 B 的可解部分。
- 方案 2(DDL 亲和性对齐)以 staging 数字 epoch 存量探针结果再议;探针需 staging 访问,归维护者/运维,不阻塞方案 1。
关联
ADR-0053 storage-form 轴(#4191);cloud#1003(D-B3:正确性不以 backfill 跑过为前提,该姿态保持不变 —— backfill 是性能出口,不是正确性前提)。
Generated by Claude Code
Part of objectstack-ai/cloud#1005(随 #4645 驱动迁移移交本仓;完整分析与维护者 2026-08-03 决策记录在该单正文与评论,链接为准)。
现状(cloud#1005 实测)
SqlDriver.backfillCanonicalDatetimes是 Knex 路径,remote 模式永不执行 →canonicalDatetimeFields/canonicalTimeFields在 remote 恒空 →needsLegacyDatetimeRepair恒 true,每次对Field.datetime/Field.time的 filter 都编译成修复表达式 —— 正确但不可索引,且 local 跑完 backfill 能退回col >= ?,remote 没有出口,代价永久(后果 A)。RemoteTransport的 DDL 把时间列声明为 TEXT;数字 epoch 经 TEXT affinity 落成'1753660800000.0'一类文本,共享修复表达式typeof(col) in ('integer','real')一支永不命中、strftime又解析不了 → 这一群 legacy 行在 remote 任何 filter 都匹配不到,而 local 的 INTEGER 孪生群体可修(后果 B)。裁定(维护者 2026-08-03,原文见 cloud#1005 评论)
@libsql/client的 remote backfill —— 大表分批、失败可恢复、成功后标记 canonical;解除后果 A,并一并处理后果 B 的可解部分。关联
ADR-0053 storage-form 轴(#4191);cloud#1003(D-B3:正确性不以 backfill 跑过为前提,该姿态保持不变 —— backfill 是性能出口,不是正确性前提)。
Generated by Claude Code