Skip to main content

Upsert

Struct Upsert 

Source
pub struct Upsert {
    pub stmt: Insert,
    pub params: Vec<TypedValue>,
    pub ret: Option<Vec<Type>>,
}
Expand description

Executes a lowered single-row upsert on a non-SQL database driver.

The query engine emits this operation only after verifying the requested target and branch behavior against Capability. stmt contains one values row and an stmt::Upsert clause whose target has been lowered from model fields to database columns. Shared mutations retain their model-declared field defaults so the driver can apply the same value when it creates an item.

A driver must perform the conflict check and the create, update, or ignore action atomically. It must not implement this operation as a read followed by a separate insert or update. An update action returns the stored row. An ignore action returns one row after an insert and zero rows after the selected target conflicts.

§Examples

use toasty_core::driver::operation::{Operation, Upsert};

let op = Upsert {
    stmt: lowered_insert,
    params: typed_params,
    ret: Some(return_types),
};
let operation: Operation = op.into();

Fields§

§stmt: Insert

The lowered insert statement carrying the conflict target and action.

Literal bind values are replaced with Expr::Arg(n), where n indexes params. The statement’s upsert field is always Some, and its target is UpsertTarget::Columns.

§params: Vec<TypedValue>

Typed bind parameters extracted from stmt.

§ret: Option<Vec<Type>>

Types of the columns returned by the operation, in projection order.

Some(types) requires the driver to return the stored row projected to these types. None requires no returned row.

Trait Implementations§

Source§

impl Clone for Upsert

Source§

fn clone(&self) -> Upsert

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Upsert

Source§

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

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

impl From<Upsert> for Operation

Source§

fn from(value: Upsert) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

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

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

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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.
§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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