diff --git a/Cargo.toml b/Cargo.toml index 47f075eb8..a715025e7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -30,7 +30,7 @@ futures-util = { version = "^0.3" } log = { version = "^0.4", optional = true } rust_decimal = { version = "^1", optional = true } sea-orm-macros = { version = "^0.4.1", path = "sea-orm-macros", optional = true } -sea-query = { version = "^0.19.1", features = ["thread-safe"] } +sea-query = { version = "^0.19.4", features = ["thread-safe"] } sea-strum = { version = "^0.21", features = ["derive", "sea-orm"] } serde = { version = "^1.0", features = ["derive"] } serde_json = { version = "^1", optional = true } diff --git a/src/executor/query.rs b/src/executor/query.rs index f50703845..c76d7bcca 100644 --- a/src/executor/query.rs +++ b/src/executor/query.rs @@ -199,15 +199,20 @@ macro_rules! try_getable_mysql { }; } -macro_rules! try_getable_postgres { +macro_rules! try_getable_date_time { ( $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)) + QueryResultRow::SqlxMySql(row) => { + use chrono::{DateTime, Utc}; + 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(TryGetError::Null)) + .map(|v| v.into()) } #[cfg(feature = "sqlx-postgres")] QueryResultRow::SqlxPostgres(row) => { @@ -217,8 +222,13 @@ macro_rules! try_getable_postgres { .and_then(|opt| opt.ok_or(TryGetError::Null)) } #[cfg(feature = "sqlx-sqlite")] - QueryResultRow::SqlxSqlite(_) => { - panic!("{} unsupported by sqlx-sqlite", stringify!($type)) + QueryResultRow::SqlxSqlite(row) => { + use chrono::{DateTime, Utc}; + 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(TryGetError::Null)) + .map(|v| v.into()) } #[cfg(feature = "mock")] #[allow(unused_variables)] @@ -259,7 +269,7 @@ try_getable_all!(chrono::NaiveTime); try_getable_all!(chrono::NaiveDateTime); #[cfg(feature = "with-chrono")] -try_getable_postgres!(chrono::DateTime); +try_getable_date_time!(chrono::DateTime); #[cfg(feature = "with-rust_decimal")] use rust_decimal::Decimal; diff --git a/tests/timestamp_tests.rs b/tests/timestamp_tests.rs index f0d6ca771..cad352709 100644 --- a/tests/timestamp_tests.rs +++ b/tests/timestamp_tests.rs @@ -4,7 +4,11 @@ pub use common::{features::*, setup::*, TestContext}; use sea_orm::{entity::prelude::*, DatabaseConnection, IntoActiveModel}; #[sea_orm_macros::test] -#[cfg(feature = "sqlx-postgres")] +#[cfg(any( + feature = "sqlx-mysql", + feature = "sqlx-sqlite", + feature = "sqlx-postgres" +))] async fn main() -> Result<(), DbErr> { let ctx = TestContext::new("bakery_chain_schema_timestamp_tests").await; create_tables(&ctx.db).await?;