pub struct TransactionBuilder<'a, C> { /* private fields */ }
Available on crate feature postgres_backend only.
Expand description

Used to build a transaction, specifying additional details.

This struct is returned by .build_transaction. See the documentation for methods on this struct for usage examples. See the PostgreSQL documentation for SET TRANSACTION for details on the behavior of each option.

Implementations§

Makes the transaction READ ONLY

Example
conn.build_transaction()
    .read_only()
    .run::<_, diesel::result::Error, _>(|conn| {
        let read_attempt = users.select(name).load::<String>(conn);
        assert!(read_attempt.is_ok());

        let write_attempt = diesel::insert_into(users)
            .values(name.eq("Ruby"))
            .execute(conn);
        assert!(write_attempt.is_err());

        Ok(())
    })?;

Makes the transaction READ WRITE

This is the default, unless you’ve changed the default_transaction_read_only configuration parameter.

Example
conn.build_transaction()
    .read_write()
    .run(|conn| {
        let read_attempt = users.select(name).load::<String>(conn);
        assert!(read_attempt.is_ok());

        let write_attempt = diesel::insert_into(users)
            .values(name.eq("Ruby"))
            .execute(conn);
        assert!(write_attempt.is_ok());

        Ok(())
    })

Makes the transaction DEFERRABLE

Example
conn.build_transaction()
    .deferrable()
    .run(|conn| Ok(()))

Makes the transaction NOT DEFERRABLE

This is the default, unless you’ve changed the default_transaction_deferrable configuration parameter.

Example
conn.build_transaction()
    .not_deferrable()
    .run(|conn| Ok(()))

Makes the transaction ISOLATION LEVEL READ COMMITTED

This is the default, unless you’ve changed the default_transaction_isolation_level configuration parameter.

Example
conn.build_transaction()
    .read_committed()
    .run(|conn| Ok(()))

Makes the transaction ISOLATION LEVEL REPEATABLE READ

Example
conn.build_transaction()
    .repeatable_read()
    .run(|conn| Ok(()))

Makes the transaction ISOLATION LEVEL SERIALIZABLE

Example
conn.build_transaction()
    .serializable()
    .run(|conn| Ok(()))

Runs the given function inside of the transaction with the parameters given to this builder.

This function executes the provided closure f inside a database transaction. If there is already an open transaction for the current connection it will return an error. The connection is committed if the closure returns Ok(_), it will be rolled back if it returns Err(_). For both cases the original result value will be returned from this function.

If the transaction fails to commit and requires a rollback according to Postgres, (e.g. serialization failure) a rollback will be attempted. If the rollback fails, the error will be returned in a Error::RollbackErrorOnCommit, from which you will be able to extract both the original commit error and the rollback error. In addition, the connection will be considered broken as it contains a uncommitted unabortable open transaction. Any further interaction with the transaction system will result in an returned error in this case.

Auto Trait Implementations§

Blanket Implementations§

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

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

Convert self to an expression for Diesel’s query builder. Read more
Convert &self to an expression for Diesel’s query builder. Read more
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.