42 lines
1.2 KiB
Swift
42 lines
1.2 KiB
Swift
//
|
|
// Copyright 2025 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
//
|
|
|
|
public import GRDB
|
|
|
|
extension Database {
|
|
/// Execute some SQL using/creating a cached statement.
|
|
///
|
|
/// Caching statements has significant performance benefits for queries that
|
|
/// are performed repeatedly.
|
|
///
|
|
/// - Important Crashes on database errors.
|
|
/// - SeeAlso ``executeWithCachedStatementThrows(sql:arguments:)``
|
|
public func executeWithCachedStatement(
|
|
sql: String,
|
|
arguments: StatementArguments,
|
|
) {
|
|
failIfThrows {
|
|
try executeWithCachedStatementThrows(
|
|
sql: sql,
|
|
arguments: arguments,
|
|
)
|
|
}
|
|
}
|
|
|
|
/// Like ``executeWithCachedStatement(sql:arguments:)``, but throws instead
|
|
/// of crashes on database errors.
|
|
public func executeWithCachedStatementThrows(
|
|
sql: String,
|
|
arguments: StatementArguments,
|
|
) throws(GRDB.DatabaseError) {
|
|
do {
|
|
let statement = try cachedStatement(sql: sql)
|
|
try statement.execute(arguments: arguments)
|
|
} catch {
|
|
throw error.forceCastToDatabaseError()
|
|
}
|
|
}
|
|
}
|