INNER CODE UNIT · Rust
with_immediate_transaction
aannoo/hcom · src/db/mod.rs:153
pub fn with_immediate_transaction<T>(
&self,
f: impl FnOnce(&Transaction<'_>) -> Result<T>,
) -> Result<T> {
let txn = Transaction::new_unchecked(&self.conn, TransactionBehavior::Immediate)?;
let result = f(&txn)?;
txn.commit()?;
Ok(result)
}
/// Run `f` atomically on this connection: in its own `BEGIN IMMEDIATE`
/// transaction when none is open, or in a savepoint nested inside the
/// caller's transaction. Any error rolls back every write made by `f`.
pub fn with_write_scope<T>(&self, f: impl FnOnce() -> Result<T>) -> Result<T> {
let own_transaction = self.conn.is_autocommit();
let (begin, commit, rollback) = if own_transaction {
("BEGIN IMMEDIATE", "COMMIT", "ROLLBACK")
} else {