Skip to content

Commit 7556ea9

Browse files
committed
Fixes
1 parent 204efc1 commit 7556ea9

File tree

4 files changed

+29
-16
lines changed

4 files changed

+29
-16
lines changed

Sources/SQLiteData/CloudKit/CloudKit+StructuredQueries.swift

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@
142142
get { self["\(key)_hash"] as? Data }
143143
set { self["\(key)_hash"] = newValue }
144144
}
145-
fileprivate subscript(data key: String) -> Data? {
145+
package subscript(data key: String) -> Data? {
146146
get { self["\(key)_data"] as? Data }
147147
set { self["\(key)_data"] = newValue }
148148
}
@@ -328,7 +328,9 @@
328328
didSet = setAsset(value, forKey: key, at: other.encryptedValues[at: key])
329329
} else if let value = other.encryptedValues[key] as? any EquatableCKRecordValueProtocol {
330330
didSet = setValue(value, forKey: key, at: other.encryptedValues[at: key])
331-
} else if other.encryptedValues[key] == nil {
331+
} else if let data = other.encryptedValues[data: key] {
332+
didSet = setValue(Array(data), forKey: key, at: other.encryptedValues[at: key])
333+
} else if other.encryptedValues[key] == nil, other.encryptedValues[data: key] == nil {
332334
didSet = removeValue(forKey: key, at: other.encryptedValues[at: key])
333335
} else {
334336
didSet = false
@@ -337,8 +339,11 @@
337339
var isRowValueModified: Bool {
338340
switch Value(queryOutput: row[keyPath: keyPath]).queryBinding {
339341
case .blob(let value):
340-
if value.isSmall {
341-
return other.encryptedValues[key] != Data(value)
342+
if value.isSmall,
343+
let serverData =
344+
other.encryptedValues[key] as? Data ?? other.encryptedValues[data: key]
345+
{
346+
return serverData != Data(value)
342347
} else if let otherHash = other.encryptedValues[hash: key] {
343348
return otherHash != value.sha256
344349
} else {
@@ -422,7 +427,7 @@
422427
}
423428

424429
fileprivate var isSmall: Bool {
425-
count * MemoryLayout<UInt>.stride < 16384
430+
count <= 16_384
426431
}
427432
}
428433

Sources/SQLiteData/CloudKit/SyncEngine.swift

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2047,7 +2047,9 @@
20472047
}
20482048
return data?.queryFragment ?? "NULL"
20492049
} else {
2050-
return record.encryptedValues[columnName]?.queryFragment ?? "NULL"
2050+
return record.encryptedValues[columnName]?.queryFragment
2051+
?? record.encryptedValues[data: columnName]?.queryFragment
2052+
?? "NULL"
20512053
}
20522054
}
20532055
.joined(separator: ", ")
@@ -2063,10 +2065,14 @@
20632065
reportIssue("Asset data not found on disk")
20642066
}
20652067
return "\(quote: columnName) = \(data?.queryFragment ?? #""excluded".\#(quote: columnName)"#)"
2068+
} else if let queryFragment = record.encryptedValues[columnName]?.queryFragment
2069+
?? record.encryptedValues[data: columnName]?.queryFragment
2070+
{
2071+
return "\(quote: columnName) = \(queryFragment)"
20662072
} else {
20672073
return """
20682074
\(quote: columnName) = \
2069-
\(record.encryptedValues[columnName]?.queryFragment ?? #""excluded".\#(quote: columnName)"#)
2075+
\(#""excluded".\#(quote: columnName)"#)
20702076
"""
20712077
}
20722078
}
@@ -2473,7 +2479,9 @@
24732479
return (try? asset.fileURL.map { try dataManager.load($0) })?
24742480
.queryFragment ?? "NULL"
24752481
} else {
2476-
return record.encryptedValues[columnName]?.queryFragment ?? "NULL"
2482+
return record.encryptedValues[columnName]?.queryFragment
2483+
?? record.encryptedValues[data: columnName]?.queryFragment
2484+
?? "NULL"
24772485
}
24782486
}
24792487
.joined(separator: ", ")

Tests/SQLiteDataTests/CloudKitTests/AssetsTests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
coverImage_hash: Data(32 bytes),
4141
remindersListID: 1,
4242
coverImage: CKAsset(
43-
fileURL: URL(file:///4eb74bd60d41b48bd682896ff4ba846da5051a1e190159414b3ba177a9dbe482),
43+
fileURL: URL(file:///tmp/4eb74bd60d41b48bd682896ff4ba846da5051a1e190159414b3ba177a9dbe482),
4444
dataString: """
4545
<?xml version="1.0" encoding="UTF-8"?>
4646
<svg width="371px" height="269px" viewBox="0 0 371 269" version="1.1"
@@ -150,7 +150,7 @@
150150

151151
inMemoryDataManager.storage.withValue { storage in
152152
let url = URL(
153-
string: "file:///4eb74bd60d41b48bd682896ff4ba846da5051a1e190159414b3ba177a9dbe482"
153+
string: "file:///tmp/4eb74bd60d41b48bd682896ff4ba846da5051a1e190159414b3ba177a9dbe482"
154154
)!
155155
#expect(storage[url] == blackCoverImage)
156156
}
@@ -185,7 +185,7 @@
185185
coverImage_hash: Data(32 bytes),
186186
remindersListID: 1,
187187
coverImage: CKAsset(
188-
fileURL: URL(file:///43aba58d3830c6821f433a10c9fd554e53c257ebfd9c451514ea2c27c774b79f),
188+
fileURL: URL(file:///tmp/43aba58d3830c6821f433a10c9fd554e53c257ebfd9c451514ea2c27c774b79f),
189189
dataString: """
190190
<?xml version="1.0" encoding="UTF-8"?>
191191
<svg width="371px" height="269px" viewBox="0 0 371 269" version="1.1"
@@ -295,7 +295,7 @@
295295

296296
inMemoryDataManager.storage.withValue { storage in
297297
let url = URL(
298-
string: "file:///43aba58d3830c6821f433a10c9fd554e53c257ebfd9c451514ea2c27c774b79f"
298+
string: "file:///tmp/43aba58d3830c6821f433a10c9fd554e53c257ebfd9c451514ea2c27c774b79f"
299299
)!
300300
#expect(storage[url] == redCoverImage)
301301
}

Tests/SQLiteDataTests/CloudKitTests/DataTests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@
104104
// * Receive record with CKAsset from CloudKit
105105
// => Stored in database as bytes
106106
@available(iOS 17, macOS 14, tvOS 17, watchOS 10, *)
107-
@Test(.disabled()) func receiveData() async throws {
107+
@Test func receiveData() async throws {
108108
let remindersListRecord = CKRecord(
109109
recordType: RemindersList.tableName,
110110
recordID: RemindersList.recordID(for: 1)
@@ -141,7 +141,7 @@
141141
// * Receive record with Data from CloudKit when local asset exists
142142
// => Stored in database as bytes
143143
@available(iOS 17, macOS 14, tvOS 17, watchOS 10, *)
144-
@Test(.disabled()) func receiveUpdatedData() async throws {
144+
@Test func receiveUpdatedData() async throws {
145145
try await userDatabase.userWrite { db in
146146
try db.seed {
147147
RemindersList(id: 1, title: "Personal")
@@ -180,7 +180,7 @@
180180
// * Receive updated asset from CloudKit
181181
// => Local database has freshest asset
182182
@available(iOS 17, macOS 14, tvOS 17, watchOS 10, *)
183-
@Test(.disabled()) func receiveAssetThenReceiveUpdate() async throws {
183+
@Test func receiveAssetThenReceiveUpdate() async throws {
184184
do {
185185
let remindersListRecord = CKRecord(
186186
recordType: RemindersList.tableName,
@@ -246,7 +246,7 @@
246246
// * A moment later client receives the parent RemindersList
247247
// => Both records (and the image data) should be synchronized
248248
@available(iOS 17, macOS 14, tvOS 17, watchOS 10, *)
249-
@Test(.disabled()) func assetReceivedBeforeParentRecord() async throws {
249+
@Test func assetReceivedBeforeParentRecord() async throws {
250250
let remindersListRecord = CKRecord(
251251
recordType: RemindersList.tableName,
252252
recordID: RemindersList.recordID(for: 1)

0 commit comments

Comments
 (0)