Struct diesel::pg::TransactionBuilder
source · pub struct TransactionBuilder<'a, C> { /* private fields */ }
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§
source§impl<'a, C> TransactionBuilder<'a, C>where
C: Connection<Backend = Pg, TransactionManager = AnsiTransactionManager>,
impl<'a, C> TransactionBuilder<'a, C>where C: Connection<Backend = Pg, TransactionManager = AnsiTransactionManager>,
sourcepub fn read_only(self) -> Self
pub fn read_only(self) -> Self
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(())
})?;
sourcepub fn read_write(self) -> Self
pub fn read_write(self) -> Self
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(())
})
sourcepub fn deferrable(self) -> Self
pub fn deferrable(self) -> Self
sourcepub fn not_deferrable(self) -> Self
pub fn not_deferrable(self) -> Self
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(()))
sourcepub fn read_committed(self) -> Self
pub fn read_committed(self) -> Self
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(()))
sourcepub fn repeatable_read(self) -> Self
pub fn repeatable_read(self) -> Self
Makes the transaction ISOLATION LEVEL REPEATABLE READ
Example
conn.build_transaction()
.repeatable_read()
.run(|conn| Ok(()))
sourcepub fn serializable(self) -> Self
pub fn serializable(self) -> Self
Makes the transaction ISOLATION LEVEL SERIALIZABLE
Example
conn.build_transaction()
.serializable()
.run(|conn| Ok(()))
sourcepub fn run<T, E, F>(&mut self, f: F) -> Result<T, E>where
F: FnOnce(&mut C) -> Result<T, E>,
E: From<Error>,
pub fn run<T, E, F>(&mut self, f: F) -> Result<T, E>where F: FnOnce(&mut C) -> Result<T, E>, E: From<Error>,
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§
impl<'a, C> RefUnwindSafe for TransactionBuilder<'a, C>where C: RefUnwindSafe,
impl<'a, C> Send for TransactionBuilder<'a, C>where C: Send,
impl<'a, C> Sync for TransactionBuilder<'a, C>where C: Sync,
impl<'a, C> Unpin for TransactionBuilder<'a, C>
impl<'a, C> !UnwindSafe for TransactionBuilder<'a, C>
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> IntoSql for T
impl<T> IntoSql for T
source§fn into_sql<T>(self) -> AsExprOf<Self, T>where
Self: AsExpression<T> + Sized,
T: SqlType + TypedExpressionType,
fn into_sql<T>(self) -> AsExprOf<Self, T>where Self: AsExpression<T> + Sized, T: SqlType + TypedExpressionType,
self
to an expression for Diesel’s query builder. Read moresource§fn as_sql<'a, T>(&'a self) -> AsExprOf<&'a Self, T>where
&'a Self: AsExpression<T>,
T: SqlType + TypedExpressionType,
fn as_sql<'a, T>(&'a self) -> AsExprOf<&'a Self, T>where &'a Self: AsExpression<T>, T: SqlType + TypedExpressionType,
&self
to an expression for Diesel’s query builder. Read more