This commit is contained in:
Billy Chan 2021-08-29 12:05:55 +08:00
parent ccfda51a5e
commit 3bada7fbc3
No known key found for this signature in database
GPG Key ID: A2D690CAC7DF3CC7
13 changed files with 61 additions and 56 deletions

View File

@ -87,7 +87,7 @@ let pear = fruit::ActiveModel {
};
// insert one
let res: InsertResult = Fruit::insert(pear).exec(db).await?;
let res = Fruit::insert(pear).exec(db).await?;
println!("InsertResult: {}", res.last_insert_id);

View File

@ -20,7 +20,7 @@ pub async fn insert_and_update(db: &DbConn) -> Result<(), DbErr> {
name: Set("pear".to_owned()),
..Default::default()
};
let res: InsertResult = Fruit::insert(pear).exec(db).await?;
let res = Fruit::insert(pear).exec(db).await?;
println!();
println!("Inserted: last_insert_id = {}\n", res.last_insert_id);

View File

@ -102,24 +102,18 @@ impl From<PgRow> for QueryResult {
impl From<PgQueryResult> for ExecResult {
fn from(result: PgQueryResult) -> ExecResult {
ExecResult {
result: ExecResultHolder::SqlxPostgres {
last_insert_id: 0,
rows_affected: result.rows_affected(),
},
result: ExecResultHolder::SqlxPostgres(result),
}
}
}
pub(crate) fn query_result_into_exec_result<T>(res: QueryResult) -> Result<ExecResult, DbErr>
where
T: TryGetable,
{
let last_insert_id: T = res.try_get("", "last_insert_id")?;
pub(crate) fn query_result_into_exec_result(res: QueryResult) -> Result<ExecResult, DbErr> {
let result = match res {
QueryResult::SqlxPostgres(result) => result,
_ => panic!("Should be QueryResult::SqlxPostgres"),
};
Ok(ExecResult {
result: ExecResultHolder::SqlxPostgres {
last_insert_id: last_insert_id as u64,
rows_affected: 0,
},
result: ExecResultHolder::SqlxPostgres(result),
})
}

View File

@ -1,3 +1,5 @@
use crate::TryGetable;
#[derive(Debug)]
pub struct ExecResult {
pub(crate) result: ExecResultHolder,
@ -8,10 +10,7 @@ pub(crate) enum ExecResultHolder {
#[cfg(feature = "sqlx-mysql")]
SqlxMySql(sqlx::mysql::MySqlQueryResult),
#[cfg(feature = "sqlx-postgres")]
SqlxPostgres {
last_insert_id: u64,
rows_affected: u64,
},
SqlxPostgres(sqlx::postgres::PgQueryResult),
#[cfg(feature = "sqlx-sqlite")]
SqlxSqlite(sqlx::sqlite::SqliteQueryResult),
#[cfg(feature = "mock")]
@ -21,23 +20,35 @@ pub(crate) enum ExecResultHolder {
// ExecResult //
impl ExecResult {
pub fn last_insert_id(&self) -> u64 {
pub fn last_insert_id<T>(&self) -> T
where
T: TryGetable + Default,
{
match &self.result {
#[cfg(feature = "sqlx-mysql")]
ExecResultHolder::SqlxMySql(result) => result.last_insert_id(),
ExecResultHolder::SqlxMySql(result) => {
// result.last_insert_id()
T::default()
}
#[cfg(feature = "sqlx-postgres")]
ExecResultHolder::SqlxPostgres { last_insert_id, .. } => last_insert_id.to_owned(),
ExecResultHolder::SqlxPostgres(result) => {
res.try_get("", "last_insert_id").unwrap_or_default()
}
#[cfg(feature = "sqlx-sqlite")]
ExecResultHolder::SqlxSqlite(result) => {
let last_insert_rowid = result.last_insert_rowid();
if last_insert_rowid < 0 {
panic!("negative last_insert_rowid")
} else {
last_insert_rowid as u64
// last_insert_rowid
T::default()
}
}
#[cfg(feature = "mock")]
ExecResultHolder::Mock(result) => result.last_insert_id,
ExecResultHolder::Mock(result) => {
// result.last_insert_id
T::default()
}
}
}
@ -46,7 +57,7 @@ impl ExecResult {
#[cfg(feature = "sqlx-mysql")]
ExecResultHolder::SqlxMySql(result) => result.rows_affected(),
#[cfg(feature = "sqlx-postgres")]
ExecResultHolder::SqlxPostgres { rows_affected, .. } => rows_affected.to_owned(),
ExecResultHolder::SqlxPostgres(result) => result.rows_affected(),
#[cfg(feature = "sqlx-sqlite")]
ExecResultHolder::SqlxSqlite(result) => result.rows_affected(),
#[cfg(feature = "mock")]

View File

@ -93,7 +93,7 @@
//! };
//!
//! // insert one
//! let res: InsertResult = Fruit::insert(pear).exec(db).await?;
//! let res = Fruit::insert(pear).exec(db).await?;
//!
//! println!("InsertResult: {}", res.last_insert_id);
//! # Ok(())

View File

@ -7,7 +7,7 @@ pub async fn test_create_baker(db: &DbConn) {
profit_margin: Set(10.4),
..Default::default()
};
let bakery_insert_res: InsertResult = Bakery::insert(seaside_bakery)
let bakery_insert_res = Bakery::insert(seaside_bakery)
.exec(db)
.await
.expect("could not insert bakery");
@ -30,7 +30,7 @@ pub async fn test_create_baker(db: &DbConn) {
bakery_id: Set(Some(bakery_insert_res.last_insert_id as i32)),
..Default::default()
};
let res: InsertResult = Baker::insert(baker_bob)
let res = Baker::insert(baker_bob)
.exec(db)
.await
.expect("could not insert baker");

View File

@ -8,7 +8,7 @@ pub async fn test_create_cake(db: &DbConn) {
profit_margin: Set(10.4),
..Default::default()
};
let bakery_insert_res: InsertResult = Bakery::insert(seaside_bakery)
let bakery_insert_res = Bakery::insert(seaside_bakery)
.exec(db)
.await
.expect("could not insert bakery");
@ -23,7 +23,7 @@ pub async fn test_create_cake(db: &DbConn) {
bakery_id: Set(Some(bakery_insert_res.last_insert_id as i32)),
..Default::default()
};
let baker_insert_res: InsertResult = Baker::insert(baker_bob)
let baker_insert_res = Baker::insert(baker_bob)
.exec(db)
.await
.expect("could not insert baker");
@ -38,7 +38,7 @@ pub async fn test_create_cake(db: &DbConn) {
..Default::default()
};
let cake_insert_res: InsertResult = Cake::insert(mud_cake)
let cake_insert_res = Cake::insert(mud_cake)
.exec(db)
.await
.expect("could not insert cake");
@ -53,7 +53,7 @@ pub async fn test_create_cake(db: &DbConn) {
baker_id: Set(baker_insert_res.last_insert_id as i32),
..Default::default()
};
let _cake_baker_res: InsertResult = CakesBakers::insert(cake_baker)
let _cake_baker_res = CakesBakers::insert(cake_baker)
.exec(db)
.await
.expect("could not insert cake_baker");

View File

@ -10,7 +10,7 @@ pub async fn test_create_lineitem(db: &DbConn) {
profit_margin: Set(10.4),
..Default::default()
};
let bakery_insert_res: InsertResult = Bakery::insert(seaside_bakery)
let bakery_insert_res = Bakery::insert(seaside_bakery)
.exec(db)
.await
.expect("could not insert bakery");
@ -26,7 +26,7 @@ pub async fn test_create_lineitem(db: &DbConn) {
bakery_id: Set(Some(bakery_insert_res.last_insert_id as i32)),
..Default::default()
};
let baker_insert_res: InsertResult = Baker::insert(baker_bob)
let baker_insert_res = Baker::insert(baker_bob)
.exec(db)
.await
.expect("could not insert baker");
@ -41,7 +41,7 @@ pub async fn test_create_lineitem(db: &DbConn) {
..Default::default()
};
let cake_insert_res: InsertResult = Cake::insert(mud_cake)
let cake_insert_res = Cake::insert(mud_cake)
.exec(db)
.await
.expect("could not insert cake");
@ -52,7 +52,7 @@ pub async fn test_create_lineitem(db: &DbConn) {
baker_id: Set(baker_insert_res.last_insert_id as i32),
..Default::default()
};
let _cake_baker_res: InsertResult = CakesBakers::insert(cake_baker)
let _cake_baker_res = CakesBakers::insert(cake_baker)
.exec(db)
.await
.expect("could not insert cake_baker");
@ -63,7 +63,7 @@ pub async fn test_create_lineitem(db: &DbConn) {
notes: Set(Some("Loves cheese cake".to_owned())),
..Default::default()
};
let customer_insert_res: InsertResult = Customer::insert(customer_kate)
let customer_insert_res = Customer::insert(customer_kate)
.exec(db)
.await
.expect("could not insert customer");
@ -76,7 +76,7 @@ pub async fn test_create_lineitem(db: &DbConn) {
placed_at: Set(Utc::now().naive_utc()),
..Default::default()
};
let order_insert_res: InsertResult = Order::insert(order_1)
let order_insert_res = Order::insert(order_1)
.exec(db)
.await
.expect("could not insert order");
@ -89,7 +89,7 @@ pub async fn test_create_lineitem(db: &DbConn) {
quantity: Set(1),
..Default::default()
};
let lineitem_insert_res: InsertResult = Lineitem::insert(lineitem_1)
let lineitem_insert_res = Lineitem::insert(lineitem_1)
.exec(db)
.await
.expect("could not insert lineitem");

View File

@ -10,7 +10,7 @@ pub async fn test_create_order(db: &DbConn) {
profit_margin: Set(10.4),
..Default::default()
};
let bakery_insert_res: InsertResult = Bakery::insert(seaside_bakery)
let bakery_insert_res = Bakery::insert(seaside_bakery)
.exec(db)
.await
.expect("could not insert bakery");
@ -26,7 +26,7 @@ pub async fn test_create_order(db: &DbConn) {
bakery_id: Set(Some(bakery_insert_res.last_insert_id as i32)),
..Default::default()
};
let baker_insert_res: InsertResult = Baker::insert(baker_bob)
let baker_insert_res = Baker::insert(baker_bob)
.exec(db)
.await
.expect("could not insert baker");
@ -41,7 +41,7 @@ pub async fn test_create_order(db: &DbConn) {
..Default::default()
};
let cake_insert_res: InsertResult = Cake::insert(mud_cake)
let cake_insert_res = Cake::insert(mud_cake)
.exec(db)
.await
.expect("could not insert cake");
@ -52,7 +52,7 @@ pub async fn test_create_order(db: &DbConn) {
baker_id: Set(baker_insert_res.last_insert_id as i32),
..Default::default()
};
let _cake_baker_res: InsertResult = CakesBakers::insert(cake_baker)
let _cake_baker_res = CakesBakers::insert(cake_baker)
.exec(db)
.await
.expect("could not insert cake_baker");
@ -63,7 +63,7 @@ pub async fn test_create_order(db: &DbConn) {
notes: Set(Some("Loves cheese cake".to_owned())),
..Default::default()
};
let customer_insert_res: InsertResult = Customer::insert(customer_kate)
let customer_insert_res = Customer::insert(customer_kate)
.exec(db)
.await
.expect("could not insert customer");
@ -76,7 +76,7 @@ pub async fn test_create_order(db: &DbConn) {
placed_at: Set(Utc::now().naive_utc()),
..Default::default()
};
let order_insert_res: InsertResult = Order::insert(order_1)
let order_insert_res = Order::insert(order_1)
.exec(db)
.await
.expect("could not insert order");
@ -89,7 +89,7 @@ pub async fn test_create_order(db: &DbConn) {
quantity: Set(2),
..Default::default()
};
let _lineitem_insert_res: InsertResult = Lineitem::insert(lineitem_1)
let _lineitem_insert_res = Lineitem::insert(lineitem_1)
.exec(db)
.await
.expect("could not insert lineitem");

View File

@ -10,7 +10,7 @@ pub async fn test_delete_cake(db: &DbConn) {
profit_margin: Set(10.4),
..Default::default()
};
let bakery_insert_res: InsertResult = Bakery::insert(seaside_bakery)
let bakery_insert_res = Bakery::insert(seaside_bakery)
.exec(db)
.await
.expect("could not insert bakery");

View File

@ -15,7 +15,7 @@ pub async fn test_create_bakery(db: &DbConn) {
profit_margin: Set(10.4),
..Default::default()
};
let res: InsertResult = Bakery::insert(seaside_bakery)
let res = Bakery::insert(seaside_bakery)
.exec(db)
.await
.expect("could not insert bakery");
@ -37,7 +37,7 @@ pub async fn test_create_customer(db: &DbConn) {
notes: Set(Some("Loves cheese cake".to_owned())),
..Default::default()
};
let res: InsertResult = Customer::insert(customer_kate)
let res = Customer::insert(customer_kate)
.exec(db)
.await
.expect("could not insert customer");

View File

@ -8,7 +8,7 @@ pub async fn test_update_cake(db: &DbConn) {
profit_margin: Set(10.4),
..Default::default()
};
let bakery_insert_res: InsertResult = Bakery::insert(seaside_bakery)
let bakery_insert_res = Bakery::insert(seaside_bakery)
.exec(db)
.await
.expect("could not insert bakery");
@ -22,7 +22,7 @@ pub async fn test_update_cake(db: &DbConn) {
..Default::default()
};
let cake_insert_res: InsertResult = Cake::insert(mud_cake)
let cake_insert_res = Cake::insert(mud_cake)
.exec(db)
.await
.expect("could not insert cake");
@ -62,7 +62,7 @@ pub async fn test_update_bakery(db: &DbConn) {
profit_margin: Set(10.4),
..Default::default()
};
let bakery_insert_res: InsertResult = Bakery::insert(seaside_bakery)
let bakery_insert_res = Bakery::insert(seaside_bakery)
.exec(db)
.await
.expect("could not insert bakery");

View File

@ -67,7 +67,7 @@ async fn init_setup(db: &DatabaseConnection) {
..Default::default()
};
let cake_insert_res: InsertResult = Cake::insert(mud_cake)
let cake_insert_res = Cake::insert(mud_cake)
.exec(db)
.await
.expect("could not insert cake");
@ -78,7 +78,7 @@ async fn init_setup(db: &DatabaseConnection) {
..Default::default()
};
let _cake_baker_res: InsertResult = CakesBakers::insert(cake_baker)
let _cake_baker_res = CakesBakers::insert(cake_baker)
.exec(db)
.await
.expect("could not insert cake_baker");
@ -200,7 +200,7 @@ async fn create_cake(db: &DatabaseConnection, baker: baker::Model) -> Option<cak
..Default::default()
};
let cake_insert_res: InsertResult = Cake::insert(new_cake)
let cake_insert_res = Cake::insert(new_cake)
.exec(db)
.await
.expect("could not insert cake");
@ -211,7 +211,7 @@ async fn create_cake(db: &DatabaseConnection, baker: baker::Model) -> Option<cak
..Default::default()
};
let _cake_baker_res: InsertResult = CakesBakers::insert(cake_baker)
let _cake_baker_res = CakesBakers::insert(cake_baker)
.exec(db)
.await
.expect("could not insert cake_baker");