pub struct TryInsert<A>where
A: ActiveModelTrait,{ /* private fields */ }Expand description
Wrapper of Insert / InsertMany, treats “no row inserted/id returned” as a normal outcome.
Its exec* methods return crate::TryInsertResult.
Mapping empty input to crate::TryInsertResult::Empty (no SQL executed) and
DbErr::RecordNotInserted to crate::TryInsertResult::Conflicted.
Useful for idempotent inserts such as ON CONFLICT ... DO NOTHING (Postgres / SQLite) or the
MySQL polyfill (ON DUPLICATE KEY UPDATE pk = pk).
Implementations§
Source§impl<A> TryInsert<A>where
A: ActiveModelTrait,
impl<A> TryInsert<A>where
A: ActiveModelTrait,
Sourcepub async fn exec<C>(
self,
db: &C,
) -> Result<TryInsertResult<InsertResult<A>>, DbErr>where
C: ConnectionTrait,
pub async fn exec<C>(
self,
db: &C,
) -> Result<TryInsertResult<InsertResult<A>>, DbErr>where
C: ConnectionTrait,
Execute an insert operation
Sourcepub async fn exec_without_returning<C>(
self,
db: &C,
) -> Result<TryInsertResult<u64>, DbErr>where
C: ConnectionTrait,
pub async fn exec_without_returning<C>(
self,
db: &C,
) -> Result<TryInsertResult<u64>, DbErr>where
C: ConnectionTrait,
Execute an insert operation without returning (don’t use RETURNING syntax)
Number of rows affected is returned
Sourcepub async fn exec_with_returning<C>(
self,
db: &C,
) -> Result<TryInsertResult<<A::Entity as EntityTrait>::Model>, DbErr>
pub async fn exec_with_returning<C>( self, db: &C, ) -> Result<TryInsertResult<<A::Entity as EntityTrait>::Model>, DbErr>
Execute an insert operation and return the inserted model (use RETURNING syntax if supported)
Sourcepub async fn exec_with_returning_keys<C>(
self,
db: &C,
) -> Result<TryInsertResult<Vec<<<<A as ActiveModelTrait>::Entity as EntityTrait>::PrimaryKey as PrimaryKeyTrait>::ValueType>>, DbErr>
pub async fn exec_with_returning_keys<C>( self, db: &C, ) -> Result<TryInsertResult<Vec<<<<A as ActiveModelTrait>::Entity as EntityTrait>::PrimaryKey as PrimaryKeyTrait>::ValueType>>, DbErr>
Execute an insert operation and return primary keys of inserted models
Sourcepub async fn exec_with_returning_many<C>(
self,
db: &C,
) -> Result<TryInsertResult<Vec<<A::Entity as EntityTrait>::Model>>, DbErr>
pub async fn exec_with_returning_many<C>( self, db: &C, ) -> Result<TryInsertResult<Vec<<A::Entity as EntityTrait>::Model>>, DbErr>
Execute an insert operation and return all inserted models
Source§impl<A> TryInsert<A>where
A: ActiveModelTrait,
impl<A> TryInsert<A>where
A: ActiveModelTrait,
Sourcepub fn one<M>(m: M) -> Selfwhere
M: IntoActiveModel<A>,
pub fn one<M>(m: M) -> Selfwhere
M: IntoActiveModel<A>,
Try insert one item
Sourcepub fn many<M, I>(models: I) -> Selfwhere
M: IntoActiveModel<A>,
I: IntoIterator<Item = M>,
pub fn many<M, I>(models: I) -> Selfwhere
M: IntoActiveModel<A>,
I: IntoIterator<Item = M>,
Try insert many items
Sourcepub fn on_conflict(self, on_conflict: OnConflict) -> Insert<A>
pub fn on_conflict(self, on_conflict: OnConflict) -> Insert<A>
Set ON CONFLICT logic
Sourcepub fn on_conflict_do_nothing(self) -> Self
pub fn on_conflict_do_nothing(self) -> Self
Set ON CONFLICT on primary key do nothing, but with MySQL specific polyfill.
Sourcepub fn on_conflict_do_nothing_on<I>(self, columns: I) -> Self
pub fn on_conflict_do_nothing_on<I>(self, columns: I) -> Self
Set ON CONFLICT do nothing, but with MySQL specific polyfill.
Trait Implementations§
Source§impl<A> QueryTrait for TryInsert<A>where
A: ActiveModelTrait,
impl<A> QueryTrait for TryInsert<A>where
A: ActiveModelTrait,
Source§type QueryStatement = InsertStatement
type QueryStatement = InsertStatement
Source§fn query(&mut self) -> &mut InsertStatement
fn query(&mut self) -> &mut InsertStatement
Source§fn as_query(&self) -> &InsertStatement
fn as_query(&self) -> &InsertStatement
Source§fn into_query(self) -> InsertStatement
fn into_query(self) -> InsertStatement
Auto Trait Implementations§
impl<A> Freeze for TryInsert<A>
impl<A> RefUnwindSafe for TryInsert<A>where
A: RefUnwindSafe,
impl<A> Send for TryInsert<A>where
A: Send,
impl<A> Sync for TryInsert<A>where
A: Sync,
impl<A> Unpin for TryInsert<A>where
A: Unpin,
impl<A> UnwindSafe for TryInsert<A>where
A: UnwindSafe,
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> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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