Skip to content
Open
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
7 changes: 6 additions & 1 deletion Sources/SQLiteData/CloudKit/Internal/Metadatabase.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,12 @@
throw InMemoryDatabase()
}

let metadatabase = try DatabasePool(path: url.path(percentEncoded: false))
let metadatabase: any DatabaseWriter =
if url.isInMemory {
try DatabaseQueue(path: url.absoluteString)
} else {
try DatabasePool(path: url.path(percentEncoded: false))
}
try migrate(metadatabase: metadatabase)
return metadatabase
}
Expand Down
26 changes: 26 additions & 0 deletions Tests/SQLiteDataTests/CloudKitTests/MetadatabaseTests.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#if canImport(CloudKit)
import Foundation
import GRDB
import OSLog
@testable import SQLiteData
import Testing

@Suite struct MetadatabaseTests {
@available(iOS 17, macOS 14, tvOS 17, watchOS 10, *)
@Test func inMemoryMetadatabase() throws {
let url = try URL.metadatabase(databasePath: ":memory:", containerIdentifier: nil)
#expect(url.isInMemory)

let metadatabase = try defaultMetadatabase(
logger: Logger(subsystem: "test", category: "test"),
url: url
)
let mainDatabaseFile = try metadatabase.read { db in
try String.fetchOne(db, sql: "SELECT file FROM pragma_database_list WHERE name = 'main'")
}
// NB: SQLite reports an empty file path for in-memory databases. A non-empty path
// means the metadatabase was silently created on disk.
#expect(mainDatabaseFile == "")
}
}
#endif