2 Commits

Author SHA1 Message Date
Syngnat
bdd84db52c 🐛 fix(data-sync): 修复跨库同步静默失败与数据安全问题
- 聚合表级失败并保留已确认提交计数,避免任务误报成功

- 绑定分析上下文与实际同步模式,阻止陈旧或无效配置执行

- 加固全量覆盖及同端点分页写入,补充跨库与失败回归测试

Refs #846
2026-08-05 23:55:44 +08:00
Syngnat
01c3c2f9c9 🐛 fix(sync): 修复 SQL 结果集全量覆盖先清空目标表导致的数据不可恢复丢失
- 加自表守卫:源查询是任意 SQL、无法可靠判断是否引用目标表,故抽出 isSameSyncEndpoint
  做端点级比较,源与目标同端点时退回非分页路径(该路径先把源行读入内存再清空,语义安全)。
  分页叠加自表覆盖本质不可行:清空后的分页会读到空表,目标最终只剩第一页数据
- 改为先读首页、成功后才清空目标,与 tryApplyDirectImportInPages 保持一致。
  原顺序先 TRUNCATE 再首读,源查询一旦报错就留下被清空且无法恢复的目标表
  (TRUNCATE 在 MySQL 上是 DDL、隐式提交不可回滚),而函数还把读到 0 行当作同步成功
- isSamePhysicalSyncTable 改为复用 isSameSyncEndpoint,表名比较语义不变
- 补 4 项回归测试:端点比较、表名语义不变、自表退回且退回前未清空、先读后清顺序
2026-07-26 20:11:52 +08:00