diff --git a/src/executor/insert.rs b/src/executor/insert.rs
index 6d7ab426..882f3df6 100644
--- a/src/executor/insert.rs
+++ b/src/executor/insert.rs
@@ -138,36 +138,33 @@ where
type PrimaryKey = <::Entity as EntityTrait>::PrimaryKey;
type ValueTypeOf = as PrimaryKeyTrait>::ValueType;
- let last_insert_id = if db.support_returning() {
- let mut rows = db.query_all(statement).await?;
- let row = match rows.pop() {
- Some(row) => row,
- None => {
- return Err(DbErr::RecordNotInserted(
- "None of the records are being inserted".to_owned(),
- ))
- }
- };
- match primary_key {
- Some(value_tuple) => Ok(FromValueTuple::from_value_tuple(value_tuple)),
- None => {
- let cols = PrimaryKey::::iter()
- .map(|col| col.to_string())
- .collect::>();
- row.try_get_many("", cols.as_ref())
- }
+ let last_insert_id = match (primary_key, db.support_returning()) {
+ (Some(value_tuple), _) => {
+ db.execute(statement).await?;
+ FromValueTuple::from_value_tuple(value_tuple)
}
- } else {
- let res = db.execute(statement).await?;
- match primary_key {
- Some(value_tuple) => Ok(FromValueTuple::from_value_tuple(value_tuple)),
- None => {
- let last_insert_id = res.last_insert_id();
- ValueTypeOf::::try_from_u64(last_insert_id)
- }
+ (None, true) => {
+ let mut rows = db.query_all(statement).await?;
+ let row = match rows.pop() {
+ Some(row) => row,
+ None => {
+ return Err(DbErr::RecordNotInserted(
+ "None of the records are being inserted".to_owned(),
+ ))
+ }
+ };
+ let cols = PrimaryKey::::iter()
+ .map(|col| col.to_string())
+ .collect::>();
+ row.try_get_many("", cols.as_ref())
+ .map_err(|_| DbErr::UnpackInsertId)?
}
- }
- .map_err(|_| DbErr::UnpackInsertId)?;
+ (None, false) => {
+ let res = db.execute(statement).await?;
+ let last_insert_id = res.last_insert_id();
+ ValueTypeOf::::try_from_u64(last_insert_id).map_err(|_| DbErr::UnpackInsertId)?
+ }
+ };
Ok(InsertResult { last_insert_id })
}