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

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 1 addition & 2 deletions Sources/SQLiteData/CloudKit/SyncEngine.swift
Original file line number Diff line number Diff line change
Expand Up @@ -1127,8 +1127,7 @@
recordID: recordID
)
if let parentRecordName = metadata.parentRecordName,
let parentRecordType = metadata.parentRecordType,
!privateTables.contains(where: { $0.base.tableName == parentRecordType })
!privateTables.contains(where: { $0.base.tableName == metadata.recordType })
{
record.parent = CKRecord.Reference(
recordID: CKRecord.ID(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
try db.seed {
RemindersList(id: 1, title: "Personal")
Reminder(id: 1, title: "Get milk", remindersListID: 1)
RemindersListPrivate(id: 1, remindersListID: 1)
RemindersListPrivate(remindersListID: 1)
UnsyncedModel(id: 1)
}
}
Expand All @@ -43,7 +43,7 @@
try db.seed {
RemindersList(id: 1, title: "Personal")
Reminder(id: 1, title: "Get milk", remindersListID: 1)
RemindersListPrivate(id: 1, remindersListID: 1)
RemindersListPrivate(remindersListID: 1)
UnsyncedModel(id: 1)
}
}
Expand Down Expand Up @@ -95,9 +95,8 @@
[1]: CKRecord(
recordID: CKRecord.ID(1:remindersListPrivates/zone/__defaultOwner__),
recordType: "remindersListPrivates",
parent: CKReference(recordID: CKRecord.ID(1:remindersLists/zone/__defaultOwner__)),
parent: nil,
share: nil,
id: 1,
position: 0,
remindersListID: 1
),
Expand Down Expand Up @@ -611,7 +610,7 @@
try db.seed {
RemindersList(id: 1, title: "Personal")
Reminder(id: 1, title: "Get milk", remindersListID: 1)
RemindersListPrivate(id: 1, remindersListID: 1)
RemindersListPrivate(remindersListID: 1)
UnsyncedModel(id: 1)
}
}
Expand Down
20 changes: 6 additions & 14 deletions Tests/SQLiteDataTests/CloudKitTests/CloudKitTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -75,29 +75,22 @@
tableName: "remindersListPrivates",
schema: """
CREATE TABLE "remindersListPrivates" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"position" INTEGER NOT NULL ON CONFLICT REPLACE DEFAULT 0,
"remindersListID" INTEGER NOT NULL REFERENCES "remindersLists"("id") ON DELETE CASCADE
"remindersListID" INTEGER PRIMARY KEY NOT NULL REFERENCES "remindersLists"("id")
ON DELETE CASCADE,
"position" INTEGER NOT NULL ON CONFLICT REPLACE DEFAULT 0
) STRICT
""",
tableInfo: [
[0]: TableInfo(
defaultValue: nil,
isPrimaryKey: true,
name: "id",
isNotNull: true,
type: "INTEGER"
),
[1]: TableInfo(
defaultValue: "0",
isPrimaryKey: false,
name: "position",
isNotNull: true,
type: "INTEGER"
),
[2]: TableInfo(
[1]: TableInfo(
defaultValue: nil,
isPrimaryKey: false,
isPrimaryKey: true,
name: "remindersListID",
isNotNull: true,
type: "INTEGER"
Expand Down Expand Up @@ -769,7 +762,7 @@
try await userDatabase.userWrite { db in
try db.seed {
RemindersList(id: 1, title: "Personal")
RemindersListPrivate(id: 1, position: 1, remindersListID: 1)
RemindersListPrivate(remindersListID: 1, position: 1)
Reminder(id: 1, title: "", remindersListID: 1)
Reminder(id: 2, title: "", remindersListID: 1)
Reminder(id: 3, title: "", remindersListID: 1)
Expand Down Expand Up @@ -901,6 +894,5 @@
}
}
}

}
#endif
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@
RemindersList(id: 2, title: "Business")
Reminder(id: 1, title: "Get milk", remindersListID: 1)
Reminder(id: 2, title: "Call accountant", remindersListID: 2)
RemindersListPrivate(id: 1, remindersListID: 1)
RemindersListPrivate(id: 2, remindersListID: 2)
RemindersListPrivate(remindersListID: 1)
RemindersListPrivate(remindersListID: 2)
UnsyncedModel(id: 1)
UnsyncedModel(id: 2)
}
Expand Down Expand Up @@ -52,8 +52,8 @@
RemindersList(id: 2, title: "Business")
Reminder(id: 1, title: "Get milk", remindersListID: 1)
Reminder(id: 2, title: "Call accountant", remindersListID: 2)
RemindersListPrivate(id: 1, remindersListID: 1)
RemindersListPrivate(id: 2, remindersListID: 2)
RemindersListPrivate(remindersListID: 1)
RemindersListPrivate(remindersListID: 2)
UnsyncedModel(id: 1)
UnsyncedModel(id: 2)
}
Expand Down Expand Up @@ -106,18 +106,16 @@
[2]: CKRecord(
recordID: CKRecord.ID(1:remindersListPrivates/zone/__defaultOwner__),
recordType: "remindersListPrivates",
parent: CKReference(recordID: CKRecord.ID(1:remindersLists/zone/__defaultOwner__)),
parent: nil,
share: nil,
id: 1,
position: 0,
remindersListID: 1
),
[3]: CKRecord(
recordID: CKRecord.ID(2:remindersListPrivates/zone/__defaultOwner__),
recordType: "remindersListPrivates",
parent: CKReference(recordID: CKRecord.ID(2:remindersLists/zone/__defaultOwner__)),
parent: nil,
share: nil,
id: 2,
position: 0,
remindersListID: 2
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@
try await userDatabase.userWrite { db in
try db.seed {
RemindersList(id: 1, title: "Personal")
RemindersListPrivate(id: 1, position: 42, remindersListID: 1)
RemindersListPrivate(remindersListID: 1, position: 42)
}
}

Expand All @@ -239,9 +239,8 @@
[0]: CKRecord(
recordID: CKRecord.ID(1:remindersListPrivates/zone/__defaultOwner__),
recordType: "remindersListPrivates",
parent: CKReference(recordID: CKRecord.ID(1:remindersLists/zone/__defaultOwner__)),
parent: nil,
share: nil,
id: 1,
position: 42,
remindersListID: 1
),
Expand Down
17 changes: 5 additions & 12 deletions Tests/SQLiteDataTests/CloudKitTests/RecordTypeTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -73,29 +73,22 @@
tableName: "remindersListPrivates",
schema: """
CREATE TABLE "remindersListPrivates" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"position" INTEGER NOT NULL ON CONFLICT REPLACE DEFAULT 0,
"remindersListID" INTEGER NOT NULL REFERENCES "remindersLists"("id") ON DELETE CASCADE
"remindersListID" INTEGER PRIMARY KEY NOT NULL REFERENCES "remindersLists"("id")
ON DELETE CASCADE,
"position" INTEGER NOT NULL ON CONFLICT REPLACE DEFAULT 0
) STRICT
""",
tableInfo: [
[0]: TableInfo(
defaultValue: nil,
isPrimaryKey: true,
name: "id",
isNotNull: true,
type: "INTEGER"
),
[1]: TableInfo(
defaultValue: "0",
isPrimaryKey: false,
name: "position",
isNotNull: true,
type: "INTEGER"
),
[2]: TableInfo(
[1]: TableInfo(
defaultValue: nil,
isPrimaryKey: false,
isPrimaryKey: true,
name: "remindersListID",
isNotNull: true,
type: "INTEGER"
Expand Down
54 changes: 53 additions & 1 deletion Tests/SQLiteDataTests/CloudKitTests/SharingTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@
@Test func sharePrivateTable() async throws {
let error = await #expect(throws: (any Error).self) {
_ = try await self.syncEngine.share(
record: RemindersListPrivate(id: 1, remindersListID: 1),
record: RemindersListPrivate(remindersListID: 1),
configure: { _ in }
)
}
Expand Down Expand Up @@ -151,6 +151,58 @@
}
}

@available(iOS 17, macOS 14, tvOS 17, watchOS 10, *)
@Test func privateTableNotShared() async throws {
let remindersList = RemindersList(id: 1, title: "Personal")
try await userDatabase.userWrite { db in
try db.seed {
remindersList
RemindersListPrivate(remindersListID: 1, position: 42)
}
}
try await syncEngine.processPendingRecordZoneChanges(scope: .private)

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

assertInlineSnapshot(of: container, as: .customDump) {
"""
MockCloudContainer(
privateCloudDatabase: MockCloudDatabase(
databaseScope: .private,
storage: [
[0]: CKRecord(
recordID: CKRecord.ID(share-1:remindersLists/zone/__defaultOwner__),
recordType: "cloudkit.share",
parent: nil,
share: nil
),
[1]: CKRecord(
recordID: CKRecord.ID(1:remindersListPrivates/zone/__defaultOwner__),
recordType: "remindersListPrivates",
parent: nil,
share: nil,
position: 42,
remindersListID: 1
),
[2]: CKRecord(
recordID: CKRecord.ID(1:remindersLists/zone/__defaultOwner__),
recordType: "remindersLists",
parent: nil,
share: CKReference(recordID: CKRecord.ID(share-1:remindersLists/zone/__defaultOwner__)),
id: 1,
title: "Personal"
)
]
),
sharedCloudDatabase: MockCloudDatabase(
databaseScope: .shared,
storage: []
)
)
"""
}
}

@available(iOS 17, macOS 14, tvOS 17, watchOS 10, *)
@Test func shareRecordBeforeSync() async throws {
let error = await #expect(throws: (any Error).self) {
Expand Down
16 changes: 8 additions & 8 deletions Tests/SQLiteDataTests/CloudKitTests/TriggerTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,7 @@
AFTER DELETE ON "remindersListPrivates"
FOR EACH ROW WHEN "sqlitedata_icloud_syncEngineIsSynchronizingChanges"() BEGIN
DELETE FROM "sqlitedata_icloud_metadata"
WHERE (("sqlitedata_icloud_metadata"."recordPrimaryKey") = ("old"."id")) AND (("sqlitedata_icloud_metadata"."recordType") = ('remindersListPrivates'));
WHERE (("sqlitedata_icloud_metadata"."recordPrimaryKey") = ("old"."remindersListID")) AND (("sqlitedata_icloud_metadata"."recordType") = ('remindersListPrivates'));
END
""",
[17]: """
Expand All @@ -276,7 +276,7 @@
WHERE ((NOT ("sqlitedata_icloud_syncEngineIsSynchronizingChanges"())) AND (("rootShares"."parentRecordName") IS (NULL))) AND (NOT ("sqlitedata_icloud_hasPermission"("rootShares"."share")));
UPDATE "sqlitedata_icloud_metadata"
SET "_isDeleted" = 1
WHERE (("sqlitedata_icloud_metadata"."recordPrimaryKey") = ("old"."id")) AND (("sqlitedata_icloud_metadata"."recordType") = ('remindersListPrivates'));
WHERE (("sqlitedata_icloud_metadata"."recordPrimaryKey") = ("old"."remindersListID")) AND (("sqlitedata_icloud_metadata"."recordType") = ('remindersListPrivates'));
END
""",
[18]: """
Expand Down Expand Up @@ -626,7 +626,7 @@
WHERE ((NOT ("sqlitedata_icloud_syncEngineIsSynchronizingChanges"())) AND (("rootShares"."parentRecordName") IS (NULL))) AND (NOT ("sqlitedata_icloud_hasPermission"("rootShares"."share")));
INSERT INTO "sqlitedata_icloud_metadata"
("recordPrimaryKey", "recordType", "zoneName", "ownerName", "parentRecordPrimaryKey", "parentRecordType")
SELECT "new"."id", 'remindersListPrivates', coalesce(coalesce("sqlitedata_icloud_currentZoneName"(), (SELECT "sqlitedata_icloud_metadata"."zoneName"
SELECT "new"."remindersListID", 'remindersListPrivates', coalesce(coalesce("sqlitedata_icloud_currentZoneName"(), (SELECT "sqlitedata_icloud_metadata"."zoneName"
FROM "sqlitedata_icloud_metadata"
WHERE (("sqlitedata_icloud_metadata"."recordPrimaryKey") = ("new"."remindersListID")) AND (("sqlitedata_icloud_metadata"."recordType") = ('remindersLists')))), 'zone'), coalesce(coalesce("sqlitedata_icloud_currentOwnerName"(), (SELECT "sqlitedata_icloud_metadata"."ownerName"
FROM "sqlitedata_icloud_metadata"
Expand Down Expand Up @@ -878,8 +878,8 @@
""",
[47]: """
CREATE TRIGGER "sqlitedata_icloud_after_primary_key_change_on_remindersListPrivates"
AFTER UPDATE OF "id" ON "remindersListPrivates"
FOR EACH ROW WHEN ("old"."id") <> ("new"."id") BEGIN
AFTER UPDATE OF "remindersListID" ON "remindersListPrivates"
FOR EACH ROW WHEN ("old"."remindersListID") <> ("new"."remindersListID") BEGIN
WITH "rootShares" AS (
SELECT "sqlitedata_icloud_metadata"."parentRecordName" AS "parentRecordName", "sqlitedata_icloud_metadata"."share" AS "share"
FROM "sqlitedata_icloud_metadata"
Expand All @@ -894,7 +894,7 @@
WHERE ((NOT ("sqlitedata_icloud_syncEngineIsSynchronizingChanges"())) AND (("rootShares"."parentRecordName") IS (NULL))) AND (NOT ("sqlitedata_icloud_hasPermission"("rootShares"."share")));
UPDATE "sqlitedata_icloud_metadata"
SET "_isDeleted" = 1
WHERE (("sqlitedata_icloud_metadata"."recordPrimaryKey") = ("old"."id")) AND (("sqlitedata_icloud_metadata"."recordType") = ('remindersListPrivates'));
WHERE (("sqlitedata_icloud_metadata"."recordPrimaryKey") = ("old"."remindersListID")) AND (("sqlitedata_icloud_metadata"."recordType") = ('remindersListPrivates'));
END
""",
[48]: """
Expand Down Expand Up @@ -1230,7 +1230,7 @@
WHERE ((NOT ("sqlitedata_icloud_syncEngineIsSynchronizingChanges"())) AND (("rootShares"."parentRecordName") IS (NULL))) AND (NOT ("sqlitedata_icloud_hasPermission"("rootShares"."share")));
INSERT INTO "sqlitedata_icloud_metadata"
("recordPrimaryKey", "recordType", "zoneName", "ownerName", "parentRecordPrimaryKey", "parentRecordType")
SELECT "new"."id", 'remindersListPrivates', coalesce(coalesce("sqlitedata_icloud_currentZoneName"(), (SELECT "sqlitedata_icloud_metadata"."zoneName"
SELECT "new"."remindersListID", 'remindersListPrivates', coalesce(coalesce("sqlitedata_icloud_currentZoneName"(), (SELECT "sqlitedata_icloud_metadata"."zoneName"
FROM "sqlitedata_icloud_metadata"
WHERE (("sqlitedata_icloud_metadata"."recordPrimaryKey") = ("new"."remindersListID")) AND (("sqlitedata_icloud_metadata"."recordType") = ('remindersLists')))), 'zone'), coalesce(coalesce("sqlitedata_icloud_currentOwnerName"(), (SELECT "sqlitedata_icloud_metadata"."ownerName"
FROM "sqlitedata_icloud_metadata"
Expand All @@ -1242,7 +1242,7 @@
WHERE (("sqlitedata_icloud_metadata"."recordPrimaryKey") = ("new"."remindersListID")) AND (("sqlitedata_icloud_metadata"."recordType") = ('remindersLists')))), "sqlitedata_icloud_metadata"."zoneName"), "ownerName" = coalesce(coalesce("sqlitedata_icloud_currentOwnerName"(), (SELECT "sqlitedata_icloud_metadata"."ownerName"
FROM "sqlitedata_icloud_metadata"
WHERE (("sqlitedata_icloud_metadata"."recordPrimaryKey") = ("new"."remindersListID")) AND (("sqlitedata_icloud_metadata"."recordType") = ('remindersLists')))), "sqlitedata_icloud_metadata"."ownerName"), "parentRecordPrimaryKey" = "new"."remindersListID", "parentRecordType" = 'remindersLists', "userModificationTime" = "sqlitedata_icloud_currentTime"()
WHERE (("sqlitedata_icloud_metadata"."recordPrimaryKey") = ("new"."id")) AND (("sqlitedata_icloud_metadata"."recordType") = ('remindersListPrivates'));
WHERE (("sqlitedata_icloud_metadata"."recordPrimaryKey") = ("new"."remindersListID")) AND (("sqlitedata_icloud_metadata"."recordType") = ('remindersListPrivates'));
END
""",
[60]: """
Expand Down
11 changes: 6 additions & 5 deletions Tests/SQLiteDataTests/Internal/Schema.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,10 @@ import SQLiteData
var id: RemindersList.ID { remindersListID }
}
@Table struct RemindersListPrivate: Equatable, Identifiable {
let id: Int
var position = 0
@Column(primaryKey: true)
var remindersListID: RemindersList.ID
var position = 0
var id: RemindersList.ID { remindersListID }
}
@Table struct Tag: Equatable, Identifiable {
@Column(primaryKey: true)
Expand Down Expand Up @@ -112,9 +113,9 @@ func database(
try #sql(
"""
CREATE TABLE "remindersListPrivates" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"position" INTEGER NOT NULL ON CONFLICT REPLACE DEFAULT 0,
"remindersListID" INTEGER NOT NULL REFERENCES "remindersLists"("id") ON DELETE CASCADE
"remindersListID" INTEGER PRIMARY KEY NOT NULL REFERENCES "remindersLists"("id")
ON DELETE CASCADE,
"position" INTEGER NOT NULL ON CONFLICT REPLACE DEFAULT 0
) STRICT
"""
)
Expand Down