From d58f493100b62a8a07fb88dbbe8b06aa7675f5c5 Mon Sep 17 00:00:00 2001 From: Stephen Celis Date: Wed, 3 Sep 2025 13:50:44 -0700 Subject: [PATCH] Fetch pending record zone changes through metadatabase --- .../SharingGRDBCore/CloudKit/SyncEngine.swift | 2 +- .../Internal/UserDatabase.swift | 4 +-- .../UnattachedSyncEngineTests.swift | 25 +++++++++++++++++++ 3 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 Tests/SharingGRDBTests/CloudKitTests/UnattachedSyncEngineTests.swift diff --git a/Sources/SharingGRDBCore/CloudKit/SyncEngine.swift b/Sources/SharingGRDBCore/CloudKit/SyncEngine.swift index f78e26dc..047a5cce 100644 --- a/Sources/SharingGRDBCore/CloudKit/SyncEngine.swift +++ b/Sources/SharingGRDBCore/CloudKit/SyncEngine.swift @@ -339,7 +339,7 @@ previousRecordTypeByTableName: [String: RecordType], currentRecordTypeByTableName: [String: RecordType] ) async throws { - let pendingRecordZoneChanges = try await userDatabase.read { db in + let pendingRecordZoneChanges = try await metadatabase.read { db in try PendingRecordZoneChange .select(\.pendingRecordZoneChange) .fetchAll(db) diff --git a/Sources/SharingGRDBCore/Internal/UserDatabase.swift b/Sources/SharingGRDBCore/Internal/UserDatabase.swift index 95299501..3fd2e24f 100644 --- a/Sources/SharingGRDBCore/Internal/UserDatabase.swift +++ b/Sources/SharingGRDBCore/Internal/UserDatabase.swift @@ -31,9 +31,7 @@ package struct UserDatabase { _ updates: @Sendable (Database) throws -> T ) async throws -> T { try await database.read { db in - try SyncEngine.$_isSynchronizingChanges.withValue(true) { - try updates(db) - } + try updates(db) } } diff --git a/Tests/SharingGRDBTests/CloudKitTests/UnattachedSyncEngineTests.swift b/Tests/SharingGRDBTests/CloudKitTests/UnattachedSyncEngineTests.swift new file mode 100644 index 00000000..ae726da1 --- /dev/null +++ b/Tests/SharingGRDBTests/CloudKitTests/UnattachedSyncEngineTests.swift @@ -0,0 +1,25 @@ +import CloudKit +import CustomDump +import InlineSnapshotTesting +import SharingGRDB +import SnapshotTestingCustomDump +import Testing + +extension BaseCloudKitTests { + @MainActor + final class UnattachedSyncEngineTests: @unchecked Sendable { + @available(iOS 17, macOS 14, tvOS 17, watchOS 10, *) + @Test func start() async throws { + let database = try DatabasePool(path: "\(NSTemporaryDirectory())\(UUID())") + _ = try await SyncEngine( + container: MockCloudContainer( + containerIdentifier: "iCloud.co.pointfree.Testing", + privateCloudDatabase: MockCloudDatabase(databaseScope: .private), + sharedCloudDatabase: MockCloudDatabase(databaseScope: .shared) + ), + userDatabase: UserDatabase(database: database), + tables: [] + ) + } + } +}