From 9b9918efc4dc59905d9aaeb8d18c0d33342ae93d Mon Sep 17 00:00:00 2001 From: Marco Napetti Date: Thu, 26 Aug 2021 15:50:53 +0200 Subject: [PATCH 1/6] Remove impl TryGetable for Option --- src/executor/query.rs | 242 +++++++++--------------------------------- 1 file changed, 50 insertions(+), 192 deletions(-) diff --git a/src/executor/query.rs b/src/executor/query.rs index b7e1d12e..f0f03c72 100644 --- a/src/executor/query.rs +++ b/src/executor/query.rs @@ -17,8 +17,22 @@ pub(crate) enum QueryResultRow { Mock(crate::MockRow), } +pub enum TryGetError { + DbErr(DbErr), + Null, +} + +impl From for DbErr { + fn from(e: TryGetError) -> DbErr { + match e { + TryGetError::DbErr(e) => e, + TryGetError::Null => DbErr::Query("error occurred while decoding: Null".to_owned()), + } + } +} + pub trait TryGetable { - fn try_get(res: &QueryResult, pre: &str, col: &str) -> Result + fn try_get(res: &QueryResult, pre: &str, col: &str) -> Result where Self: Sized; } @@ -30,7 +44,7 @@ impl QueryResult { where T: TryGetable, { - T::try_get(self, pre, col) + Ok(T::try_get(self, pre, col)?) } } @@ -51,38 +65,20 @@ impl fmt::Debug for QueryResultRow { // TryGetable // +impl TryGetable for Option { + fn try_get(res: &QueryResult, pre: &str, col: &str) -> Result { + match T::try_get(res, pre, col) { + Ok(v) => Ok(Some(v)), + Err(TryGetError::Null) => Ok(None), + Err(e) => Err(e), + } + } +} + macro_rules! try_getable_all { ( $type: ty ) => { impl TryGetable for $type { - fn try_get(res: &QueryResult, pre: &str, col: &str) -> Result { - let column = format!("{}{}", pre, col); - match &res.row { - #[cfg(feature = "sqlx-mysql")] - QueryResultRow::SqlxMySql(row) => { - use sqlx::Row; - row.try_get(column.as_str()) - .map_err(crate::sqlx_error_to_query_err) - } - #[cfg(feature = "sqlx-postgres")] - QueryResultRow::SqlxPostgres(row) => { - use sqlx::Row; - row.try_get(column.as_str()) - .map_err(crate::sqlx_error_to_query_err) - } - #[cfg(feature = "sqlx-sqlite")] - QueryResultRow::SqlxSqlite(row) => { - use sqlx::Row; - row.try_get(column.as_str()) - .map_err(crate::sqlx_error_to_query_err) - } - #[cfg(feature = "mock")] - QueryResultRow::Mock(row) => Ok(row.try_get(column.as_str())?), - } - } - } - - impl TryGetable for Option<$type> { - fn try_get(res: &QueryResult, pre: &str, col: &str) -> Result { + fn try_get(res: &QueryResult, pre: &str, col: &str) -> Result { let column = format!("{}{}", pre, col); match &res.row { #[cfg(feature = "sqlx-mysql")] @@ -90,27 +86,24 @@ macro_rules! try_getable_all { use sqlx::Row; row.try_get::, _>(column.as_str()) .map_err(crate::sqlx_error_to_query_err) + .and_then(|opt| opt.ok_or_else(TryGetError::Null)) } #[cfg(feature = "sqlx-postgres")] QueryResultRow::SqlxPostgres(row) => { use sqlx::Row; row.try_get::, _>(column.as_str()) .map_err(crate::sqlx_error_to_query_err) + .and_then(|opt| opt.ok_or_else(TryGetError::Null)) } #[cfg(feature = "sqlx-sqlite")] QueryResultRow::SqlxSqlite(row) => { use sqlx::Row; row.try_get::, _>(column.as_str()) .map_err(crate::sqlx_error_to_query_err) + .and_then(|opt| opt.ok_or_else(TryGetError::Null)) } #[cfg(feature = "mock")] - QueryResultRow::Mock(row) => match row.try_get(column.as_str()) { - Ok(v) => Ok(Some(v)), - Err(e) => { - debug_print!("{:#?}", e.to_string()); - Ok(None) - } - }, + QueryResultRow::Mock(row) => row.try_get(column.as_str()).map_err(|_| TryGetError::Null), } } } @@ -120,33 +113,7 @@ macro_rules! try_getable_all { macro_rules! try_getable_unsigned { ( $type: ty ) => { impl TryGetable for $type { - fn try_get(res: &QueryResult, pre: &str, col: &str) -> Result { - let column = format!("{}{}", pre, col); - match &res.row { - #[cfg(feature = "sqlx-mysql")] - QueryResultRow::SqlxMySql(row) => { - use sqlx::Row; - row.try_get(column.as_str()) - .map_err(crate::sqlx_error_to_query_err) - } - #[cfg(feature = "sqlx-postgres")] - QueryResultRow::SqlxPostgres(_) => { - panic!("{} unsupported by sqlx-postgres", stringify!($type)) - } - #[cfg(feature = "sqlx-sqlite")] - QueryResultRow::SqlxSqlite(row) => { - use sqlx::Row; - row.try_get(column.as_str()) - .map_err(crate::sqlx_error_to_query_err) - } - #[cfg(feature = "mock")] - QueryResultRow::Mock(row) => Ok(row.try_get(column.as_str())?), - } - } - } - - impl TryGetable for Option<$type> { - fn try_get(res: &QueryResult, pre: &str, col: &str) -> Result { + fn try_get(res: &QueryResult, pre: &str, col: &str) -> Result { let column = format!("{}{}", pre, col); match &res.row { #[cfg(feature = "sqlx-mysql")] @@ -154,6 +121,7 @@ macro_rules! try_getable_unsigned { use sqlx::Row; row.try_get::, _>(column.as_str()) .map_err(crate::sqlx_error_to_query_err) + .and_then(|opt| opt.ok_or_else(TryGetError::Null)) } #[cfg(feature = "sqlx-postgres")] QueryResultRow::SqlxPostgres(_) => { @@ -164,15 +132,10 @@ macro_rules! try_getable_unsigned { use sqlx::Row; row.try_get::, _>(column.as_str()) .map_err(crate::sqlx_error_to_query_err) + .and_then(|opt| opt.ok_or_else(TryGetError::Null)) } #[cfg(feature = "mock")] - QueryResultRow::Mock(row) => match row.try_get(column.as_str()) { - Ok(v) => Ok(Some(v)), - Err(e) => { - debug_print!("{:#?}", e.to_string()); - Ok(None) - } - }, + QueryResultRow::Mock(row) => row.try_get(column.as_str()).map_err(|_| TryGetError::Null), } } } @@ -182,31 +145,7 @@ macro_rules! try_getable_unsigned { macro_rules! try_getable_mysql { ( $type: ty ) => { impl TryGetable for $type { - fn try_get(res: &QueryResult, pre: &str, col: &str) -> Result { - let column = format!("{}{}", pre, col); - match &res.row { - #[cfg(feature = "sqlx-mysql")] - QueryResultRow::SqlxMySql(row) => { - use sqlx::Row; - row.try_get(column.as_str()) - .map_err(crate::sqlx_error_to_query_err) - } - #[cfg(feature = "sqlx-postgres")] - QueryResultRow::SqlxPostgres(_) => { - panic!("{} unsupported by sqlx-postgres", stringify!($type)) - } - #[cfg(feature = "sqlx-sqlite")] - QueryResultRow::SqlxSqlite(_) => { - panic!("{} unsupported by sqlx-sqlite", stringify!($type)) - } - #[cfg(feature = "mock")] - QueryResultRow::Mock(row) => Ok(row.try_get(column.as_str())?), - } - } - } - - impl TryGetable for Option<$type> { - fn try_get(res: &QueryResult, pre: &str, col: &str) -> Result { + fn try_get(res: &QueryResult, pre: &str, col: &str) -> Result { let column = format!("{}{}", pre, col); match &res.row { #[cfg(feature = "sqlx-mysql")] @@ -214,6 +153,7 @@ macro_rules! try_getable_mysql { use sqlx::Row; row.try_get::, _>(column.as_str()) .map_err(crate::sqlx_error_to_query_err) + .and_then(|opt| opt.ok_or_else(TryGetError::Null)) } #[cfg(feature = "sqlx-postgres")] QueryResultRow::SqlxPostgres(_) => { @@ -224,13 +164,7 @@ macro_rules! try_getable_mysql { panic!("{} unsupported by sqlx-sqlite", stringify!($type)) } #[cfg(feature = "mock")] - QueryResultRow::Mock(row) => match row.try_get(column.as_str()) { - Ok(v) => Ok(Some(v)), - Err(e) => { - debug_print!("{:#?}", e.to_string()); - Ok(None) - } - }, + QueryResultRow::Mock(row) => row.try_get(column.as_str()).map_err(|_| TryGetError::Null), } } } @@ -240,31 +174,7 @@ macro_rules! try_getable_mysql { macro_rules! try_getable_postgres { ( $type: ty ) => { impl TryGetable for $type { - fn try_get(res: &QueryResult, pre: &str, col: &str) -> Result { - let column = format!("{}{}", pre, col); - match &res.row { - #[cfg(feature = "sqlx-mysql")] - QueryResultRow::SqlxMySql(_) => { - panic!("{} unsupported by sqlx-mysql", stringify!($type)) - } - #[cfg(feature = "sqlx-postgres")] - QueryResultRow::SqlxPostgres(row) => { - use sqlx::Row; - row.try_get(column.as_str()) - .map_err(crate::sqlx_error_to_query_err) - } - #[cfg(feature = "sqlx-sqlite")] - QueryResultRow::SqlxSqlite(_) => { - panic!("{} unsupported by sqlx-sqlite", stringify!($type)) - } - #[cfg(feature = "mock")] - QueryResultRow::Mock(row) => Ok(row.try_get(column.as_str())?), - } - } - } - - impl TryGetable for Option<$type> { - fn try_get(res: &QueryResult, pre: &str, col: &str) -> Result { + fn try_get(res: &QueryResult, pre: &str, col: &str) -> Result { let column = format!("{}{}", pre, col); match &res.row { #[cfg(feature = "sqlx-mysql")] @@ -276,19 +186,14 @@ macro_rules! try_getable_postgres { use sqlx::Row; row.try_get::, _>(column.as_str()) .map_err(crate::sqlx_error_to_query_err) + .and_then(|opt| opt.ok_or_else(TryGetError::Null)) } #[cfg(feature = "sqlx-sqlite")] QueryResultRow::SqlxSqlite(_) => { panic!("{} unsupported by sqlx-sqlite", stringify!($type)) } #[cfg(feature = "mock")] - QueryResultRow::Mock(row) => match row.try_get(column.as_str()) { - Ok(v) => Ok(Some(v)), - Err(e) => { - debug_print!("{:#?}", e.to_string()); - Ok(None) - } - }, + QueryResultRow::Mock(row) => row.try_get(column.as_str()).map_err(|_| TryGetError::Null), } } } @@ -322,83 +227,36 @@ use rust_decimal::Decimal; #[cfg(feature = "with-rust_decimal")] impl TryGetable for Decimal { - fn try_get(res: &QueryResult, pre: &str, col: &str) -> Result { + fn try_get(res: &QueryResult, pre: &str, col: &str) -> Result { let column = format!("{}{}", pre, col); match &res.row { #[cfg(feature = "sqlx-mysql")] QueryResultRow::SqlxMySql(row) => { use sqlx::Row; - row.try_get(column.as_str()) + row.try_get::, _>(column.as_str()) .map_err(crate::sqlx_error_to_query_err) } #[cfg(feature = "sqlx-postgres")] QueryResultRow::SqlxPostgres(row) => { use sqlx::Row; - row.try_get(column.as_str()) + row.try_get::, _>(column.as_str()) .map_err(crate::sqlx_error_to_query_err) } #[cfg(feature = "sqlx-sqlite")] QueryResultRow::SqlxSqlite(row) => { use sqlx::Row; - let val: f64 = row + let val: Option = row .try_get(column.as_str()) .map_err(crate::sqlx_error_to_query_err)?; use rust_decimal::prelude::FromPrimitive; - Decimal::from_f64(val) - .ok_or_else(|| DbErr::Query("Failed to convert f64 into Decimal".to_owned())) - } - #[cfg(feature = "mock")] - QueryResultRow::Mock(row) => Ok(row.try_get(column.as_str())?), - } - } -} - -#[cfg(feature = "with-rust_decimal")] -impl TryGetable for Option { - fn try_get(res: &QueryResult, pre: &str, col: &str) -> Result { - let column = format!("{}{}", pre, col); - match &res.row { - #[cfg(feature = "sqlx-mysql")] - QueryResultRow::SqlxMySql(row) => { - use sqlx::Row; - match row.try_get(column.as_str()) { - Ok(v) => Ok(Some(v)), - Err(e) => { - debug_print!("{:#?}", e.to_string()); - Ok(None) - } - } - } - #[cfg(feature = "sqlx-postgres")] - QueryResultRow::SqlxPostgres(row) => { - use sqlx::Row; - match row.try_get(column.as_str()) { - Ok(v) => Ok(Some(v)), - Err(e) => { - debug_print!("{:#?}", e.to_string()); - Ok(None) - } - } - } - #[cfg(feature = "sqlx-sqlite")] - QueryResultRow::SqlxSqlite(_) => { - let result: Result = TryGetable::try_get(res, pre, col); - match result { - Ok(v) => Ok(Some(v)), - Err(e) => { - debug_print!("{:#?}", e.to_string()); - Ok(None) - } + match val { + Some(v) => Decimal::from_f64(v) + .ok_or_else(|| DbErr::Query("Failed to convert f64 into Decimal".to_owned())), + None => Err(TryGetError::Null) } } #[cfg(feature = "mock")] - QueryResultRow::Mock(row) => match row.try_get(column.as_str()) { - Ok(v) => Ok(Some(v)), - Err(e) => { - debug_print!("{:#?}", e.to_string()); - Ok(None) - } - }, + QueryResultRow::Mock(row) => row.try_get(column.as_str()).map_err(|_| TryGetError::Null), } } } From 4dadfd3f5108d93ea8db637123824cadc4567958 Mon Sep 17 00:00:00 2001 From: Marco Napetti Date: Thu, 26 Aug 2021 16:05:12 +0200 Subject: [PATCH 2/6] restore debug_print! for Mock variant --- src/executor/query.rs | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/executor/query.rs b/src/executor/query.rs index f0f03c72..12666b7d 100644 --- a/src/executor/query.rs +++ b/src/executor/query.rs @@ -103,7 +103,10 @@ macro_rules! try_getable_all { .and_then(|opt| opt.ok_or_else(TryGetError::Null)) } #[cfg(feature = "mock")] - QueryResultRow::Mock(row) => row.try_get(column.as_str()).map_err(|_| TryGetError::Null), + QueryResultRow::Mock(row) => row.try_get(column.as_str()).map_err(|e| { + debug_print!("{:#?}", e.to_string()); + TryGetError::Null + }), } } } @@ -135,7 +138,10 @@ macro_rules! try_getable_unsigned { .and_then(|opt| opt.ok_or_else(TryGetError::Null)) } #[cfg(feature = "mock")] - QueryResultRow::Mock(row) => row.try_get(column.as_str()).map_err(|_| TryGetError::Null), + QueryResultRow::Mock(row) => row.try_get(column.as_str()).map_err(|e| { + debug_print!("{:#?}", e.to_string()); + TryGetError::Null + }), } } } @@ -164,7 +170,10 @@ macro_rules! try_getable_mysql { panic!("{} unsupported by sqlx-sqlite", stringify!($type)) } #[cfg(feature = "mock")] - QueryResultRow::Mock(row) => row.try_get(column.as_str()).map_err(|_| TryGetError::Null), + QueryResultRow::Mock(row) => row.try_get(column.as_str()).map_err(|e| { + debug_print!("{:#?}", e.to_string()); + TryGetError::Null + }), } } } @@ -193,7 +202,10 @@ macro_rules! try_getable_postgres { panic!("{} unsupported by sqlx-sqlite", stringify!($type)) } #[cfg(feature = "mock")] - QueryResultRow::Mock(row) => row.try_get(column.as_str()).map_err(|_| TryGetError::Null), + QueryResultRow::Mock(row) => row.try_get(column.as_str()).map_err(|e| { + debug_print!("{:#?}", e.to_string()); + TryGetError::Null + }), } } } @@ -256,7 +268,10 @@ impl TryGetable for Decimal { } } #[cfg(feature = "mock")] - QueryResultRow::Mock(row) => row.try_get(column.as_str()).map_err(|_| TryGetError::Null), + QueryResultRow::Mock(row) => row.try_get(column.as_str()).map_err(|e| { + debug_print!("{:#?}", e.to_string()); + TryGetError::Null + }), } } } From 344659f517d9de471bd6fb5f588050315f66b64d Mon Sep 17 00:00:00 2001 From: Marco Napetti Date: Thu, 26 Aug 2021 16:50:05 +0200 Subject: [PATCH 3/6] Fix test errors --- src/executor/query.rs | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/src/executor/query.rs b/src/executor/query.rs index 12666b7d..b1e8b7b3 100644 --- a/src/executor/query.rs +++ b/src/executor/query.rs @@ -85,22 +85,22 @@ macro_rules! try_getable_all { QueryResultRow::SqlxMySql(row) => { use sqlx::Row; row.try_get::, _>(column.as_str()) - .map_err(crate::sqlx_error_to_query_err) - .and_then(|opt| opt.ok_or_else(TryGetError::Null)) + .map_err(|e| TryGetError::DbErr(crate::sqlx_error_to_query_err(e))) + .and_then(|opt| opt.ok_or_else(|| TryGetError::Null)) } #[cfg(feature = "sqlx-postgres")] QueryResultRow::SqlxPostgres(row) => { use sqlx::Row; row.try_get::, _>(column.as_str()) - .map_err(crate::sqlx_error_to_query_err) - .and_then(|opt| opt.ok_or_else(TryGetError::Null)) + .map_err(|e| TryGetError::DbErr(crate::sqlx_error_to_query_err(e))) + .and_then(|opt| opt.ok_or_else(|| TryGetError::Null)) } #[cfg(feature = "sqlx-sqlite")] QueryResultRow::SqlxSqlite(row) => { use sqlx::Row; row.try_get::, _>(column.as_str()) - .map_err(crate::sqlx_error_to_query_err) - .and_then(|opt| opt.ok_or_else(TryGetError::Null)) + .map_err(|e| TryGetError::DbErr(crate::sqlx_error_to_query_err(e))) + .and_then(|opt| opt.ok_or_else(|| TryGetError::Null)) } #[cfg(feature = "mock")] QueryResultRow::Mock(row) => row.try_get(column.as_str()).map_err(|e| { @@ -123,8 +123,8 @@ macro_rules! try_getable_unsigned { QueryResultRow::SqlxMySql(row) => { use sqlx::Row; row.try_get::, _>(column.as_str()) - .map_err(crate::sqlx_error_to_query_err) - .and_then(|opt| opt.ok_or_else(TryGetError::Null)) + .map_err(|e| TryGetError::DbErr(crate::sqlx_error_to_query_err(e))) + .and_then(|opt| opt.ok_or_else(|| TryGetError::Null)) } #[cfg(feature = "sqlx-postgres")] QueryResultRow::SqlxPostgres(_) => { @@ -134,8 +134,8 @@ macro_rules! try_getable_unsigned { QueryResultRow::SqlxSqlite(row) => { use sqlx::Row; row.try_get::, _>(column.as_str()) - .map_err(crate::sqlx_error_to_query_err) - .and_then(|opt| opt.ok_or_else(TryGetError::Null)) + .map_err(|e| TryGetError::DbErr(crate::sqlx_error_to_query_err(e))) + .and_then(|opt| opt.ok_or_else(|| TryGetError::Null)) } #[cfg(feature = "mock")] QueryResultRow::Mock(row) => row.try_get(column.as_str()).map_err(|e| { @@ -158,8 +158,8 @@ macro_rules! try_getable_mysql { QueryResultRow::SqlxMySql(row) => { use sqlx::Row; row.try_get::, _>(column.as_str()) - .map_err(crate::sqlx_error_to_query_err) - .and_then(|opt| opt.ok_or_else(TryGetError::Null)) + .map_err(|e| TryGetError::DbErr(crate::sqlx_error_to_query_err(e))) + .and_then(|opt| opt.ok_or_else(|| TryGetError::Null)) } #[cfg(feature = "sqlx-postgres")] QueryResultRow::SqlxPostgres(_) => { @@ -194,8 +194,8 @@ macro_rules! try_getable_postgres { QueryResultRow::SqlxPostgres(row) => { use sqlx::Row; row.try_get::, _>(column.as_str()) - .map_err(crate::sqlx_error_to_query_err) - .and_then(|opt| opt.ok_or_else(TryGetError::Null)) + .map_err(|e| TryGetError::DbErr(crate::sqlx_error_to_query_err(e))) + .and_then(|opt| opt.ok_or_else(|| TryGetError::Null)) } #[cfg(feature = "sqlx-sqlite")] QueryResultRow::SqlxSqlite(_) => { @@ -246,24 +246,26 @@ impl TryGetable for Decimal { QueryResultRow::SqlxMySql(row) => { use sqlx::Row; row.try_get::, _>(column.as_str()) - .map_err(crate::sqlx_error_to_query_err) + .map_err(|e| TryGetError::DbErr(crate::sqlx_error_to_query_err(e))) + .and_then(|opt| opt.ok_or_else(|| TryGetError::Null)) } #[cfg(feature = "sqlx-postgres")] QueryResultRow::SqlxPostgres(row) => { use sqlx::Row; row.try_get::, _>(column.as_str()) - .map_err(crate::sqlx_error_to_query_err) + .map_err(|e| TryGetError::DbErr(crate::sqlx_error_to_query_err(e))) + .and_then(|opt| opt.ok_or_else(|| TryGetError::Null)) } #[cfg(feature = "sqlx-sqlite")] QueryResultRow::SqlxSqlite(row) => { use sqlx::Row; let val: Option = row .try_get(column.as_str()) - .map_err(crate::sqlx_error_to_query_err)?; + .map_err(|e| TryGetError::DbErr(crate::sqlx_error_to_query_err(e)))?; use rust_decimal::prelude::FromPrimitive; match val { Some(v) => Decimal::from_f64(v) - .ok_or_else(|| DbErr::Query("Failed to convert f64 into Decimal".to_owned())), + .ok_or_else(|| TryGetError::DbErr(DbErr::Query("Failed to convert f64 into Decimal".to_owned()))), None => Err(TryGetError::Null) } } From 8f0f8a193b25fe8deec1b933b25a8c2af06d0c57 Mon Sep 17 00:00:00 2001 From: Marco Napetti Date: Thu, 26 Aug 2021 19:54:33 +0200 Subject: [PATCH 4/6] Fix clippy lint --- src/executor/query.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/executor/query.rs b/src/executor/query.rs index b1e8b7b3..08728081 100644 --- a/src/executor/query.rs +++ b/src/executor/query.rs @@ -86,21 +86,21 @@ macro_rules! try_getable_all { use sqlx::Row; row.try_get::, _>(column.as_str()) .map_err(|e| TryGetError::DbErr(crate::sqlx_error_to_query_err(e))) - .and_then(|opt| opt.ok_or_else(|| TryGetError::Null)) + .and_then(|opt| opt.ok_or(TryGetError::Null)) } #[cfg(feature = "sqlx-postgres")] QueryResultRow::SqlxPostgres(row) => { use sqlx::Row; row.try_get::, _>(column.as_str()) .map_err(|e| TryGetError::DbErr(crate::sqlx_error_to_query_err(e))) - .and_then(|opt| opt.ok_or_else(|| TryGetError::Null)) + .and_then(|opt| opt.ok_or(TryGetError::Null)) } #[cfg(feature = "sqlx-sqlite")] QueryResultRow::SqlxSqlite(row) => { use sqlx::Row; row.try_get::, _>(column.as_str()) .map_err(|e| TryGetError::DbErr(crate::sqlx_error_to_query_err(e))) - .and_then(|opt| opt.ok_or_else(|| TryGetError::Null)) + .and_then(|opt| opt.ok_or(TryGetError::Null)) } #[cfg(feature = "mock")] QueryResultRow::Mock(row) => row.try_get(column.as_str()).map_err(|e| { @@ -124,7 +124,7 @@ macro_rules! try_getable_unsigned { use sqlx::Row; row.try_get::, _>(column.as_str()) .map_err(|e| TryGetError::DbErr(crate::sqlx_error_to_query_err(e))) - .and_then(|opt| opt.ok_or_else(|| TryGetError::Null)) + .and_then(|opt| opt.ok_or(TryGetError::Null)) } #[cfg(feature = "sqlx-postgres")] QueryResultRow::SqlxPostgres(_) => { @@ -135,7 +135,7 @@ macro_rules! try_getable_unsigned { use sqlx::Row; row.try_get::, _>(column.as_str()) .map_err(|e| TryGetError::DbErr(crate::sqlx_error_to_query_err(e))) - .and_then(|opt| opt.ok_or_else(|| TryGetError::Null)) + .and_then(|opt| opt.ok_or(TryGetError::Null)) } #[cfg(feature = "mock")] QueryResultRow::Mock(row) => row.try_get(column.as_str()).map_err(|e| { @@ -159,7 +159,7 @@ macro_rules! try_getable_mysql { use sqlx::Row; row.try_get::, _>(column.as_str()) .map_err(|e| TryGetError::DbErr(crate::sqlx_error_to_query_err(e))) - .and_then(|opt| opt.ok_or_else(|| TryGetError::Null)) + .and_then(|opt| opt.ok_or(TryGetError::Null)) } #[cfg(feature = "sqlx-postgres")] QueryResultRow::SqlxPostgres(_) => { @@ -195,7 +195,7 @@ macro_rules! try_getable_postgres { use sqlx::Row; row.try_get::, _>(column.as_str()) .map_err(|e| TryGetError::DbErr(crate::sqlx_error_to_query_err(e))) - .and_then(|opt| opt.ok_or_else(|| TryGetError::Null)) + .and_then(|opt| opt.ok_or(TryGetError::Null)) } #[cfg(feature = "sqlx-sqlite")] QueryResultRow::SqlxSqlite(_) => { @@ -247,14 +247,14 @@ impl TryGetable for Decimal { use sqlx::Row; row.try_get::, _>(column.as_str()) .map_err(|e| TryGetError::DbErr(crate::sqlx_error_to_query_err(e))) - .and_then(|opt| opt.ok_or_else(|| TryGetError::Null)) + .and_then(|opt| opt.ok_or(TryGetError::Null)) } #[cfg(feature = "sqlx-postgres")] QueryResultRow::SqlxPostgres(row) => { use sqlx::Row; row.try_get::, _>(column.as_str()) .map_err(|e| TryGetError::DbErr(crate::sqlx_error_to_query_err(e))) - .and_then(|opt| opt.ok_or_else(|| TryGetError::Null)) + .and_then(|opt| opt.ok_or(TryGetError::Null)) } #[cfg(feature = "sqlx-sqlite")] QueryResultRow::SqlxSqlite(row) => { From 4af7d1c6c216abc723f91c15d337ced21d1248e2 Mon Sep 17 00:00:00 2001 From: Billy Chan Date: Sun, 29 Aug 2021 22:20:06 +0800 Subject: [PATCH 5/6] Update Workflow --- .github/workflows/rust.yml | 90 +++++++++++++++++++++++++++++++------- 1 file changed, 74 insertions(+), 16 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 2aa1f90d..426cb003 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -11,12 +11,11 @@ env: jobs: - compile: - name: Compile + compile-sqlite: + name: Compile SQLite runs-on: ubuntu-20.04 strategy: matrix: - database: [sqlite, mysql, postgres] runtime: [async-std, actix, tokio] tls: [native-tls, rustls] steps: @@ -35,13 +34,77 @@ jobs: ~/.cargo/git Cargo.lock target - key: ${{ github.sha }}-${{ github.run_id }}-${{ runner.os }}-${{ matrix.database }}-${{ matrix.runtime }}-${{ matrix.tls }} + key: ${{ github.sha }}-${{ github.run_id }}-${{ runner.os }}-sqlite-${{ matrix.runtime }}-${{ matrix.tls }} - uses: actions-rs/cargo@v1 with: command: test args: > - --features default,sqlx-${{ matrix.database }},runtime-${{ matrix.runtime }}-${{ matrix.tls }} + --features default,sqlx-sqlite,runtime-${{ matrix.runtime }}-${{ matrix.tls }} + --no-run + + compile-mysql: + name: Compile MySQL + runs-on: ubuntu-20.04 + strategy: + matrix: + runtime: [async-std, actix, tokio] + tls: [native-tls, rustls] + steps: + - uses: actions/checkout@v2 + + - uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: stable + override: true + + - uses: actions/cache@v2 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + Cargo.lock + target + key: ${{ github.sha }}-${{ github.run_id }}-${{ runner.os }}-mysql-${{ matrix.runtime }}-${{ matrix.tls }} + + - uses: actions-rs/cargo@v1 + with: + command: test + args: > + --features default,sqlx-mysql,runtime-${{ matrix.runtime }}-${{ matrix.tls }} + --no-run + + compile-postgres: + name: Compile PostgreSQL + runs-on: ubuntu-20.04 + strategy: + matrix: + runtime: [async-std, actix, tokio] + tls: [native-tls, rustls] + steps: + - uses: actions/checkout@v2 + + - uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: stable + override: true + + - uses: actions/cache@v2 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + Cargo.lock + target + key: ${{ github.sha }}-${{ github.run_id }}-${{ runner.os }}-postgres-${{ matrix.runtime }}-${{ matrix.tls }} + + - uses: actions-rs/cargo@v1 + with: + command: test + args: > + --features default,sqlx-postgres,runtime-${{ matrix.runtime }}-${{ matrix.tls }} --no-run test: @@ -89,6 +152,7 @@ jobs: strategy: matrix: os: [ubuntu-latest] + path: [async-std, tokio] steps: - uses: actions/checkout@v2 @@ -102,18 +166,12 @@ jobs: with: command: build args: > - --manifest-path examples/async-std/Cargo.toml - - - uses: actions-rs/cargo@v1 - with: - command: build - args: > - --manifest-path examples/tokio/Cargo.toml + --manifest-path examples/${{ matrix.path }}/Cargo.toml sqlite: name: SQLite runs-on: ubuntu-20.04 - needs: compile + needs: compile-sqlite env: DATABASE_URL: "sqlite::memory:" strategy: @@ -147,7 +205,7 @@ jobs: mysql: name: MySQL runs-on: ubuntu-20.04 - needs: compile + needs: compile-mysql env: DATABASE_URL: "mysql://root:@localhost" strategy: @@ -199,7 +257,7 @@ jobs: mariadb: name: MariaDB runs-on: ubuntu-20.04 - needs: compile + needs: compile-mysql env: DATABASE_URL: "mysql://root:@localhost" strategy: @@ -251,7 +309,7 @@ jobs: postgres: name: Postgres runs-on: ubuntu-20.04 - needs: compile + needs: compile-postgres env: DATABASE_URL: "postgres://root:root@localhost" strategy: From 8ce4b0abccde289da848faf568bf11b465a31b31 Mon Sep 17 00:00:00 2001 From: Chris Tsang Date: Mon, 30 Aug 2021 02:36:19 +0800 Subject: [PATCH 6/6] 0.1.3 --- CHANGELOG.md | 6 ++++++ Cargo.toml | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ef38d62..c9035c40 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). +## 0.1.3 - 2021-08-30 + +- [[#108]] Remove impl TryGetable for Option + +[#108]: https://github.com/SeaQL/sea-orm/issues/108 + ## 0.1.2 - 2021-08-23 - [[#68]] Added `DateTimeWithTimeZone` as supported attribute type diff --git a/Cargo.toml b/Cargo.toml index ca61c819..e021b82a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,7 @@ members = [ [package] name = "sea-orm" -version = "0.1.2" +version = "0.1.3" authors = ["Chris Tsang "] edition = "2018" description = "🐚 An async & dynamic ORM for Rust"