diff --git a/Sources/Bodega/SQLiteStorageEngine.swift b/Sources/Bodega/SQLiteStorageEngine.swift index 05b4658..35b3f7c 100644 --- a/Sources/Bodega/SQLiteStorageEngine.swift +++ b/Sources/Bodega/SQLiteStorageEngine.swift @@ -92,6 +92,8 @@ public actor SQLiteStorageEngine: StorageEngine { /// - dataAndKeys: An array of the `[(CacheKey, Data)]` to store /// multiple `Data` items with their associated keys at once. public func write(_ dataAndKeys: [(key: CacheKey, data: Data)]) throws { + guard !dataAndKeys.isEmpty else { return } + let values = dataAndKeys.map({[ Self.expressions.keyRow <- $0.key.rawValue, Self.expressions.dataRow <- $0.data, @@ -198,6 +200,8 @@ public actor SQLiteStorageEngine: StorageEngine { /// - Parameters: /// - keys: A `[CacheKey]` for matching multiple `Data` items to remove. public func remove(keys: [CacheKey]) throws { + guard !keys.isEmpty else { return } + let deleteQuery = Self.storageTable.select(Self.expressions.keyRow, Self.expressions.dataRow) .where(keys.map(\.rawValue).contains(Self.expressions.keyRow)) .limit(keys.count) diff --git a/Tests/BodegaTests/SQLiteStorageEngineTests.swift b/Tests/BodegaTests/SQLiteStorageEngineTests.swift index 1897746..1dfa4c1 100644 --- a/Tests/BodegaTests/SQLiteStorageEngineTests.swift +++ b/Tests/BodegaTests/SQLiteStorageEngineTests.swift @@ -38,6 +38,14 @@ final class SQLiteStorageEngineTests: XCTestCase { XCTAssertEqual(Self.storedKeysAndData.map(\.data), readKeysAndObjects.map(\.data)) } + func testWritingEmptyDataAndKeys() async throws { + // This test ensures that writing an empty array does not throw an error as it did in previous versions + try await storage.write([]) + + let itemCount = await storage.keyCount() + XCTAssertEqual(itemCount, 0) + } + func testReadingDataSucceeds() async throws { try await storage.write(Self.testData, key: Self.testCacheKey) let readData = await storage.read(key: Self.testCacheKey)