Refactor 2

This commit is contained in:
Chris Tsang 2023-01-18 20:30:15 +08:00
parent 07d5f781ca
commit a465d1ebac

View File

@ -138,36 +138,33 @@ where
type PrimaryKey<A> = <<A as ActiveModelTrait>::Entity as EntityTrait>::PrimaryKey; type PrimaryKey<A> = <<A as ActiveModelTrait>::Entity as EntityTrait>::PrimaryKey;
type ValueTypeOf<A> = <PrimaryKey<A> as PrimaryKeyTrait>::ValueType; type ValueTypeOf<A> = <PrimaryKey<A> as PrimaryKeyTrait>::ValueType;
let last_insert_id = if db.support_returning() { let last_insert_id = match (primary_key, db.support_returning()) {
let mut rows = db.query_all(statement).await?; (Some(value_tuple), _) => {
let row = match rows.pop() { db.execute(statement).await?;
Some(row) => row, FromValueTuple::from_value_tuple(value_tuple)
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::<A>::iter()
.map(|col| col.to_string())
.collect::<Vec<_>>();
row.try_get_many("", cols.as_ref())
}
} }
} else { (None, true) => {
let res = db.execute(statement).await?; let mut rows = db.query_all(statement).await?;
match primary_key { let row = match rows.pop() {
Some(value_tuple) => Ok(FromValueTuple::from_value_tuple(value_tuple)), Some(row) => row,
None => { None => {
let last_insert_id = res.last_insert_id(); return Err(DbErr::RecordNotInserted(
ValueTypeOf::<A>::try_from_u64(last_insert_id) "None of the records are being inserted".to_owned(),
} ))
}
};
let cols = PrimaryKey::<A>::iter()
.map(|col| col.to_string())
.collect::<Vec<_>>();
row.try_get_many("", cols.as_ref())
.map_err(|_| DbErr::UnpackInsertId)?
} }
} (None, false) => {
.map_err(|_| DbErr::UnpackInsertId)?; let res = db.execute(statement).await?;
let last_insert_id = res.last_insert_id();
ValueTypeOf::<A>::try_from_u64(last_insert_id).map_err(|_| DbErr::UnpackInsertId)?
}
};
Ok(InsertResult { last_insert_id }) Ok(InsertResult { last_insert_id })
} }