pub struct Transaction;Expand description
Typed transactions over the explicit &Db — SeaORM and SQLx paths.
This is a namespace for the two transaction entry points; it holds no state.
Construct nothing — call Transaction::orm or Transaction::sqlx with
an explicit &Db.
Implementations§
Source§impl Transaction
impl Transaction
Sourcepub async fn orm<F, T>(db: &Db, f: F) -> Result<T, DataError>
pub async fn orm<F, T>(db: &Db, f: F) -> Result<T, DataError>
Run a closure inside a SeaORM transaction over db.orm().
The closure receives a &sea_orm::DatabaseTransaction to pass to
SeaORM operations (e.g. active.insert(txn)). SeaORM commits when the
closure returns Ok and rolls back when it returns Err — that is
SeaORM’s transaction semantics, surfaced without additional magic.
use arcature_data::Transaction;
Transaction::orm(db, |txn| Box::pin(async move {
// SeaORM operations against `txn`…
Ok::<_, arcature_db::sea_orm::DbErr>(())
}))
.await?;§Errors
Returns DataError::Database if the transaction fails (the closure
returned Err, or the commit/rollback itself errored).
Sourcepub async fn sqlx<F, T>(db: &Db, f: F) -> Result<T, DataError>
pub async fn sqlx<F, T>(db: &Db, f: F) -> Result<T, DataError>
Run a closure inside a raw SQLx transaction over db.sqlx().
The closure receives a &mut sqlx::Transaction for raw SQLx operations
(sqlx::query!(...).execute(&mut **txn)). The wrapper commits when the
closure returns Ok; on Err it rolls back (SQLx rolls back an
uncommitted transaction) and returns the error.
This preserves the raw SQLx escape hatch with explicit ownership and no Arcature-added transaction semantics.
§Errors
Returns DataError::Sqlx if BEGIN, the closure’s query, or COMMIT
fails.
Auto Trait Implementations§
impl Freeze for Transaction
impl RefUnwindSafe for Transaction
impl Send for Transaction
impl Sync for Transaction
impl Unpin for Transaction
impl UnsafeUnpin for Transaction
impl UnwindSafe for Transaction
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more