合并:重复地点不再反复判「备份新增」,到访的活动改按身份比
- DiffPlaces 的 byCoord/byName 改为多值索引 + take() 逐条认领未用项:真机一个坐标下会有 多条同名同坐标的地点(实测「柳州站」3 条),单槽位时同一坐标最多只配上 2 条,第 3 条 永远判「备份新增」⇒ 每次合并都再插一条重复地点、差异永远归不了零(实测 368→438→439)。 修完:地点新增 70→67、合并后再比对归零、再点合并直接「没有要写入的改动」。 - 到访的「活动」由按名称比改为按身份(ZUID_)比,两边都缺 UUID 才退回名称:16 个活动改名 曾把 355 条到访全变成同因冲突,且逐条选「用实机」只写回 activity_id(映射回同一个活动) 改不掉名字。loadStoredVisits 为此多 JOIN 一次 entity_raw 取 ZACTIVITY.ZUID_。 - 回归用例 4 条(重复地点一一配上、活动改名不算冲突、换活动仍要报、缺 UUID 退回名称)+ 「合并后地点差异归零」断言 3 处;两处改动都做过变异验证。 - 实测(09-28 备份并进 09-14 数据集):到访冲突 253→6,合并两次地点数 438→439 变为 435→435。
This commit is contained in:
@@ -124,11 +124,16 @@ func TestBackupMergeRestoresMissingVisits(t *testing.T) {
|
||||
t.Errorf("孤儿位移变多了:%d → %d", orphans0, orphans)
|
||||
}
|
||||
|
||||
// 幂等:再比一次应当完全一致
|
||||
// 幂等:再比一次应当完全一致(地点也一样——同名同坐标的重复地点必须一一配上,
|
||||
// 否则每次合并都会再插一条重复地点)
|
||||
page = previewBackup(t, f, f.src)
|
||||
if a, g, c := visitCounts(t, page); a != 0 || g != 0 || c != 0 {
|
||||
t.Fatalf("合并后再比对应当没有差异,实际 新增 %d / 仅站内有 %d / 冲突 %d", a, g, c)
|
||||
}
|
||||
if a, g, _ := overviewCounts(t, page, "地点"); a != 0 || g != 0 {
|
||||
t.Fatalf("合并后再比对,地点应当归零,实际 新增 %d / 仅站内有 %d"+
|
||||
"(重复地点会被反复当成「备份新增」→ 每合并一次多一条)", a, g)
|
||||
}
|
||||
}
|
||||
|
||||
// 「本地 + **后来新增的备份**」合并的真实形态:备份里的编号被 rond 全部重排过,
|
||||
@@ -209,6 +214,9 @@ func TestBackupMergeRenumberedBackupRestoresOnlyMissing(t *testing.T) {
|
||||
if a, g, c := visitCounts(t, page); a != 0 || g != 0 || c != 0 {
|
||||
t.Fatalf("合并后再比对应当没有差异,实际 新增 %d 仅站内有 %d 冲突 %d", a, g, c)
|
||||
}
|
||||
if a, g, _ := overviewCounts(t, page, "地点"); a != 0 || g != 0 {
|
||||
t.Fatalf("合并后地点差异也该归零,实际 新增 %d 仅站内有 %d", a, g)
|
||||
}
|
||||
}
|
||||
|
||||
// 冲突逐条选「用实机」就把备份的值写进去,选「用站内」就原样不动。
|
||||
|
||||
Reference in New Issue
Block a user