diff --git a/Sources/TSCUtility/PersistenceCache.swift b/Sources/TSCUtility/PersistenceCache.swift index 3d697c8c..a8d9259e 100644 --- a/Sources/TSCUtility/PersistenceCache.swift +++ b/Sources/TSCUtility/PersistenceCache.swift @@ -15,6 +15,7 @@ import Foundation public protocol PersistentCacheProtocol { func get(key: Data) throws -> Data? func put(key: Data, value: Data) throws + func delete(key: Data) throws } /// SQLite backed persistent cache. @@ -63,4 +64,14 @@ public final class SQLiteBackedPersistentCache: PersistentCacheProtocol { try writeStmt.step() try writeStmt.finalize() } + + public func delete(key: Data) throws { + let deleteStmt = try self.db.prepare(query: "DELETE FROM TSCCACHE WHERE key == ?;") + let bindings: [SQLite.SQLiteValue] = [ + .blob(key) + ] + try deleteStmt.bind(bindings) + try deleteStmt.step() + try deleteStmt.finalize() + } } diff --git a/Tests/TSCUtilityTests/PersistentCacheTests.swift b/Tests/TSCUtilityTests/PersistentCacheTests.swift index d763a169..9e4fea1c 100644 --- a/Tests/TSCUtilityTests/PersistentCacheTests.swift +++ b/Tests/TSCUtilityTests/PersistentCacheTests.swift @@ -59,6 +59,14 @@ class PersistentCacheTests: XCTestCase { try decoder.decode(Value.self, from: $0) } XCTAssertEqual(retVal3, value1) + + try cache.delete(key: encoder.encode(key1)) + + XCTAssertNil(try cache.get(key: encoder.encode(key1))) + let retVal4 = try cache.get(key: encoder.encode(key2)).map { + try decoder.decode(Value.self, from: $0) + } + XCTAssertEqual(retVal4, value2) } } }