From 282bb5965ed0958642d7a16656d41d1cecf82247 Mon Sep 17 00:00:00 2001 From: Stephen Celis Date: Sun, 28 Dec 2025 12:25:37 -0800 Subject: [PATCH 1/3] Fix Xcode 16 builds We need to gate a CKError check behind a compiler branch. --- Sources/SQLiteData/CloudKit/SyncEngine.swift | 21 +++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/Sources/SQLiteData/CloudKit/SyncEngine.swift b/Sources/SQLiteData/CloudKit/SyncEngine.swift index f4b97a0b..f5aeb5f6 100644 --- a/Sources/SQLiteData/CloudKit/SyncEngine.swift +++ b/Sources/SQLiteData/CloudKit/SyncEngine.swift @@ -1735,16 +1735,19 @@ syncEngine.state.add(pendingRecordZoneChanges: [.deleteRecord(failedRecordID)]) break case .networkFailure, .networkUnavailable, .zoneBusy, .serviceUnavailable, - .notAuthenticated, .operationCancelled, .internalError, .partialFailure, - .badContainer, .requestRateLimited, .missingEntitlement, .invalidArguments, - .resultsTruncated, .assetFileNotFound, .assetFileModified, .incompatibleVersion, - .constraintViolation, .changeTokenExpired, .badDatabase, .quotaExceeded, - .limitExceeded, .userDeletedZone, .tooManyParticipants, .alreadyShared, - .managedAccountRestricted, .participantMayNeedVerification, .serverResponseLost, - .assetNotAvailable, .accountTemporarilyUnavailable, .permissionFailure, - .unknownItem, .serverRecordChanged, .serverRejectedRequest, .zoneNotFound, - .participantAlreadyInvited: + .notAuthenticated, .operationCancelled, .internalError, .partialFailure, + .badContainer, .requestRateLimited, .missingEntitlement, .invalidArguments, + .resultsTruncated, .assetFileNotFound, .assetFileModified, .incompatibleVersion, + .constraintViolation, .changeTokenExpired, .badDatabase, .quotaExceeded, + .limitExceeded, .userDeletedZone, .tooManyParticipants, .alreadyShared, + .managedAccountRestricted, .participantMayNeedVerification, .serverResponseLost, + .assetNotAvailable, .accountTemporarilyUnavailable, .permissionFailure, + .unknownItem, .serverRecordChanged, .serverRejectedRequest, .zoneNotFound: break + #if canImport(FoundationModels) + case .participantAlreadyInvited: + continue + #endif @unknown default: break } From f1feb1e35ba8b64ff074ceb4f8d8fb18312606c6 Mon Sep 17 00:00:00 2001 From: Stephen Celis Date: Sun, 28 Dec 2025 13:07:08 -0800 Subject: [PATCH 2/3] wip --- Sources/SQLiteData/CloudKit/SyncEngine.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/SQLiteData/CloudKit/SyncEngine.swift b/Sources/SQLiteData/CloudKit/SyncEngine.swift index f5aeb5f6..c9488697 100644 --- a/Sources/SQLiteData/CloudKit/SyncEngine.swift +++ b/Sources/SQLiteData/CloudKit/SyncEngine.swift @@ -1746,7 +1746,7 @@ break #if canImport(FoundationModels) case .participantAlreadyInvited: - continue + break #endif @unknown default: break From fef1d10b296b4b36455b50c19936da42bcedf1f7 Mon Sep 17 00:00:00 2001 From: Stephen Celis Date: Sun, 28 Dec 2025 13:07:12 -0800 Subject: [PATCH 3/3] format --- Examples/Reminders/RemindersListForm.swift | 2 +- Examples/Reminders/Schema.swift | 3 +-- Examples/Reminders/SearchReminders.swift | 9 +++++---- Examples/SyncUps/App.swift | 8 ++++---- .../SyncUps/Dependencies/SpeechClient.swift | 2 +- .../CloudKit/Internal/Triggers.swift | 11 +++++++--- .../Articles/AddingToGRDB.md | 6 +++--- .../Documentation.docc/Articles/CloudKit.md | 12 +++++------ .../Articles/ManuallyMigratingPrimaryKeys.md | 2 +- .../MigrationGuides/MigratingTo1.4.md | 4 ++-- .../Documentation.docc/SQLiteData.md | 10 +++++----- Sources/SQLiteData/Internal/FetchKey.swift | 14 ++++++------- .../StructuredQueries+GRDB/QueryCursor.swift | 20 +++++++++---------- .../CloudKitTests/AtomicTests.swift | 8 ++++++-- .../MockCloudDatabaseTests.swift | 10 +++++++--- .../CloudKitTests/SharingTests.swift | 16 +++++++++------ .../SyncEngineLifecycleTests.swift | 3 ++- .../PrimaryKeyMigrationTests.swift | 1 - 18 files changed, 79 insertions(+), 62 deletions(-) diff --git a/Examples/Reminders/RemindersListForm.swift b/Examples/Reminders/RemindersListForm.swift index 4989d665..98d4a022 100644 --- a/Examples/Reminders/RemindersListForm.swift +++ b/Examples/Reminders/RemindersListForm.swift @@ -79,7 +79,7 @@ struct RemindersListForm: View { await withErrorReporting { try await database.write { db in let remindersListID = - try RemindersList + try RemindersList .upsert { remindersList } .returning(\.id) .fetchOne(db) diff --git a/Examples/Reminders/Schema.swift b/Examples/Reminders/Schema.swift index 4be2e53d..55fe3a22 100644 --- a/Examples/Reminders/Schema.swift +++ b/Examples/Reminders/Schema.swift @@ -255,7 +255,7 @@ func appDatabase() throws -> any DatabaseWriter { ) .execute(db) } - + try migrator.migrate(database) try database.write { db in @@ -542,4 +542,3 @@ nonisolated private let logger = Logger(subsystem: "Reminders", category: "Datab } } #endif - diff --git a/Examples/Reminders/SearchReminders.swift b/Examples/Reminders/SearchReminders.swift index 3ec9522f..89d3f37b 100644 --- a/Examples/Reminders/SearchReminders.swift +++ b/Examples/Reminders/SearchReminders.swift @@ -67,9 +67,10 @@ class SearchRemindersModel { try database.write { db in try Reminder .where { - $0.isCompleted && $0.id.in( - baseQuery(searchText: searchText, searchTokens: searchTokens).select { $1.id } - ) + $0.isCompleted + && $0.id.in( + baseQuery(searchText: searchText, searchTokens: searchTokens).select { $1.id } + ) } .where { if let monthsAgo { @@ -264,7 +265,7 @@ struct SearchRemindersView: View { } } -nonisolated fileprivate func baseQuery( +nonisolated private func baseQuery( searchText: String, searchTokens: [SearchRemindersModel.Token] ) -> SelectOf { diff --git a/Examples/SyncUps/App.swift b/Examples/SyncUps/App.swift index 608046a4..cf6da384 100644 --- a/Examples/SyncUps/App.swift +++ b/Examples/SyncUps/App.swift @@ -37,7 +37,7 @@ class AppModel { private func bind() { for destination in path { switch destination { - case let .detail(detailModel): + case .detail(let detailModel): bindDetail(model: detailModel) case .meeting, .record: @@ -64,11 +64,11 @@ struct AppView: View { SyncUpsList(model: model.syncUpsList) .navigationDestination(for: AppModel.Path.self) { path in switch path { - case let .detail(model): + case .detail(let model): SyncUpDetailView(model: model) - case let .meeting(meeting, attendees: attendees): + case .meeting(let meeting, attendees: let attendees): MeetingView(meeting: meeting, attendees: attendees) - case let .record(model): + case .record(let model): RecordMeetingView(model: model) } } diff --git a/Examples/SyncUps/Dependencies/SpeechClient.swift b/Examples/SyncUps/Dependencies/SpeechClient.swift index d2f68392..f6725781 100644 --- a/Examples/SyncUps/Dependencies/SpeechClient.swift +++ b/Examples/SyncUps/Dependencies/SpeechClient.swift @@ -154,7 +154,7 @@ private actor Speech { let speechRecognizer = SFSpeechRecognizer(locale: Locale(identifier: "en-US"))! recognitionTask = speechRecognizer.recognitionTask(with: request) { result, error in switch (result, error) { - case let (.some(result), _): + case (.some(let result), _): continuation.yield(SpeechRecognitionResult(result)) case (_, .some): continuation.finish(throwing: error) diff --git a/Sources/SQLiteData/CloudKit/Internal/Triggers.swift b/Sources/SQLiteData/CloudKit/Internal/Triggers.swift index 0972f13f..186b1f08 100644 --- a/Sources/SQLiteData/CloudKit/Internal/Triggers.swift +++ b/Sources/SQLiteData/CloudKit/Internal/Triggers.swift @@ -371,7 +371,8 @@ zoneNameOverride = #sql("NULL") ownerNameOverride = #sql("NULL") } - return parentForeignKey + return + parentForeignKey .map { foreignKey in let parentRecordPrimaryKey = #sql( #"\#(type(of: alias).QueryValue.self).\#(quote: foreignKey.from)"#, @@ -385,8 +386,12 @@ return ( parentRecordPrimaryKey, parentRecordType, - #sql("coalesce(\(zoneNameOverride), \($currentZoneName()), (\(parentMetadata.select(\.zoneName))))"), - #sql("coalesce(\(ownerNameOverride), \($currentOwnerName()), (\(parentMetadata.select(\.ownerName))))") + #sql( + "coalesce(\(zoneNameOverride), \($currentZoneName()), (\(parentMetadata.select(\.zoneName))))" + ), + #sql( + "coalesce(\(ownerNameOverride), \($currentOwnerName()), (\(parentMetadata.select(\.ownerName))))" + ) ) } ?? ( diff --git a/Sources/SQLiteData/Documentation.docc/Articles/AddingToGRDB.md b/Sources/SQLiteData/Documentation.docc/Articles/AddingToGRDB.md index d59cc14f..6003ea00 100644 --- a/Sources/SQLiteData/Documentation.docc/Articles/AddingToGRDB.md +++ b/Sources/SQLiteData/Documentation.docc/Articles/AddingToGRDB.md @@ -183,9 +183,9 @@ to specify that: } ``` -The library further requires your tables use globally unique identifiers (such as UUID) for their -primary keys, and in particular auto-incrementing integer IDs do _not_ work. You will need to -migrate your tables to use UUIDs, see +The library further requires your tables use globally unique identifiers (such as UUID) for their +primary keys, and in particular auto-incrementing integer IDs do _not_ work. You will need to +migrate your tables to use UUIDs, see for more information. [GRDB]: http://github.com/groue/GRDB.swift diff --git a/Sources/SQLiteData/Documentation.docc/Articles/CloudKit.md b/Sources/SQLiteData/Documentation.docc/Articles/CloudKit.md index 3f7b257f..bc1a32b6 100644 --- a/Sources/SQLiteData/Documentation.docc/Articles/CloudKit.md +++ b/Sources/SQLiteData/Documentation.docc/Articles/CloudKit.md @@ -237,7 +237,7 @@ CREATE TABLE "reminders"( ) STRICT ``` -> Tip: See SQLite's documentation on [foreign keys](https://sqlite.org/foreignkeys.html) for more information. +> Tip: See SQLite's documentation on [foreign keys](https://sqlite.org/foreignkeys.html) for more information. SQLiteData can synchronize many-to-one and many-to-many relationships to CloudKit, and you can enforce foreign key constraints in your database connection. While it is possible for @@ -706,19 +706,19 @@ And in previews you can use it like so: If you have an existing app deployed to the app store using SQLite, then you may have to perform a migration on your schema to prepare it for synchronization. The most important requirement detailed above in is that -all tables _must_ have a primary key, and all primary keys must be globally unique identifiers +all tables _must_ have a primary key, and all primary keys must be globally unique identifiers such as UUID, and cannot be simple auto-incrementing integers. -The steps required to perform such a process are quite lengthy (the SQLite docs describe it in +The steps required to perform such a process are quite lengthy (the SQLite docs describe it in [12 parts]), and those steps are easy to get wrong, which can either result in the migration failing or your app accidentally corrupting your user's data. -SQLiteData provides a tool called ``SyncEngine/migratePrimaryKeys(_:tables:uuid:)`` that +SQLiteData provides a tool called ``SyncEngine/migratePrimaryKeys(_:tables:uuid:)`` that makes it possible to perform this migration in just 2 steps: * Update your Swift data types (then used annotated with `@Table`) to use UUID identifiers instead of `Int`, and fix all of the resulting compiler errors in your features. - * Create a new migration and invoke ``SyncEngine/migratePrimaryKeys(_:tables:uuid:)`` with the + * Create a new migration and invoke ``SyncEngine/migratePrimaryKeys(_:tables:uuid:)`` with the database handle from your migration and a list of all of your tables: ```swift @@ -731,7 +731,7 @@ makes it possible to perform this migration in just 2 steps: That will perform the many step process of migrating each table from integer-based primary keys to UUIDs. -This migration tool tries to be conservative with its efforts so that if it ever detects a +This migration tool tries to be conservative with its efforts so that if it ever detects a schema it does not know how to handle properly, it will throw an error. If this happens, then you must migrate your tables manually using the introduces in . diff --git a/Sources/SQLiteData/Documentation.docc/Articles/ManuallyMigratingPrimaryKeys.md b/Sources/SQLiteData/Documentation.docc/Articles/ManuallyMigratingPrimaryKeys.md index 537e0250..7120c9dd 100644 --- a/Sources/SQLiteData/Documentation.docc/Articles/ManuallyMigratingPrimaryKeys.md +++ b/Sources/SQLiteData/Documentation.docc/Articles/ManuallyMigratingPrimaryKeys.md @@ -6,7 +6,7 @@ that all primary keys are UUIDs. ## Overview If the [manual migration]() tool provided -by this library does not work for you, then you will need to migrate your tables manually. +by this library does not work for you, then you will need to migrate your tables manually. This consists of converting integer primary keys to UUIDs, and adding a primary key to all tables that do not have one. diff --git a/Sources/SQLiteData/Documentation.docc/Articles/MigrationGuides/MigratingTo1.4.md b/Sources/SQLiteData/Documentation.docc/Articles/MigrationGuides/MigratingTo1.4.md index 54dfa1b1..67209bab 100644 --- a/Sources/SQLiteData/Documentation.docc/Articles/MigrationGuides/MigratingTo1.4.md +++ b/Sources/SQLiteData/Documentation.docc/Articles/MigrationGuides/MigratingTo1.4.md @@ -1,7 +1,7 @@ # Migrating to 1.4 SQLiteData 1.4 introduces a new tool for tying the lifecycle database subscriptions to the -lifecycle of the surrounding async context, but it may incidentally cause "Result of call … +lifecycle of the surrounding async context, but it may incidentally cause "Result of call … is unused" warnings in your project. ## Overview @@ -9,7 +9,7 @@ is unused" warnings in your project. The `load` method defined on [`@FetchAll`]() / [`@FetchOne`]() / [`@Fetch`]() all now return a discardable result, ``FetchSubscription``. Awaiting the ``FetchSubscription/task`` of that result ties the lifecycle of the subscription to the database -to the lifecycle of the surrounding async context, which can help views to automatically +to the lifecycle of the surrounding async context, which can help views to automatically unsubscribe from the database when they are not visible. However, when used with `withErrorReporting` you are likely to get the following warning: diff --git a/Sources/SQLiteData/Documentation.docc/SQLiteData.md b/Sources/SQLiteData/Documentation.docc/SQLiteData.md index 00b44714..ca1fda0c 100644 --- a/Sources/SQLiteData/Documentation.docc/SQLiteData.md +++ b/Sources/SQLiteData/Documentation.docc/SQLiteData.md @@ -6,7 +6,7 @@ synchronization. ## Overview SQLiteData is a [fast](#Performance), lightweight replacement for SwiftData, supporting CloudKit -synchronization (and even CloudKit sharing), built on top of the popular +synchronization (and even CloudKit sharing), built on top of the popular [GRDB](https://github.com/groue/GRDB.swift) library. @Row { @@ -178,8 +178,8 @@ a model context, via a property wrapper: } } -> Important: SQLiteData uses [GRDB](https://github.com/groue/GRDB.swift) under the hood for -> interacting with SQLite, and you will use its tools for creating transactions for writing +> Important: SQLiteData uses [GRDB](https://github.com/groue/GRDB.swift) under the hood for +> interacting with SQLite, and you will use its tools for creating transactions for writing > to the database, such as the `database.write` method above. For more information on how SQLiteData compares to SwiftData, see . @@ -248,8 +248,8 @@ for data and keep your views up-to-date when data in the database changes, and y either using its type-safe, discoverable query building APIs, or using its `#sql` macro for writing safe SQL strings. -Further, this library is built on the popular and battle-tested -[GRDB](https://github.com/groue/GRDB.swift) library for interacting with SQLite, such as executing +Further, this library is built on the popular and battle-tested +[GRDB](https://github.com/groue/GRDB.swift) library for interacting with SQLite, such as executing queries and observing the database for changes. ## What is StructuredQueries? diff --git a/Sources/SQLiteData/Internal/FetchKey.swift b/Sources/SQLiteData/Internal/FetchKey.swift index 7761d728..1b45d53b 100644 --- a/Sources/SQLiteData/Internal/FetchKey.swift +++ b/Sources/SQLiteData/Internal/FetchKey.swift @@ -94,9 +94,9 @@ struct FetchKey: SharedReaderKey { } scheduler.schedule { switch result { - case let .success(value): + case .success(let value): continuation.resume(returning: value) - case let .failure(error): + case .failure(let error): continuation.resume(throwing: error) } } @@ -126,16 +126,16 @@ struct FetchKey: SharedReaderKey { .dropFirst(dropFirst ? 1 : 0) .sink { completion in switch completion { - case let .failure(error): + case .failure(let error): subscriber.yield(throwing: error) case .finished: break } } receiveValue: { newValue in switch newValue { - case let .success(value): + case .success(let value): subscriber.yield(value) - case let .failure(error): + case .failure(let error): subscriber.yield(throwing: error) } } @@ -147,9 +147,9 @@ struct FetchKey: SharedReaderKey { subscriber.yield(throwing: error) } onChange: { newValue in switch newValue { - case let .success(value): + case .success(let value): subscriber.yield(value) - case let .failure(error): + case .failure(let error): subscriber.yield(throwing: error) } } diff --git a/Sources/SQLiteData/StructuredQueries+GRDB/QueryCursor.swift b/Sources/SQLiteData/StructuredQueries+GRDB/QueryCursor.swift index 6fe5c4fc..286135e8 100644 --- a/Sources/SQLiteData/StructuredQueries+GRDB/QueryCursor.swift +++ b/Sources/SQLiteData/StructuredQueries+GRDB/QueryCursor.swift @@ -148,27 +148,27 @@ extension QueryBinding { var databaseValue: DatabaseValue { get throws { switch self { - case let .blob(blob): + case .blob(let blob): return Data(blob).databaseValue - case let .bool(bool): + case .bool(let bool): return (bool ? 1 : 0).databaseValue - case let .date(date): + case .date(let date): return date.iso8601String.databaseValue - case let .double(double): + case .double(let double): return double.databaseValue - case let .int(int): + case .int(let int): return int.databaseValue case .null: return .null - case let .text(text): + case .text(let text): return text.databaseValue - case let .uint(uint) where uint <= UInt64(Int64.max): + case .uint(let uint) where uint <= UInt64(Int64.max): return uint.databaseValue - case let .uint(uint): + case .uint(let uint): throw Int64OverflowError(unsignedInteger: uint) - case let .uuid(uuid): + case .uuid(let uuid): return uuid.uuidString.lowercased().databaseValue - case let .invalid(error): + case .invalid(let error): throw error } } diff --git a/Tests/SQLiteDataTests/CloudKitTests/AtomicTests.swift b/Tests/SQLiteDataTests/CloudKitTests/AtomicTests.swift index b1e54c4a..4b17da1d 100644 --- a/Tests/SQLiteDataTests/CloudKitTests/AtomicTests.swift +++ b/Tests/SQLiteDataTests/CloudKitTests/AtomicTests.swift @@ -25,7 +25,9 @@ for: RemindersList.recordID(for: 1) ) remindersListRecord.setValue("My stuff", forKey: "title", at: 1) - let (saveResults, _) = try syncEngine.private.database.modifyRecords(saving: [remindersListRecord]) + let (saveResults, _) = try syncEngine.private.database.modifyRecords(saving: [ + remindersListRecord + ]) #expect(saveResults.values.allSatisfy { $0.error == nil }) try await withDependencies { @@ -120,7 +122,9 @@ for: RemindersList.recordID(for: 1) ) remindersListRecord.setValue("My stuff", forKey: "title", at: 1) - let (saveResults, _) = try syncEngine.private.database.modifyRecords(saving: [remindersListRecord]) + let (saveResults, _) = try syncEngine.private.database.modifyRecords(saving: [ + remindersListRecord + ]) #expect(saveResults.values.allSatisfy { $0.error == nil }) try await withDependencies { diff --git a/Tests/SQLiteDataTests/CloudKitTests/MockCloudDatabaseTests.swift b/Tests/SQLiteDataTests/CloudKitTests/MockCloudDatabaseTests.swift index 245121d5..9ba9ad8e 100644 --- a/Tests/SQLiteDataTests/CloudKitTests/MockCloudDatabaseTests.swift +++ b/Tests/SQLiteDataTests/CloudKitTests/MockCloudDatabaseTests.swift @@ -435,7 +435,9 @@ } @available(iOS 17, macOS 14, tvOS 17, watchOS 10, *) - @Test func deletingShareOwnedByCurrentUserDeletesShareAndDoesNotDeleteAssociatedData() async throws { + @Test func deletingShareOwnedByCurrentUserDeletesShareAndDoesNotDeleteAssociatedData() + async throws + { let zone = syncEngine.defaultZone _ = try syncEngine.private.database.modifyRecordZones(saving: [zone]) @@ -520,7 +522,9 @@ } @available(iOS 17, macOS 14, tvOS 17, watchOS 10, *) - @Test func deletingShareNotOwnedByCurrentUserDeletesOnlyShareAndNotAssociatedRecords() async throws { + @Test func deletingShareNotOwnedByCurrentUserDeletesOnlyShareAndNotAssociatedRecords() + async throws + { let externalZone = CKRecordZone( zoneID: CKRecordZone.ID(zoneName: "external.zone", ownerName: "external.owner") ) @@ -640,7 +644,7 @@ #expect( saveResults.compactMapValues { ($0.error as? CKError)?.code } == [ record1ID: .batchRequestFailed, - record2ID: .serverRecordChanged + record2ID: .serverRecordChanged, ] ) } diff --git a/Tests/SQLiteDataTests/CloudKitTests/SharingTests.swift b/Tests/SQLiteDataTests/CloudKitTests/SharingTests.swift index 34b7845e..f74d730f 100644 --- a/Tests/SQLiteDataTests/CloudKitTests/SharingTests.swift +++ b/Tests/SQLiteDataTests/CloudKitTests/SharingTests.swift @@ -857,12 +857,16 @@ } try await syncEngine.processPendingRecordZoneChanges(scope: .private) - let _ = try await syncEngine.share(record: remindersList, configure: { - $0[CKShare.SystemFieldKey.title] = "Join my list!" - }) - let _ = try await syncEngine.share(record: remindersList, configure: { - $0[CKShare.SystemFieldKey.title] = "Please join my list!" - }) + let _ = try await syncEngine.share( + record: remindersList, + configure: { + $0[CKShare.SystemFieldKey.title] = "Join my list!" + }) + let _ = try await syncEngine.share( + record: remindersList, + configure: { + $0[CKShare.SystemFieldKey.title] = "Please join my list!" + }) assertQuery(SyncMetadata.select(\.share), database: syncEngine.metadatabase) { """ diff --git a/Tests/SQLiteDataTests/CloudKitTests/SyncEngineLifecycleTests.swift b/Tests/SQLiteDataTests/CloudKitTests/SyncEngineLifecycleTests.swift index 5f2428e9..83257f4d 100644 --- a/Tests/SQLiteDataTests/CloudKitTests/SyncEngineLifecycleTests.swift +++ b/Tests/SQLiteDataTests/CloudKitTests/SyncEngineLifecycleTests.swift @@ -15,7 +15,8 @@ struct SyncEngineLifecycleTests { @MainActor @Suite - final class SyncEngineLifecycleTests_ImmediatelyStarted: BaseCloudKitTests, @unchecked + final class SyncEngineLifecycleTests_ImmediatelyStarted: BaseCloudKitTests, + @unchecked Sendable { @available(iOS 17, macOS 14, tvOS 17, watchOS 10, *) diff --git a/Tests/SQLiteDataTests/PrimaryKeyMigrationTests.swift b/Tests/SQLiteDataTests/PrimaryKeyMigrationTests.swift index aad96deb..6435d68a 100644 --- a/Tests/SQLiteDataTests/PrimaryKeyMigrationTests.swift +++ b/Tests/SQLiteDataTests/PrimaryKeyMigrationTests.swift @@ -340,7 +340,6 @@ struct PrimaryKeyMigrationTests { } } - @Table("users") struct PrimaryKeyNamedUnique { @Column(primaryKey: true) let unique: UUID