-
Notifications
You must be signed in to change notification settings - Fork 2
Open
Labels
bugSomething isn't workingSomething isn't working
Description
var openDatabases = [String: Database]()
public func getDatabase(_ name: String) -> Database? {
objc_sync_enter(openDatabases)
defer {
objc_sync_exit(openDatabases)
}
return openDatabases[name]
}
public func open(_ databaseName: String, databaseConfig: [AnyHashable: Any]?) throws {
do {
if self.openDatabases[databaseName] != nil {
self.openDatabases.removeValue(forKey: databaseName)
}
let config = self.buildDatabaseConfig(databaseConfig)
let database = try Database(name: databaseName, config: config)
self.openDatabases[databaseName] = database
} catch {
throw DatabaseError.unableToOpenDatabase(databaseName: databaseName)
}
}
public func delete(_ databaseName: String) throws {
guard let database = self.getDatabase(databaseName) else {
throw DatabaseError.invalidDatabaseName(databaseName: databaseName)
}
do {
try database.delete()
openDatabases.removeValue(forKey: databaseName)
} catch {
if let nsError = error as NSError?, nsError.code == 19 {
// SQLite error code 19 (SQLITE_CONSTRAINT) indicates that the database is locked.
throw DatabaseError.databaseLocked(databaseName: databaseName)
} else {
throw DatabaseError.unableToDeleteDatabase(message: "Error deleting database: \(error.localizedDescription)", databaseName: databaseName)
}
}
}Is there a data race issue with openDatabases?
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working