Skip to content

Commit cf77b8f

Browse files
committed
Prevent eager saving of last-known server record on upsert
1 parent 71085a0 commit cf77b8f

1 file changed

Lines changed: 14 additions & 10 deletions

File tree

Sources/SQLiteData/CloudKit/SyncEngine.swift

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1919,26 +1919,30 @@
19191919
ownerName: serverRecord.recordID.zoneID.ownerName,
19201920
parentRecordPrimaryKey: serverRecord.parent?.recordID.recordPrimaryKey,
19211921
parentRecordType: serverRecord.parent?.recordID.tableName,
1922-
lastKnownServerRecord: serverRecord,
1923-
_lastKnownServerRecordAllFields: serverRecord,
1924-
share: nil,
1925-
userModificationTime: serverRecord.userModificationTime
1922+
userModificationTime: 0
19261923
)
19271924
} onConflict: {
19281925
($0.recordPrimaryKey, $0.recordType)
19291926
} doUpdate: {
1930-
if tablesByName[serverRecord.recordType] == nil {
1931-
$0.setLastKnownServerRecord(serverRecord)
1932-
} else {
1927+
if tablesByName.keys.contains(serverRecord.recordType) {
19331928
$0.zoneName = serverRecord.recordID.zoneID.zoneName
19341929
$0.ownerName = serverRecord.recordID.zoneID.ownerName
19351930
}
19361931
}
19371932
.execute(db)
19381933

1939-
guard
1940-
let metadata = try SyncMetadata.find(serverRecord.recordID).fetchOne(db),
1941-
let table = tablesByName[serverRecord.recordType]
1934+
// If the table isn't registered yet, store the server record for later replay when
1935+
// the table becomes known.
1936+
guard let table = tablesByName[serverRecord.recordType] else {
1937+
try SyncMetadata
1938+
.update { $0.setLastKnownServerRecord(serverRecord) }
1939+
.execute(db)
1940+
return
1941+
}
1942+
1943+
guard let metadata = try SyncMetadata
1944+
.find(serverRecord.recordID)
1945+
.fetchOne(db)
19421946
else {
19431947
return
19441948
}

0 commit comments

Comments
 (0)