Skip to main content

Transaction

Struct Transaction 

Source
pub struct Transaction<'c, DB: Database> { /* private fields */ }
Expand description

An in-progress database transaction instrumented for OpenTelemetry.

Wraps a sqlx::Transaction and propagates the connection-level attributes and metric instruments. Pass &mut transaction directly to SQLx query builders – the sqlx::Executor impl on &mut Transaction produces the same per-operation spans and metrics as the parent pool.

Started by Pool::begin. Call commit or rollback to finish the transaction; dropping the value without committing rolls it back implicitly. Use with_annotations / with_operation to attach per-query semantic-convention attributes.

§Example

let mut tx = pool.begin().await?;
sqlx::query("INSERT INTO orders (id) VALUES (1)")
    .execute(&mut tx)
    .await?;
tx.commit().await?;

Implementations§

Source§

impl<DB> Transaction<'_, DB>
where DB: Database,

Source

pub async fn commit(self) -> Result<(), Error>

Commit the transaction.

§Errors

Returns sqlx::Error if the commit fails.

Source

pub async fn rollback(self) -> Result<(), Error>

Roll back the transaction.

§Errors

Returns sqlx::Error if the rollback fails.

Source

pub fn with_annotations( &mut self, annotations: QueryAnnotations, ) -> AnnotatedMut<'_, Self>

Return an annotated executor that attaches per-query semantic convention attributes to every span created by the next operation.

The returned wrapper borrows self mutably and implements sqlx::Executor with the same instrumentation, but with annotation values threaded through to span creation.

Source

pub fn with_operation( &mut self, operation: impl Into<String>, collection: impl Into<String>, ) -> AnnotatedMut<'_, Self>

Shorthand for annotating the next operation with db.operation.name and db.collection.name.

Equivalent to self.with_annotations(QueryAnnotations::new().operation(op).collection(coll)).

Trait Implementations§

Source§

impl<'c, DB: Debug + Database> Debug for Transaction<'c, DB>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'c, DB> Executor<'c> for &'c mut Transaction<'_, DB>
where DB: Database, for<'a> &'a mut DB::Connection: Executor<'a, Database = DB>,

Source§

fn execute<'e, 'q: 'e, E>( self, query: E, ) -> BoxFuture<'e, Result<<DB as Database>::QueryResult, Error>>
where E: 'q + Execute<'q, DB>, 'c: 'e,

Execute the query and return the total number of rows affected.

Source§

fn execute_many<'e, 'q: 'e, E>( self, query: E, ) -> BoxStream<'e, Result<<DB as Database>::QueryResult, Error>>
where E: 'q + Execute<'q, DB>, 'c: 'e,

Execute multiple queries and return the rows affected from each query, in a stream.

Source§

fn fetch<'e, 'q: 'e, E>( self, query: E, ) -> BoxStream<'e, Result<<DB as Database>::Row, Error>>
where E: 'q + Execute<'q, DB>, 'c: 'e,

Execute the query and return the generated results as a stream.

Source§

fn fetch_many<'e, 'q: 'e, E>( self, query: E, ) -> BoxStream<'e, Result<Either<<DB as Database>::QueryResult, <DB as Database>::Row>, Error>>
where E: 'q + Execute<'q, DB>, 'c: 'e,

Execute multiple queries and return the generated results as a stream from each query, in a stream.

Source§

fn fetch_all<'e, 'q: 'e, E>( self, query: E, ) -> BoxFuture<'e, Result<Vec<<DB as Database>::Row>, Error>>
where E: 'q + Execute<'q, DB>, 'c: 'e,

Execute the query and return all the generated results, collected into a Vec.

Source§

fn fetch_one<'e, 'q: 'e, E>( self, query: E, ) -> BoxFuture<'e, Result<<DB as Database>::Row, Error>>
where E: 'q + Execute<'q, DB>, 'c: 'e,

Execute the query and returns exactly one row.

Source§

fn fetch_optional<'e, 'q: 'e, E>( self, query: E, ) -> BoxFuture<'e, Result<Option<<DB as Database>::Row>, Error>>
where E: 'q + Execute<'q, DB>, 'c: 'e,

Execute the query and returns at most one row.

Source§

fn prepare<'e, 'q: 'e>( self, query: &'q str, ) -> BoxFuture<'e, Result<<DB as Database>::Statement<'q>, Error>>
where 'c: 'e,

Prepare the SQL query to inspect the type information of its parameters and results.

Be advised that when using the query, query_as, or query_scalar functions, the query is transparently prepared and executed.

This explicit API is provided to allow access to the statement metadata available after it prepared but before the first row is returned.

Source§

fn prepare_with<'e, 'q: 'e>( self, sql: &'q str, parameters: &'e [<DB as Database>::TypeInfo], ) -> BoxFuture<'e, Result<<DB as Database>::Statement<'q>, Error>>
where 'c: 'e,

Prepare the SQL query, with parameter type information, to inspect the type information about its parameters and results.

Only some database drivers (Postgres, MSSQL) can take advantage of this extra information to influence parameter type inference.

Source§

type Database = DB

Auto Trait Implementations§

§

impl<'c, DB> Freeze for Transaction<'c, DB>
where <DB as Database>::Connection: Freeze,

§

impl<'c, DB> !RefUnwindSafe for Transaction<'c, DB>

§

impl<'c, DB> Send for Transaction<'c, DB>

§

impl<'c, DB> Sync for Transaction<'c, DB>
where <DB as Database>::Connection: Sync,

§

impl<'c, DB> Unpin for Transaction<'c, DB>
where <DB as Database>::Connection: Unpin,

§

impl<'c, DB> UnsafeUnpin for Transaction<'c, DB>

§

impl<'c, DB> !UnwindSafe for Transaction<'c, DB>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FutureExt for T

Source§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
Source§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more