From d5447bca88b640975a2bb6d74b1270b5639d2372 Mon Sep 17 00:00:00 2001 From: Billy Chan Date: Fri, 6 Aug 2021 12:16:18 +0800 Subject: [PATCH] Hotfix - Postgres types --- src/executor/query.rs | 67 ++++++++++++++++++++++++++++-------- tests/relational_tests.rs | 2 +- tests/sequential_op_tests.rs | 11 ++++-- 3 files changed, 62 insertions(+), 18 deletions(-) diff --git a/src/executor/query.rs b/src/executor/query.rs index a7aba51e..cac2bd77 100644 --- a/src/executor/query.rs +++ b/src/executor/query.rs @@ -1,4 +1,4 @@ -use crate::DbErr; +use crate::{debug_print, DbErr}; use chrono::NaiveDateTime; use serde_json::Value as Json; use std::fmt; @@ -92,7 +92,10 @@ macro_rules! try_getable_all { use sqlx::Row; match row.try_get(column.as_str()) { Ok(v) => Ok(Some(v)), - Err(_) => Ok(None), + Err(e) => { + debug_print!("{:#?}", e.to_string()); + Ok(None) + } } } #[cfg(feature = "sqlx-postgres")] @@ -100,7 +103,10 @@ macro_rules! try_getable_all { use sqlx::Row; match row.try_get(column.as_str()) { Ok(v) => Ok(Some(v)), - Err(_) => Ok(None), + Err(e) => { + debug_print!("{:#?}", e.to_string()); + Ok(None) + } } } #[cfg(feature = "sqlx-sqlite")] @@ -108,13 +114,19 @@ macro_rules! try_getable_all { use sqlx::Row; match row.try_get(column.as_str()) { Ok(v) => Ok(Some(v)), - Err(_) => Ok(None), + Err(e) => { + debug_print!("{:#?}", e.to_string()); + Ok(None) + } } } #[cfg(feature = "mock")] QueryResultRow::Mock(row) => match row.try_get(column.as_str()) { Ok(v) => Ok(Some(v)), - Err(_) => Ok(None), + Err(e) => { + debug_print!("{:#?}", e.to_string()); + Ok(None) + } }, } } @@ -159,7 +171,10 @@ macro_rules! try_getable_unsigned { use sqlx::Row; match row.try_get(column.as_str()) { Ok(v) => Ok(Some(v)), - Err(_) => Ok(None), + Err(e) => { + debug_print!("{:#?}", e.to_string()); + Ok(None) + } } } #[cfg(feature = "sqlx-postgres")] @@ -171,13 +186,19 @@ macro_rules! try_getable_unsigned { use sqlx::Row; match row.try_get(column.as_str()) { Ok(v) => Ok(Some(v)), - Err(_) => Ok(None), + Err(e) => { + debug_print!("{:#?}", e.to_string()); + Ok(None) + } } } #[cfg(feature = "mock")] QueryResultRow::Mock(row) => match row.try_get(column.as_str()) { Ok(v) => Ok(Some(v)), - Err(_) => Ok(None), + Err(e) => { + debug_print!("{:#?}", e.to_string()); + Ok(None) + } }, } } @@ -220,7 +241,10 @@ macro_rules! try_getable_mysql { use sqlx::Row; match row.try_get(column.as_str()) { Ok(v) => Ok(Some(v)), - Err(_) => Ok(None), + Err(e) => { + debug_print!("{:#?}", e.to_string()); + Ok(None) + } } } #[cfg(feature = "sqlx-postgres")] @@ -234,7 +258,10 @@ macro_rules! try_getable_mysql { #[cfg(feature = "mock")] QueryResultRow::Mock(row) => match row.try_get(column.as_str()) { Ok(v) => Ok(Some(v)), - Err(_) => Ok(None), + Err(e) => { + debug_print!("{:#?}", e.to_string()); + Ok(None) + } }, } } @@ -309,7 +336,10 @@ impl TryGetable for Option { use sqlx::Row; match row.try_get(column.as_str()) { Ok(v) => Ok(Some(v)), - Err(_) => Ok(None), + Err(e) => { + debug_print!("{:#?}", e.to_string()); + Ok(None) + } } } #[cfg(feature = "sqlx-postgres")] @@ -317,7 +347,10 @@ impl TryGetable for Option { use sqlx::Row; match row.try_get(column.as_str()) { Ok(v) => Ok(Some(v)), - Err(_) => Ok(None), + Err(e) => { + debug_print!("{:#?}", e.to_string()); + Ok(None) + } } } #[cfg(feature = "sqlx-sqlite")] @@ -325,13 +358,19 @@ impl TryGetable for Option { let result: Result = TryGetable::try_get(res, pre, col); match result { Ok(v) => Ok(Some(v)), - Err(_) => Ok(None), + Err(e) => { + debug_print!("{:#?}", e.to_string()); + Ok(None) + } } } #[cfg(feature = "mock")] QueryResultRow::Mock(row) => match row.try_get(column.as_str()) { Ok(v) => Ok(Some(v)), - Err(_) => Ok(None), + Err(e) => { + debug_print!("{:#?}", e.to_string()); + Ok(None) + } }, } } diff --git a/tests/relational_tests.rs b/tests/relational_tests.rs index 03b1a535..da1f6216 100644 --- a/tests/relational_tests.rs +++ b/tests/relational_tests.rs @@ -316,7 +316,7 @@ pub async fn group_by() { #[derive(Debug, FromQueryResult)] struct SelectResult { name: String, - number_orders: Option, + number_orders: Option, total_spent: Option, min_spent: Option, max_spent: Option, diff --git a/tests/sequential_op_tests.rs b/tests/sequential_op_tests.rs index ff22f1f3..63042cb0 100644 --- a/tests/sequential_op_tests.rs +++ b/tests/sequential_op_tests.rs @@ -130,10 +130,15 @@ async fn init_setup(db: &DatabaseConnection) { } async fn find_baker_least_sales(db: &DatabaseConnection) -> Option { + #[cfg(feature = "sqlx-postgres")] + type Type = i64; + #[cfg(not(feature = "sqlx-postgres"))] + type Type = Decimal; + #[derive(Debug, FromQueryResult)] struct SelectResult { id: i32, - cakes_sold_opt: Option, + cakes_sold_opt: Option, } #[derive(Debug)] @@ -174,13 +179,13 @@ async fn find_baker_least_sales(db: &DatabaseConnection) -> Option .into_iter() .map(|b| LeastSalesBakerResult { id: b.id.clone(), - cakes_sold: b.cakes_sold_opt.unwrap_or(dec!(0)), + cakes_sold: b.cakes_sold_opt.unwrap_or_default().into(), }) .collect(); results.sort_by(|a, b| b.cakes_sold.cmp(&a.cakes_sold)); - Baker::find_by_id(results.last().unwrap().id) + Baker::find_by_id(results.last().unwrap().id as i64) .one(db) .await .unwrap()