Skip to main content

UpsertStatement

Struct UpsertStatement 

Source
pub struct UpsertStatement<'a> {
    pub table_name: &'a str,
    pub values: Vec<(&'a str, Box<dyn Expression>)>,
    pub filters: Option<Vec<Box<dyn BooleanExpression>>>,
    pub unique: Option<&'a [&'a str]>,
    pub limit: Option<usize>,
}
Expand description

UPSERT statement for inserting or updating a row on conflict

Fields§

§table_name: &'a str

Table to upsert into

§values: Vec<(&'a str, Box<dyn Expression>)>

Column-value pairs to insert/update

§filters: Option<Vec<Box<dyn BooleanExpression>>>

WHERE clause filters for conditional upsert

§unique: Option<&'a [&'a str]>

Columns that form the unique constraint to detect conflicts

§limit: Option<usize>

Maximum number of rows to upsert

Implementations§

Source§

impl<'a> UpsertStatement<'a>

Source

pub fn values<T>(self, values: Vec<(&'a str, T)>) -> UpsertStatement<'a>
where T: Into<Box<dyn Expression>>,

Sets multiple column-value pairs to upsert

Source

pub fn value<T>(self, name: &'a str, value: T) -> UpsertStatement<'a>
where T: Into<Box<dyn Expression>>,

Sets a single column-value pair to upsert

Source

pub fn value_opt<T>( self, name: &'a str, value: Option<T>, ) -> UpsertStatement<'a>
where T: Into<Box<dyn Expression>>,

Sets a column-value pair only if the value is Some

This is useful for conditional updates where a value should only be set if present.

Source

pub const fn unique(self, unique: &'a [&'a str]) -> UpsertStatement<'a>

Specifies unique columns that identify conflicts

These columns determine when to update instead of insert.

Source

pub const fn limit(self, limit: usize) -> UpsertStatement<'a>

Limits the number of rows affected by the upsert

Source

pub async fn execute(self, db: &dyn Database) -> Result<Vec<Row>, DatabaseError>

§Errors

Will return Err if the upsert execution failed.

Source

pub async fn execute_first( self, db: &dyn Database, ) -> Result<Row, DatabaseError>

§Errors

Will return Err if the upsert execution failed.

Trait Implementations§

Source§

impl Executable for UpsertStatement<'_>

Implement Executable for UpsertStatement

Source§

fn execute<'life0, 'life1, 'async_trait>( &'life0 self, db: &'life1 dyn Database, ) -> Pin<Box<dyn Future<Output = Result<(), DatabaseError>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, UpsertStatement<'_>: 'async_trait,

Execute this operation against the database Read more
Source§

impl FilterableQuery for UpsertStatement<'_>

Source§

fn filter(self, filter: Box<dyn BooleanExpression>) -> UpsertStatement<'_>

Adds a single filter condition to the WHERE clause
Source§

fn filters(self, filters: Vec<Box<dyn BooleanExpression>>) -> Self

Adds multiple filter conditions to the query
Source§

fn filter_if_some<T>(self, filter: Option<T>) -> Self
where T: BooleanExpression + 'static,

Conditionally adds a filter if the option contains a value
Source§

fn where_in<L, V>(self, left: L, values: V) -> Self
where L: Into<Identifier>, V: Into<Box<dyn List>>,

Adds an IN clause filter (column IN (values…))
Source§

fn where_not_in<L, V>(self, left: L, values: V) -> Self
where L: Into<Identifier>, V: Into<Box<dyn List>>,

Adds a NOT IN clause filter (column NOT IN (values…))
Source§

fn where_and(self, conditions: Vec<Box<dyn BooleanExpression>>) -> Self

Adds a logical AND filter combining multiple conditions
Source§

fn where_or(self, conditions: Vec<Box<dyn BooleanExpression>>) -> Self

Adds a logical OR filter combining multiple conditions
Source§

fn where_eq<L, R>(self, left: L, right: R) -> Self
where L: Into<Identifier>, R: Into<Box<dyn Expression>>,

Adds an equality comparison filter (column = value)
Source§

fn where_not_eq<L, R>(self, left: L, right: R) -> Self
where L: Into<Identifier>, R: Into<Box<dyn Expression>>,

Adds a not-equal comparison filter (column != value)
Source§

fn where_gt<L, R>(self, left: L, right: R) -> Self
where L: Into<Identifier>, R: Into<Box<dyn Expression>>,

Adds a greater-than comparison filter (column > value)
Source§

fn where_gte<L, R>(self, left: L, right: R) -> Self
where L: Into<Identifier>, R: Into<Box<dyn Expression>>,

Adds a greater-than-or-equal comparison filter (column >= value)
Source§

fn where_lt<L, R>(self, left: L, right: R) -> Self
where L: Into<Identifier>, R: Into<Box<dyn Expression>>,

Adds a less-than comparison filter (column < value)
Source§

fn where_lte<L, R>(self, left: L, right: R) -> Self
where L: Into<Identifier>, R: Into<Box<dyn Expression>>,

Adds a less-than-or-equal comparison filter (column <= value)
Source§

impl<'a> From<UpsertStatement<'a>> for SelectQuery<'a>

Source§

fn from(value: UpsertStatement<'a>) -> SelectQuery<'a>

Converts to this type from the input type.

Auto Trait Implementations§

§

impl<'a> !RefUnwindSafe for UpsertStatement<'a>

§

impl<'a> !UnwindSafe for UpsertStatement<'a>

§

impl<'a> Freeze for UpsertStatement<'a>

§

impl<'a> Send for UpsertStatement<'a>

§

impl<'a> Sync for UpsertStatement<'a>

§

impl<'a> Unpin for UpsertStatement<'a>

§

impl<'a> UnsafeUnpin for UpsertStatement<'a>

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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> HandlerSend for T

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> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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<T, U> TryIntoDb<U> for T
where T: Send, U: TryFromDb<T>,

Source§

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

The error type returned when conversion fails
Source§

fn try_into_db<'async_trait>( self, db: Arc<Box<dyn Database>>, ) -> Pin<Box<dyn Future<Output = Result<U, <U as TryFromDb<T>>::Error>> + Send + 'async_trait>>
where T: 'async_trait,

Attempts to convert from Self to T with database context Read more
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