Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 10 additions & 17 deletions Sources/SQLiteData/CloudKit/CloudKitSharing.swift
Original file line number Diff line number Diff line change
Expand Up @@ -118,14 +118,14 @@
)
}
let recordName = record.recordName
let metadata =
let lastKnownServerRecord =
try await metadatabase.read { db in
try SyncMetadata
.where { $0.recordName.eq(recordName) }
.select { ($0.recordType, $0.recordName, $0.lastKnownServerRecord) }
.select(\._lastKnownServerRecordAllFields)
.fetchOne(db)
} ?? nil
guard let (recordType, recordName, lastKnownServerRecord) = metadata
guard let lastKnownServerRecord
else {
throw SharingError(
recordTableName: T.tableName,
Expand All @@ -137,18 +137,11 @@
)
}

let rootRecord =
lastKnownServerRecord
?? CKRecord(
recordType: recordType,
recordID: CKRecord.ID(recordName: recordName, zoneID: defaultZone.zoneID)
)

var existingShare: CKShare? {
get async throws {
let share = try await metadatabase.read { db in
try SyncMetadata
.find(rootRecord.recordID)
.find(lastKnownServerRecord.recordID)
.select(\.share)
.fetchOne(db) ?? nil
}
Expand All @@ -157,7 +150,7 @@
return nil
}
do {
return try await container.database(for: rootRecord.recordID)
return try await container.database(for: lastKnownServerRecord.recordID)
.record(for: shareRecordID) as? CKShare
} catch let error as CKError where error.code == .unknownItem {
return nil
Expand All @@ -168,16 +161,16 @@
let sharedRecord =
try await existingShare
?? CKShare(
rootRecord: rootRecord,
rootRecord: lastKnownServerRecord,
shareID: CKRecord.ID(
recordName: "share-\(recordName)",
zoneID: rootRecord.recordID.zoneID
zoneID: lastKnownServerRecord.recordID.zoneID
)
)

configure(sharedRecord)
let (saveResults, _) = try await container.privateCloudDatabase.modifyRecords(
saving: [sharedRecord, rootRecord],
saving: [sharedRecord, lastKnownServerRecord],
deleting: []
)

Expand All @@ -188,9 +181,9 @@
.first
let savedRootRecord = try saveResults.values.compactMap { result in
let record = try result.get()
return record.recordID == rootRecord.recordID ? record : nil
return record.recordID == lastKnownServerRecord.recordID ? record : nil
}
.first
.first
guard let savedShare, let savedRootRecord
else {
throw SharingError(
Expand Down
6 changes: 0 additions & 6 deletions Sources/SQLiteData/CloudKit/SyncEngine.swift
Original file line number Diff line number Diff line change
Expand Up @@ -321,12 +321,6 @@
: URL(filePath: metadatabase.path).lastPathComponent
let attachedMetadatabaseName =
URL(string: attachedMetadatabasePath)?.lastPathComponent ?? ""

try URL.metadatabase(
databasePath: attachedMetadatabasePath,
containerIdentifier: self.container.containerIdentifier
)
.lastPathComponent
if metadatabaseName != attachedMetadatabaseName {
throw SchemaError(
reason: .metadatabaseMismatch(
Expand Down
2 changes: 1 addition & 1 deletion Tests/SQLiteDataTests/CloudKitTests/MetadataTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -551,7 +551,7 @@
try await syncEngine.processPendingRecordZoneChanges(scope: .private)

assertQuery(
RemindersList.join(SyncMetadata.all) { $0.hasMetadata(in: $1) },
RemindersList.join(SyncMetadata.all) { $0.syncMetadataID.eq($1.id) },
database: userDatabase.database
) {
"""
Expand Down
41 changes: 27 additions & 14 deletions Tests/SQLiteDataTests/CloudKitTests/SharingTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -612,16 +612,19 @@

let _ = try await syncEngine.share(record: remindersList, configure: { _ in })

assertQuery(SyncMetadata.select(\.share), database: syncEngine.metadatabase) {
assertQuery(
SyncMetadata.select { ($0.share, $0.userModificationTime) },
database: syncEngine.metadatabase
) {
"""
┌────────────────────────────────────────────────────────────────────────┐
│ CKRecord( │
│ recordID: CKRecord.ID(share-1:remindersLists/zone/__defaultOwner__), │
│ recordType: "cloudkit.share", │
│ parent: nil, │
│ share: nil │
│ ) │
└────────────────────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────────────────────┬───
│ CKRecord( │ 0 │
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Previously this test would have snapshot -1 for the timestamp.

│ recordID: CKRecord.ID(share-1:remindersLists/zone/__defaultOwner__), │
│ recordType: "cloudkit.share", │
│ parent: nil, │
│ share: nil │
│ ) │
└────────────────────────────────────────────────────────────────────────┴───
"""
}

Expand All @@ -641,7 +644,9 @@
recordID: CKRecord.ID(1:remindersLists/zone/__defaultOwner__),
recordType: "remindersLists",
parent: nil,
share: CKReference(recordID: CKRecord.ID(share-1:remindersLists/zone/__defaultOwner__))
share: CKReference(recordID: CKRecord.ID(share-1:remindersLists/zone/__defaultOwner__)),
id: 1,
title: "Personal"
)
]
),
Expand Down Expand Up @@ -700,7 +705,9 @@
recordID: CKRecord.ID(1:remindersLists/zone/__defaultOwner__),
recordType: "remindersLists",
parent: nil,
share: CKReference(recordID: CKRecord.ID(share-1:remindersLists/zone/__defaultOwner__))
share: CKReference(recordID: CKRecord.ID(share-1:remindersLists/zone/__defaultOwner__)),
id: 1,
title: "Personal"
)
]
),
Expand Down Expand Up @@ -763,7 +770,9 @@
recordID: CKRecord.ID(1:remindersLists/zone/__defaultOwner__),
recordType: "remindersLists",
parent: nil,
share: CKReference(recordID: CKRecord.ID(share-1:remindersLists/zone/__defaultOwner__))
share: CKReference(recordID: CKRecord.ID(share-1:remindersLists/zone/__defaultOwner__)),
id: 1,
title: "Personal"
)
]
),
Expand Down Expand Up @@ -793,7 +802,9 @@
recordID: CKRecord.ID(1:remindersLists/zone/__defaultOwner__),
recordType: "remindersLists",
parent: nil,
share: CKReference(recordID: CKRecord.ID(share-1:remindersLists/zone/__defaultOwner__))
share: CKReference(recordID: CKRecord.ID(share-1:remindersLists/zone/__defaultOwner__)),
id: 1,
title: "Personal"
)
]
),
Expand Down Expand Up @@ -2787,7 +2798,9 @@
recordID: CKRecord.ID(1:remindersLists/zone/__defaultOwner__),
recordType: "remindersLists",
parent: nil,
share: CKReference(recordID: CKRecord.ID(share-1:remindersLists/zone/__defaultOwner__))
share: CKReference(recordID: CKRecord.ID(share-1:remindersLists/zone/__defaultOwner__)),
id: 1,
title: "Personal"
)
]
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -452,7 +452,9 @@
recordID: CKRecord.ID(1:remindersLists/zone/__defaultOwner__),
recordType: "remindersLists",
parent: nil,
share: CKReference(recordID: CKRecord.ID(share-1:remindersLists/zone/__defaultOwner__))
share: CKReference(recordID: CKRecord.ID(share-1:remindersLists/zone/__defaultOwner__)),
id: 1,
title: "Personal"
)
]
),
Expand Down