Struct TransactionMut

Source
pub struct TransactionMut<'a, S> { /* private fields */ }
Expand description

Same as Transaction, but allows inserting new rows.

TransactionMut always uses the latest version of the database, with the effects of all previous TransactionMuts applied.

To make mutations to the database permanent you need to use TransactionMut::commit. This is to make sure that if a function panics while holding a mutable transaction, it will roll back those changes.

Implementations§

Source§

impl<'t, S: 'static> TransactionMut<'t, S>

Source

pub fn try_insert<T: Table<Schema = S>, C>( &mut self, val: impl Writable<'t, T = T, Conflict = C, Schema = S>, ) -> Result<TableRow<'t, T>, C>

Try inserting a value into the database.

Returns Ok with a reference to the new inserted value or an Err with conflict information. The type of conflict information depends on the number of unique constraints on the table:

  • 0 unique constraints => Infallible
  • 1 unique constraint => TableRow reference to the conflicting table row.
  • 2+ unique constraints => () no further information is provided.
Source

pub fn insert<T: Table<Schema = S>>( &mut self, val: impl Writable<'t, T = T, Conflict = Infallible, Schema = S>, ) -> TableRow<'t, T>

This is a convenience function to make using TransactionMut::try_insert easier for tables without unique constraints.

The new row is added to the table and the row reference is returned.

Source

pub fn find_or_insert<T: Table<Schema = S>>( &mut self, val: impl Writable<'t, T = T, Conflict = TableRow<'t, T>, Schema = S>, ) -> TableRow<'t, T>

This is a convenience function to make using TransactionMut::try_insert easier for tables with exactly one unique constraints.

The new row is inserted and the reference to the row is returned OR an existing row is found which conflicts with the new row and a reference to the conflicting row is returned.

Source

pub fn try_update<T: Table<Schema = S>, C>( &mut self, row: impl IntoColumn<'t, S, Typ = T>, val: impl Writable<'t, T = T, Conflict = C, Schema = S>, ) -> Result<(), C>

Try updating a row in the database to have new column values.

Updating can fail just like TransactionMut::try_insert because of unique constraint conflicts. This happens when the new values are in conflict with an existing different row.

When the update succeeds, this function returns [Ok<()>], when it fails it returns Err with one of three conflict types:

  • 0 unique constraints => Infallible
  • 1 unique constraint => TableRow reference to the conflicting table row.
  • 2+ unique constraints => () no further information is provided.
Source

pub fn update<T: Table<Schema = S>>( &mut self, row: impl IntoColumn<'t, S, Typ = T>, val: impl Writable<'t, T = T, Conflict = Infallible, Schema = S>, )

This is a convenience function to use TransactionMut::try_update on tables without unique constraints.

Source

pub fn find_and_update<T: Table<Schema = S>>( &mut self, val: impl Writable<'t, T = T, Conflict = TableRow<'t, T>, Schema = S>, ) -> Result<TableRow<'t, T>, ()>

This is a convenience function to use TransactionMut::try_update on tables with exactly one unique constraint.

This function works slightly different in that it does not receive a row reference. Instead it tries to update the row that would conflict if the new row would be inserted. When such a conflicting row is found, it is updated to the new column values and Ok is returned with a reference to the found row. If it can not find a conflicting row, then nothing happens and the function returns Err

Source

pub fn commit(self)

Make the changes made in this TransactionMut permanent.

If the TransactionMut is dropped without calling this function, then the changes are rolled back.

Source

pub fn downgrade(self) -> TransactionWeak<'t, S>

Methods from Deref<Target = Transaction<'a, S>>§

Source

pub fn query<F, R>(&self, f: F) -> R
where F: for<'a> FnOnce(&'a mut Query<'t, 'a, S>) -> R,

Execute a query with multiple results.

Please take a look at the documentation of Query for how to use it.

Source

pub fn query_one<O>(&self, val: impl Dummy<'t, 't, S, Out = O>) -> O
where S: 'static,

Retrieve a single result from the database.

Instead of using Self::query_one in a loop, it is better to call Self::query and return all results at once.

Trait Implementations§

Source§

impl<'a, S> Deref for TransactionMut<'a, S>

Source§

type Target = Transaction<'a, S>

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.

Auto Trait Implementations§

§

impl<'a, S> Freeze for TransactionMut<'a, S>

§

impl<'a, S> !RefUnwindSafe for TransactionMut<'a, S>

§

impl<'a, S> !Send for TransactionMut<'a, S>

§

impl<'a, S> !Sync for TransactionMut<'a, S>

§

impl<'a, S> Unpin for TransactionMut<'a, S>

§

impl<'a, S> !UnwindSafe for TransactionMut<'a, S>

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, 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<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
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