From b775027feee0411ef70eec14474fb5a46ada0e36 Mon Sep 17 00:00:00 2001 From: Billy Chan Date: Tue, 5 Mar 2024 15:31:58 +0800 Subject: [PATCH 01/21] Explicit `StringLen` on `ColumnType::String` (#2123) --- examples/basic/src/example_filling.rs | 2 +- examples/basic/src/example_fruit.rs | 2 +- .../1143/src/entity/sea_orm_active_enums.rs | 2 +- issues/1599/entity/src/filling.rs | 2 +- sea-orm-codegen/src/entity/base_entity.rs | 4 +-- sea-orm-codegen/src/entity/column.rs | 14 +++++----- sea-orm-codegen/src/entity/writer.rs | 8 +++--- sea-orm-codegen/tests/expanded/filling.rs | 2 +- sea-orm-codegen/tests/expanded/fruit.rs | 2 +- sea-orm-codegen/tests/expanded/vendor.rs | 2 +- .../expanded_with_schema_name/filling.rs | 2 +- .../tests/expanded_with_schema_name/fruit.rs | 2 +- .../tests/expanded_with_schema_name/vendor.rs | 2 +- sea-orm-macros/src/lib.rs | 8 +++--- src/entity/active_enum.rs | 28 +++++++++++++------ src/entity/column.rs | 8 ++++-- src/entity/mod.rs | 2 +- src/entity/primary_key.rs | 2 +- src/tests_cfg/cake_expanded.rs | 2 +- src/tests_cfg/filling.rs | 2 +- src/tests_cfg/lunch_set_expanded.rs | 2 +- .../features/dyn_table_name_lazy_static.rs | 2 +- tests/common/features/event_trigger.rs | 2 +- tests/common/features/schema.rs | 9 ++++-- tests/common/features/sea_orm_active_enums.rs | 2 +- tests/value_type_tests.rs | 2 +- 26 files changed, 67 insertions(+), 50 deletions(-) diff --git a/examples/basic/src/example_filling.rs b/examples/basic/src/example_filling.rs index fe0545064..9d725ec6e 100644 --- a/examples/basic/src/example_filling.rs +++ b/examples/basic/src/example_filling.rs @@ -55,7 +55,7 @@ impl ColumnTrait for Column { fn def(&self) -> ColumnDef { match self { Self::Id => ColumnType::Integer.def(), - Self::Name => ColumnType::string(None).def(), + Self::Name => ColumnType::String(StringLen::None).def(), } } } diff --git a/examples/basic/src/example_fruit.rs b/examples/basic/src/example_fruit.rs index 038753299..d0ffebf73 100644 --- a/examples/basic/src/example_fruit.rs +++ b/examples/basic/src/example_fruit.rs @@ -62,7 +62,7 @@ impl ColumnTrait for Column { fn def(&self) -> ColumnDef { match self { Self::Id => ColumnType::Integer.def(), - Self::Name => ColumnType::string(None).def(), + Self::Name => ColumnType::String(StringLen::None).def(), Self::CakeId => ColumnType::Integer.def(), } } diff --git a/issues/1143/src/entity/sea_orm_active_enums.rs b/issues/1143/src/entity/sea_orm_active_enums.rs index 887edf62c..cf7a5d440 100644 --- a/issues/1143/src/entity/sea_orm_active_enums.rs +++ b/issues/1143/src/entity/sea_orm_active_enums.rs @@ -1,7 +1,7 @@ use sea_orm::entity::prelude::*; #[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum)] -#[sea_orm(rs_type = "String", db_type = "string(Some(1))")] +#[sea_orm(rs_type = "String", db_type = "String(StringLen::N(1))")] pub enum Category { #[sea_orm(string_value = "B")] Big, diff --git a/issues/1599/entity/src/filling.rs b/issues/1599/entity/src/filling.rs index 30d1009ff..afef9eeb4 100644 --- a/issues/1599/entity/src/filling.rs +++ b/issues/1599/entity/src/filling.rs @@ -55,7 +55,7 @@ impl ColumnTrait for Column { fn def(&self) -> ColumnDef { match self { Self::Id => ColumnType::Integer.def(), - Self::Name => ColumnType::string(None).def(), + Self::Name => ColumnType::String(StringLen::None).def(), Self::VendorId => ColumnType::Integer.def().nullable(), } } diff --git a/sea-orm-codegen/src/entity/base_entity.rs b/sea-orm-codegen/src/entity/base_entity.rs index 72ea224ee..240e94ce6 100644 --- a/sea-orm-codegen/src/entity/base_entity.rs +++ b/sea-orm-codegen/src/entity/base_entity.rs @@ -267,7 +267,7 @@ impl Entity { #[cfg(test)] mod tests { use quote::{format_ident, quote}; - use sea_query::{ColumnType, ForeignKeyAction}; + use sea_query::{ColumnType, ForeignKeyAction, StringLen}; use crate::{Column, DateTimeCrate, Entity, PrimaryKey, Relation, RelationType}; @@ -284,7 +284,7 @@ mod tests { }, Column { name: "name".to_owned(), - col_type: ColumnType::string(None), + col_type: ColumnType::String(StringLen::None), auto_increment: false, not_null: false, unique: false, diff --git a/sea-orm-codegen/src/entity/column.rs b/sea-orm-codegen/src/entity/column.rs index ce4210506..e8e030ef4 100644 --- a/sea-orm-codegen/src/entity/column.rs +++ b/sea-orm-codegen/src/entity/column.rs @@ -115,8 +115,8 @@ impl Column { None => quote! { ColumnType::Char(None) }, }, ColumnType::String(s) => match s { - StringLen::N(s) => quote! { ColumnType::string(Some(#s)) }, - StringLen::None => quote! { ColumnType::string(None) }, + StringLen::N(s) => quote! { ColumnType::String(StringLen::N(#s)) }, + StringLen::None => quote! { ColumnType::String(StringLen::None) }, StringLen::Max => quote! { ColumnType::String(StringLen::Max) }, }, ColumnType::Text => quote! { ColumnType::Text }, @@ -302,8 +302,8 @@ mod tests { }; } vec![ - make_col!("id", ColumnType::string(Some(255))), - make_col!("id", ColumnType::string(None)), + make_col!("id", ColumnType::String(StringLen::N(255))), + make_col!("id", ColumnType::String(StringLen::None)), make_col!( "cake_id", ColumnType::Custom(SeaRc::new(Alias::new("cus_col"))) @@ -493,8 +493,8 @@ mod tests { fn test_get_def() { let columns = setup(); let col_defs = vec![ - "ColumnType::string(Some(255u32)).def()", - "ColumnType::string(None).def()", + "ColumnType::String(StringLen::N(255u32)).def()", + "ColumnType::String(StringLen::None).def()", "ColumnType::custom(\"cus_col\").def()", "ColumnType::TinyInteger.def()", "ColumnType::TinyUnsigned.def()", @@ -681,7 +681,7 @@ mod tests { assert_eq!( column.get_def().to_string(), quote! { - ColumnType::string(None).def().null() + ColumnType::String(StringLen::None).def().null() } .to_string() ); diff --git a/sea-orm-codegen/src/entity/writer.rs b/sea-orm-codegen/src/entity/writer.rs index f85f956dc..edfe8c7c6 100644 --- a/sea-orm-codegen/src/entity/writer.rs +++ b/sea-orm-codegen/src/entity/writer.rs @@ -841,7 +841,7 @@ mod tests { use pretty_assertions::assert_eq; use proc_macro2::TokenStream; use quote::quote; - use sea_query::{Alias, ColumnType, ForeignKeyAction, RcOrArc, SeaRc}; + use sea_query::{Alias, ColumnType, ForeignKeyAction, RcOrArc, SeaRc, StringLen}; use std::io::{self, BufRead, BufReader, Read}; fn setup() -> Vec { @@ -993,7 +993,7 @@ mod tests { }, Column { name: "name".to_owned(), - col_type: ColumnType::string(Some(255)), + col_type: ColumnType::String(StringLen::N(255)), auto_increment: false, not_null: true, unique: false, @@ -1020,7 +1020,7 @@ mod tests { }, Column { name: "name".to_owned(), - col_type: ColumnType::string(Some(255)), + col_type: ColumnType::String(StringLen::N(255)), auto_increment: false, not_null: true, unique: false, @@ -1074,7 +1074,7 @@ mod tests { }, Column { name: "_name_".to_owned(), - col_type: ColumnType::string(Some(255)), + col_type: ColumnType::String(StringLen::N(255)), auto_increment: false, not_null: true, unique: false, diff --git a/sea-orm-codegen/tests/expanded/filling.rs b/sea-orm-codegen/tests/expanded/filling.rs index c359b564a..b7fc8767b 100644 --- a/sea-orm-codegen/tests/expanded/filling.rs +++ b/sea-orm-codegen/tests/expanded/filling.rs @@ -44,7 +44,7 @@ impl ColumnTrait for Column { fn def(&self) -> ColumnDef { match self { Self::Id => ColumnType::Integer.def(), - Self::Name => ColumnType::string(Some(255u32)).def(), + Self::Name => ColumnType::String(StringLen::N(255u32)).def(), } } } diff --git a/sea-orm-codegen/tests/expanded/fruit.rs b/sea-orm-codegen/tests/expanded/fruit.rs index 6de130f3c..ed88853eb 100644 --- a/sea-orm-codegen/tests/expanded/fruit.rs +++ b/sea-orm-codegen/tests/expanded/fruit.rs @@ -49,7 +49,7 @@ impl ColumnTrait for Column { fn def(&self) -> ColumnDef { match self { Self::Id => ColumnType::Integer.def(), - Self::Name => ColumnType::string(Some(255u32)).def(), + Self::Name => ColumnType::String(StringLen::N(255u32)).def(), Self::CakeId => ColumnType::Integer.def().null(), } } diff --git a/sea-orm-codegen/tests/expanded/vendor.rs b/sea-orm-codegen/tests/expanded/vendor.rs index 793f9c1c4..c2f25b143 100644 --- a/sea-orm-codegen/tests/expanded/vendor.rs +++ b/sea-orm-codegen/tests/expanded/vendor.rs @@ -50,7 +50,7 @@ impl ColumnTrait for Column { fn def(&self) -> ColumnDef { match self { Self::Id => ColumnType::Integer.def(), - Self::Name => ColumnType::string(Some(255u32)).def(), + Self::Name => ColumnType::String(StringLen::N(255u32)).def(), Self::FruitId => ColumnType::Integer.def().null(), } } diff --git a/sea-orm-codegen/tests/expanded_with_schema_name/filling.rs b/sea-orm-codegen/tests/expanded_with_schema_name/filling.rs index 606e20181..4aa76b493 100644 --- a/sea-orm-codegen/tests/expanded_with_schema_name/filling.rs +++ b/sea-orm-codegen/tests/expanded_with_schema_name/filling.rs @@ -48,7 +48,7 @@ impl ColumnTrait for Column { fn def(&self) -> ColumnDef { match self { Self::Id => ColumnType::Integer.def(), - Self::Name => ColumnType::string(Some(255u32)).def(), + Self::Name => ColumnType::String(StringLen::N(255u32)).def(), } } } diff --git a/sea-orm-codegen/tests/expanded_with_schema_name/fruit.rs b/sea-orm-codegen/tests/expanded_with_schema_name/fruit.rs index 57e2cc155..1b3b73dd6 100644 --- a/sea-orm-codegen/tests/expanded_with_schema_name/fruit.rs +++ b/sea-orm-codegen/tests/expanded_with_schema_name/fruit.rs @@ -53,7 +53,7 @@ impl ColumnTrait for Column { fn def(&self) -> ColumnDef { match self { Self::Id => ColumnType::Integer.def(), - Self::Name => ColumnType::string(Some(255u32)).def(), + Self::Name => ColumnType::String(StringLen::N(255u32)).def(), Self::CakeId => ColumnType::Integer.def().null(), } } diff --git a/sea-orm-codegen/tests/expanded_with_schema_name/vendor.rs b/sea-orm-codegen/tests/expanded_with_schema_name/vendor.rs index 14e714926..9736c5760 100644 --- a/sea-orm-codegen/tests/expanded_with_schema_name/vendor.rs +++ b/sea-orm-codegen/tests/expanded_with_schema_name/vendor.rs @@ -54,7 +54,7 @@ impl ColumnTrait for Column { fn def(&self) -> ColumnDef { match self { Self::Id => ColumnType::Integer.def(), - Self::Name => ColumnType::string(Some(255u32)).def(), + Self::Name => ColumnType::String(StringLen::N(255u32)).def(), Self::FruitId => ColumnType::Integer.def().null(), } } diff --git a/sea-orm-macros/src/lib.rs b/sea-orm-macros/src/lib.rs index 23aa197f6..db7e84b39 100644 --- a/sea-orm-macros/src/lib.rs +++ b/sea-orm-macros/src/lib.rs @@ -60,7 +60,7 @@ mod strum; /// # fn def(&self) -> ColumnDef { /// # match self { /// # Self::Id => ColumnType::Integer.def(), -/// # Self::Name => ColumnType::string(None).def(), +/// # Self::Name => ColumnType::String(StringLen::None).def(), /// # } /// # } /// # } @@ -344,7 +344,7 @@ pub fn derive_custom_column(input: TokenStream) -> TokenStream { /// # fn def(&self) -> ColumnDef { /// # match self { /// # Self::Id => ColumnType::Integer.def(), -/// # Self::Name => ColumnType::string(None).def(), +/// # Self::Name => ColumnType::String(StringLen::None).def(), /// # } /// # } /// # } @@ -417,7 +417,7 @@ pub fn derive_model(input: TokenStream) -> TokenStream { /// # fn def(&self) -> ColumnDef { /// # match self { /// # Self::Id => ColumnType::Integer.def(), -/// # Self::Name => ColumnType::string(None).def(), +/// # Self::Name => ColumnType::String(StringLen::None).def(), /// # } /// # } /// # } @@ -503,7 +503,7 @@ pub fn derive_into_active_model(input: TokenStream) -> TokenStream { /// # fn def(&self) -> ColumnDef { /// # match self { /// # Self::Id => ColumnType::Integer.def(), -/// # Self::Name => ColumnType::string(None).def(), +/// # Self::Name => ColumnType::String(StringLen::None).def(), /// # } /// # } /// # } diff --git a/src/entity/active_enum.rs b/src/entity/active_enum.rs index 7425913bf..2222aff6d 100644 --- a/src/entity/active_enum.rs +++ b/src/entity/active_enum.rs @@ -20,7 +20,7 @@ use sea_query::{DynIden, Expr, Nullable, SimpleExpr, Value, ValueType}; /// #[derive(Debug, PartialEq, EnumIter, DeriveActiveEnum, DeriveDisplay)] /// #[sea_orm( /// rs_type = "String", -/// db_type = "string(Some(1))", +/// db_type = "String(StringLen::N(1))", /// enum_name = "category" /// )] /// pub enum DeriveCategory { @@ -74,7 +74,7 @@ use sea_query::{DynIden, Expr, Nullable, SimpleExpr, Value, ValueType}; /// /// fn db_type() -> ColumnDef { /// // The macro attribute `db_type` is being pasted here -/// ColumnType::string(Some(1)).def() +/// ColumnType::String(StringLen::N(1)).def() /// } /// } /// ``` @@ -86,7 +86,7 @@ use sea_query::{DynIden, Expr, Nullable, SimpleExpr, Value, ValueType}; /// /// // Define the `Category` active enum /// #[derive(Debug, Clone, PartialEq, EnumIter, DeriveActiveEnum, DeriveDisplay)] -/// #[sea_orm(rs_type = "String", db_type = "string(Some(1))")] +/// #[sea_orm(rs_type = "String", db_type = "String(StringLen::N(1))")] /// pub enum Category { /// #[sea_orm(string_value = "B")] /// Big, @@ -205,7 +205,11 @@ where #[cfg(test)] mod tests { use crate as sea_orm; - use crate::{error::*, sea_query::SeaRc, *}; + use crate::{ + error::*, + sea_query::{SeaRc, StringLen}, + *, + }; use pretty_assertions::assert_eq; #[test] @@ -246,14 +250,14 @@ mod tests { } fn db_type() -> ColumnDef { - ColumnType::string(Some(1)).def() + ColumnType::String(StringLen::N(1)).def() } } #[derive(Debug, PartialEq, Eq, EnumIter, DeriveActiveEnum, DeriveDisplay)] #[sea_orm( rs_type = "String", - db_type = "string(Some(1))", + db_type = "String(StringLen::N(1))", enum_name = "category" )] pub enum DeriveCategory { @@ -293,8 +297,14 @@ mod tests { Some(DeriveCategory::Small) ); - assert_eq!(Category::db_type(), ColumnType::string(Some(1)).def()); - assert_eq!(DeriveCategory::db_type(), ColumnType::string(Some(1)).def()); + assert_eq!( + Category::db_type(), + ColumnType::String(StringLen::N(1)).def() + ); + assert_eq!( + DeriveCategory::db_type(), + ColumnType::String(StringLen::N(1)).def() + ); assert_eq!( Category::name().to_string(), @@ -496,7 +506,7 @@ mod tests { #[derive(Clone, Debug, PartialEq, EnumIter, DeriveActiveEnum, DeriveDisplay)] #[sea_orm( rs_type = "String", - db_type = "string(None)", + db_type = "String(StringLen::None)", enum_name = "conflicting_string_values" )] pub enum ConflictingStringValues { diff --git a/src/entity/column.rs b/src/entity/column.rs index 8256557e5..5a2a94c64 100644 --- a/src/entity/column.rs +++ b/src/entity/column.rs @@ -620,11 +620,15 @@ mod tests { ); assert_eq!( hello::Column::Twelve.def(), - ColumnType::string(None).def().default("twelve_value") + ColumnType::String(StringLen::None) + .def() + .default("twelve_value") ); assert_eq!( hello::Column::TwelveTwo.def(), - ColumnType::string(None).def().default("twelve_value") + ColumnType::String(StringLen::None) + .def() + .default("twelve_value") ); } diff --git a/src/entity/mod.rs b/src/entity/mod.rs index 131378229..d58d4a4bb 100644 --- a/src/entity/mod.rs +++ b/src/entity/mod.rs @@ -80,7 +80,7 @@ /// fn def(&self) -> ColumnDef { /// match self { /// Self::Id => ColumnType::Integer.def(), -/// Self::Name => ColumnType::string(None).def(), +/// Self::Name => ColumnType::String(StringLen::None).def(), /// } /// } /// } diff --git a/src/entity/primary_key.rs b/src/entity/primary_key.rs index b4e69ca1b..ee73f3d06 100644 --- a/src/entity/primary_key.rs +++ b/src/entity/primary_key.rs @@ -170,7 +170,7 @@ mod tests { #[derive(Clone, Debug, PartialEq, Eq, EnumIter, DeriveActiveEnum)] #[sea_orm( rs_type = "String", - db_type = "string(Some(1))", + db_type = "String(StringLen::N(1))", enum_name = "category" )] pub enum DeriveCategory { diff --git a/src/tests_cfg/cake_expanded.rs b/src/tests_cfg/cake_expanded.rs index 7675a7651..8e301fab9 100644 --- a/src/tests_cfg/cake_expanded.rs +++ b/src/tests_cfg/cake_expanded.rs @@ -46,7 +46,7 @@ impl ColumnTrait for Column { fn def(&self) -> ColumnDef { match self { Self::Id => ColumnType::Integer.def(), - Self::Name => ColumnType::string(None).def(), + Self::Name => ColumnType::String(StringLen::None).def(), } } } diff --git a/src/tests_cfg/filling.rs b/src/tests_cfg/filling.rs index 055e2421b..9eff6475d 100644 --- a/src/tests_cfg/filling.rs +++ b/src/tests_cfg/filling.rs @@ -58,7 +58,7 @@ impl ColumnTrait for Column { fn def(&self) -> ColumnDef { match self { Self::Id => ColumnType::Integer.def(), - Self::Name => ColumnType::string(None).def(), + Self::Name => ColumnType::String(StringLen::None).def(), Self::VendorId => ColumnType::Integer.def().nullable(), } } diff --git a/src/tests_cfg/lunch_set_expanded.rs b/src/tests_cfg/lunch_set_expanded.rs index 0a904dba6..033d5e50a 100644 --- a/src/tests_cfg/lunch_set_expanded.rs +++ b/src/tests_cfg/lunch_set_expanded.rs @@ -49,7 +49,7 @@ impl ColumnTrait for Column { fn def(&self) -> ColumnDef { match self { Self::Id => ColumnType::Integer.def(), - Self::Name => ColumnType::string(None).def(), + Self::Name => ColumnType::String(StringLen::None).def(), Self::Tea => Tea::db_type().def(), } } diff --git a/tests/common/features/dyn_table_name_lazy_static.rs b/tests/common/features/dyn_table_name_lazy_static.rs index ada3b49e5..b8ef55f23 100644 --- a/tests/common/features/dyn_table_name_lazy_static.rs +++ b/tests/common/features/dyn_table_name_lazy_static.rs @@ -48,7 +48,7 @@ impl ColumnTrait for Column { fn def(&self) -> ColumnDef { match self { Self::Id => ColumnType::Integer.def(), - Self::Name => ColumnType::string(None).def(), + Self::Name => ColumnType::String(StringLen::None).def(), } } } diff --git a/tests/common/features/event_trigger.rs b/tests/common/features/event_trigger.rs index fd8e8707f..eaef6f8db 100644 --- a/tests/common/features/event_trigger.rs +++ b/tests/common/features/event_trigger.rs @@ -65,6 +65,6 @@ impl ValueType for Events { } fn column_type() -> ColumnType { - ColumnType::Array(RcOrArc::new(ColumnType::string(None))) + ColumnType::Array(RcOrArc::new(ColumnType::String(StringLen::None))) } } diff --git a/tests/common/features/schema.rs b/tests/common/features/schema.rs index d51d66c1d..7a8cf814a 100644 --- a/tests/common/features/schema.rs +++ b/tests/common/features/schema.rs @@ -508,7 +508,7 @@ pub async fn create_event_trigger_table(db: &DbConn) -> Result Result { .not_null() .primary_key(), ) - .col(ColumnDef::new(categories::Column::Categories).array(ColumnType::string(Some(1)))) + .col( + ColumnDef::new(categories::Column::Categories) + .array(ColumnType::String(StringLen::N(1))), + ) .to_owned(); create_table(db, &create_table_stmt, Categories).await @@ -733,7 +736,7 @@ pub async fn create_value_type_postgres_table(db: &DbConn) -> Result Date: Mon, 11 Mar 2024 02:14:46 +0800 Subject: [PATCH 02/21] Upstream Changes - 1 (#2145) * upstream changes * universal `#[sea_orm_macros::test]` * fix * fix * `ColumnTrait::into_returning_expr` * fix * fix * Do not pub sqlx_common --------- Co-authored-by: Chris Tsang --- sea-orm-macros/src/lib.rs | 5 + src/database/db_connection.rs | 12 +- src/database/mod.rs | 29 -- src/database/proxy.rs | 675 +----------------------------- src/database/stream/query.rs | 106 +---- src/database/transaction.rs | 104 +---- src/driver/mock.rs | 36 ++ src/driver/mod.rs | 2 +- src/driver/proxy.rs | 36 ++ src/driver/sqlx_common.rs | 52 ++- src/driver/sqlx_mysql.rs | 195 ++++++++- src/driver/sqlx_postgres.rs | 518 ++++++++++++++++++++++- src/driver/sqlx_sqlite.rs | 128 +++++- src/entity/column.rs | 10 +- src/error.rs | 10 - src/executor/insert.rs | 15 +- src/executor/update.rs | 16 +- tests/active_enum_tests.rs | 5 - tests/bits_tests.rs | 9 +- tests/byte_primary_key_tests.rs | 5 - tests/connection_tests.rs | 5 - tests/crud_tests.rs | 5 - tests/cursor_tests.rs | 5 - tests/delete_by_id_tests.rs | 25 +- tests/dyn_table_name_tests.rs | 14 +- tests/empty_insert_tests.rs | 5 - tests/enum_primary_key_tests.rs | 5 - tests/event_trigger_tests.rs | 9 +- tests/execute_unprepared_tests.rs | 7 +- tests/insert_default_tests.rs | 5 - tests/json_struct_tests.rs | 21 +- tests/json_vec_tests.rs | 30 +- tests/loader_tests.rs | 20 - tests/parallel_tests.rs | 5 - tests/pi_tests.rs | 14 +- tests/query_tests.rs | 45 -- tests/relational_tests.rs | 30 -- tests/returning_tests.rs | 40 +- tests/self_join_tests.rs | 5 - tests/sequential_op_tests.rs | 4 +- tests/sql_err_tests.rs | 9 +- tests/stream_tests.rs | 5 - tests/string_primary_key_tests.rs | 5 - tests/time_crate_tests.rs | 16 +- tests/timestamp_tests.rs | 25 +- tests/transaction_tests.rs | 50 --- tests/uuid_fmt_tests.rs | 14 +- tests/uuid_tests.rs | 5 - tests/value_type_tests.rs | 21 +- 49 files changed, 1120 insertions(+), 1297 deletions(-) diff --git a/sea-orm-macros/src/lib.rs b/sea-orm-macros/src/lib.rs index db7e84b39..0c9d11a00 100644 --- a/sea-orm-macros/src/lib.rs +++ b/sea-orm-macros/src/lib.rs @@ -810,6 +810,11 @@ pub fn test(_: TokenStream, input: TokenStream) -> TokenStream { quote::quote! ( #[test] + #[cfg(any( + feature = "sqlx-mysql", + feature = "sqlx-sqlite", + feature = "sqlx-postgres", + ))] #(#attrs)* fn #name() #ret { let _ = ::tracing_subscriber::fmt() diff --git a/src/database/db_connection.rs b/src/database/db_connection.rs index 2cf5577a4..75970c20d 100644 --- a/src/database/db_connection.rs +++ b/src/database/db_connection.rs @@ -579,14 +579,10 @@ impl DbBackend { /// Check if the database supports `RETURNING` syntax on insert and update pub fn support_returning(&self) -> bool { - #[cfg(not(feature = "sqlite-use-returning-for-3_35"))] - { - matches!(self, Self::Postgres) - } - - #[cfg(feature = "sqlite-use-returning-for-3_35")] - { - matches!(self, Self::Postgres | Self::Sqlite) + match self { + Self::Postgres => true, + Self::Sqlite if cfg!(feature = "sqlite-use-returning-for-3_35") => true, + _ => false, } } } diff --git a/src/database/mod.rs b/src/database/mod.rs index 891481a2e..67a8d7279 100644 --- a/src/database/mod.rs +++ b/src/database/mod.rs @@ -160,35 +160,6 @@ impl ConnectOptions { } } - #[cfg(feature = "sqlx-dep")] - /// Convert [ConnectOptions] into [sqlx::pool::PoolOptions] - pub fn pool_options(self) -> sqlx::pool::PoolOptions - where - DB: sqlx::Database, - { - let mut opt = sqlx::pool::PoolOptions::new(); - if let Some(max_connections) = self.max_connections { - opt = opt.max_connections(max_connections); - } - if let Some(min_connections) = self.min_connections { - opt = opt.min_connections(min_connections); - } - if let Some(connect_timeout) = self.connect_timeout { - opt = opt.acquire_timeout(connect_timeout); - } - if let Some(idle_timeout) = self.idle_timeout { - opt = opt.idle_timeout(Some(idle_timeout)); - } - if let Some(acquire_timeout) = self.acquire_timeout { - opt = opt.acquire_timeout(acquire_timeout); - } - if let Some(max_lifetime) = self.max_lifetime { - opt = opt.max_lifetime(Some(max_lifetime)); - } - opt = opt.test_before_acquire(self.test_before_acquire); - opt - } - /// Get the database URL of the pool pub fn get_url(&self) -> &str { &self.url diff --git a/src/database/proxy.rs b/src/database/proxy.rs index 470810670..9bd1228ea 100644 --- a/src/database/proxy.rs +++ b/src/database/proxy.rs @@ -150,11 +150,11 @@ impl Into for ProxyRow { pub fn from_query_result_to_proxy_row(result: &QueryResult) -> ProxyRow { match &result.row { #[cfg(feature = "sqlx-mysql")] - QueryResultRow::SqlxMySql(row) => from_sqlx_mysql_row_to_proxy_row(&row), + QueryResultRow::SqlxMySql(row) => crate::from_sqlx_mysql_row_to_proxy_row(&row), #[cfg(feature = "sqlx-postgres")] - QueryResultRow::SqlxPostgres(row) => from_sqlx_postgres_row_to_proxy_row(&row), + QueryResultRow::SqlxPostgres(row) => crate::from_sqlx_postgres_row_to_proxy_row(&row), #[cfg(feature = "sqlx-sqlite")] - QueryResultRow::SqlxSqlite(row) => from_sqlx_sqlite_row_to_proxy_row(&row), + QueryResultRow::SqlxSqlite(row) => crate::from_sqlx_sqlite_row_to_proxy_row(&row), #[cfg(feature = "mock")] QueryResultRow::Mock(row) => ProxyRow { values: row.values.clone(), @@ -163,675 +163,6 @@ pub fn from_query_result_to_proxy_row(result: &QueryResult) -> ProxyRow { } } -#[cfg(feature = "sqlx-mysql")] -pub(crate) fn from_sqlx_mysql_row_to_proxy_row(row: &sqlx::mysql::MySqlRow) -> ProxyRow { - // https://docs.rs/sqlx-mysql/0.7.2/src/sqlx_mysql/protocol/text/column.rs.html - // https://docs.rs/sqlx-mysql/0.7.2/sqlx_mysql/types/index.html - use sqlx::{Column, Row, TypeInfo}; - ProxyRow { - values: row - .columns() - .iter() - .map(|c| { - ( - c.name().to_string(), - match c.type_info().name() { - "TINYINT(1)" | "BOOLEAN" => Value::Bool(Some( - row.try_get(c.ordinal()).expect("Failed to get boolean"), - )), - "TINYINT UNSIGNED" => Value::TinyUnsigned(Some( - row.try_get(c.ordinal()) - .expect("Failed to get unsigned tiny integer"), - )), - "SMALLINT UNSIGNED" => Value::SmallUnsigned(Some( - row.try_get(c.ordinal()) - .expect("Failed to get unsigned small integer"), - )), - "INT UNSIGNED" => Value::Unsigned(Some( - row.try_get(c.ordinal()) - .expect("Failed to get unsigned integer"), - )), - "MEDIUMINT UNSIGNED" | "BIGINT UNSIGNED" => Value::BigUnsigned(Some( - row.try_get(c.ordinal()) - .expect("Failed to get unsigned big integer"), - )), - "TINYINT" => Value::TinyInt(Some( - row.try_get(c.ordinal()) - .expect("Failed to get tiny integer"), - )), - "SMALLINT" => Value::SmallInt(Some( - row.try_get(c.ordinal()) - .expect("Failed to get small integer"), - )), - "INT" => Value::Int(Some( - row.try_get(c.ordinal()).expect("Failed to get integer"), - )), - "MEDIUMINT" | "BIGINT" => Value::BigInt(Some( - row.try_get(c.ordinal()).expect("Failed to get big integer"), - )), - "FLOAT" => Value::Float(Some( - row.try_get(c.ordinal()).expect("Failed to get float"), - )), - "DOUBLE" => Value::Double(Some( - row.try_get(c.ordinal()).expect("Failed to get double"), - )), - - "BIT" | "BINARY" | "VARBINARY" | "TINYBLOB" | "BLOB" | "MEDIUMBLOB" - | "LONGBLOB" => Value::Bytes(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get bytes"), - ))), - - "CHAR" | "VARCHAR" | "TINYTEXT" | "TEXT" | "MEDIUMTEXT" | "LONGTEXT" => { - Value::String(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get string"), - ))) - } - - #[cfg(feature = "with-chrono")] - "TIMESTAMP" => Value::ChronoDateTimeUtc(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get timestamp"), - ))), - #[cfg(all(feature = "with-time", not(feature = "with-chrono")))] - "TIMESTAMP" => Value::TimeDateTime(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get timestamp"), - ))), - - #[cfg(feature = "with-chrono")] - "DATE" => Value::ChronoDate(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get date"), - ))), - #[cfg(all(feature = "with-time", not(feature = "with-chrono")))] - "DATE" => Value::TimeDate(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get date"), - ))), - - #[cfg(feature = "with-chrono")] - "TIME" => Value::ChronoTime(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get time"), - ))), - #[cfg(all(feature = "with-time", not(feature = "with-chrono")))] - "TIME" => Value::TimeTime(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get time"), - ))), - - #[cfg(feature = "with-chrono")] - "DATETIME" => Value::ChronoDateTime(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get datetime"), - ))), - #[cfg(all(feature = "with-time", not(feature = "with-chrono")))] - "DATETIME" => Value::TimeDateTime(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get datetime"), - ))), - - #[cfg(feature = "with-chrono")] - "YEAR" => Value::ChronoDate(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get year"), - ))), - #[cfg(all(feature = "with-time", not(feature = "with-chrono")))] - "YEAR" => Value::TimeDate(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get year"), - ))), - - "ENUM" | "SET" | "GEOMETRY" => Value::String(Some(Box::new( - row.try_get(c.ordinal()) - .expect("Failed to get serialized string"), - ))), - - #[cfg(feature = "with-bigdecimal")] - "DECIMAL" => Value::BigDecimal(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get decimal"), - ))), - #[cfg(all( - feature = "with-rust_decimal", - not(feature = "with-bigdecimal") - ))] - "DECIMAL" => Value::Decimal(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get decimal"), - ))), - - #[cfg(feature = "with-json")] - "JSON" => Value::Json(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get json"), - ))), - - _ => unreachable!("Unknown column type: {}", c.type_info().name()), - }, - ) - }) - .collect(), - } -} - -#[cfg(feature = "sqlx-postgres")] -pub(crate) fn from_sqlx_postgres_row_to_proxy_row(row: &sqlx::postgres::PgRow) -> ProxyRow { - // https://docs.rs/sqlx-postgres/0.7.2/src/sqlx_postgres/type_info.rs.html - // https://docs.rs/sqlx-postgres/0.7.2/sqlx_postgres/types/index.html - use sqlx::{Column, Row, TypeInfo}; - ProxyRow { - values: row - .columns() - .iter() - .map(|c| { - ( - c.name().to_string(), - match c.type_info().name() { - "BOOL" => Value::Bool(Some( - row.try_get(c.ordinal()).expect("Failed to get boolean"), - )), - #[cfg(feature = "postgres-array")] - "BOOL[]" => Value::Array( - sea_query::ArrayType::Bool, - Some(Box::new( - row.try_get::, _>(c.ordinal()) - .expect("Failed to get boolean array") - .iter() - .map(|val| Value::Bool(Some(*val))) - .collect(), - )), - ), - - "\"CHAR\"" => Value::TinyInt(Some( - row.try_get(c.ordinal()) - .expect("Failed to get small integer"), - )), - #[cfg(feature = "postgres-array")] - "\"CHAR\"[]" => Value::Array( - sea_query::ArrayType::TinyInt, - Some(Box::new( - row.try_get::, _>(c.ordinal()) - .expect("Failed to get small integer array") - .iter() - .map(|val| Value::TinyInt(Some(*val))) - .collect(), - )), - ), - - "SMALLINT" | "SMALLSERIAL" | "INT2" => Value::SmallInt(Some( - row.try_get(c.ordinal()) - .expect("Failed to get small integer"), - )), - #[cfg(feature = "postgres-array")] - "SMALLINT[]" | "SMALLSERIAL[]" | "INT2[]" => Value::Array( - sea_query::ArrayType::SmallInt, - Some(Box::new( - row.try_get::, _>(c.ordinal()) - .expect("Failed to get small integer array") - .iter() - .map(|val| Value::SmallInt(Some(*val))) - .collect(), - )), - ), - - "INT" | "SERIAL" | "INT4" => Value::Int(Some( - row.try_get(c.ordinal()).expect("Failed to get integer"), - )), - #[cfg(feature = "postgres-array")] - "INT[]" | "SERIAL[]" | "INT4[]" => Value::Array( - sea_query::ArrayType::Int, - Some(Box::new( - row.try_get::, _>(c.ordinal()) - .expect("Failed to get integer array") - .iter() - .map(|val| Value::Int(Some(*val))) - .collect(), - )), - ), - - "BIGINT" | "BIGSERIAL" | "INT8" => Value::BigInt(Some( - row.try_get(c.ordinal()).expect("Failed to get big integer"), - )), - #[cfg(feature = "postgres-array")] - "BIGINT[]" | "BIGSERIAL[]" | "INT8[]" => Value::Array( - sea_query::ArrayType::BigInt, - Some(Box::new( - row.try_get::, _>(c.ordinal()) - .expect("Failed to get big integer array") - .iter() - .map(|val| Value::BigInt(Some(*val))) - .collect(), - )), - ), - - "FLOAT4" | "REAL" => Value::Float(Some( - row.try_get(c.ordinal()).expect("Failed to get float"), - )), - #[cfg(feature = "postgres-array")] - "FLOAT4[]" | "REAL[]" => Value::Array( - sea_query::ArrayType::Float, - Some(Box::new( - row.try_get::, _>(c.ordinal()) - .expect("Failed to get float array") - .iter() - .map(|val| Value::Float(Some(*val))) - .collect(), - )), - ), - - "FLOAT8" | "DOUBLE PRECISION" => Value::Double(Some( - row.try_get(c.ordinal()).expect("Failed to get double"), - )), - #[cfg(feature = "postgres-array")] - "FLOAT8[]" | "DOUBLE PRECISION[]" => Value::Array( - sea_query::ArrayType::Double, - Some(Box::new( - row.try_get::, _>(c.ordinal()) - .expect("Failed to get double array") - .iter() - .map(|val| Value::Double(Some(*val))) - .collect(), - )), - ), - - "VARCHAR" | "CHAR" | "TEXT" | "NAME" => Value::String(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get string"), - ))), - #[cfg(feature = "postgres-array")] - "VARCHAR[]" | "CHAR[]" | "TEXT[]" | "NAME[]" => Value::Array( - sea_query::ArrayType::String, - Some(Box::new( - row.try_get::, _>(c.ordinal()) - .expect("Failed to get string array") - .iter() - .map(|val| Value::String(Some(Box::new(val.clone())))) - .collect(), - )), - ), - - "BYTEA" => Value::Bytes(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get bytes"), - ))), - #[cfg(feature = "postgres-array")] - "BYTEA[]" => Value::Array( - sea_query::ArrayType::Bytes, - Some(Box::new( - row.try_get::>, _>(c.ordinal()) - .expect("Failed to get bytes array") - .iter() - .map(|val| Value::Bytes(Some(Box::new(val.clone())))) - .collect(), - )), - ), - - #[cfg(feature = "with-bigdecimal")] - "NUMERIC" => Value::BigDecimal(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get numeric"), - ))), - #[cfg(all( - feature = "with-rust_decimal", - not(feature = "with-bigdecimal") - ))] - "NUMERIC" => Value::Decimal(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get numeric"), - ))), - - #[cfg(all(feature = "with-bigdecimal", feature = "postgres-array"))] - "NUMERIC[]" => Value::Array( - sea_query::ArrayType::BigDecimal, - Some(Box::new( - row.try_get::, _>(c.ordinal()) - .expect("Failed to get numeric array") - .iter() - .map(|val| Value::BigDecimal(Some(Box::new(val.clone())))) - .collect(), - )), - ), - #[cfg(all( - feature = "with-rust_decimal", - not(feature = "with-bigdecimal"), - feature = "postgres-array" - ))] - "NUMERIC[]" => Value::Array( - sea_query::ArrayType::Decimal, - Some(Box::new( - row.try_get::, _>(c.ordinal()) - .expect("Failed to get numeric array") - .iter() - .map(|val| Value::Decimal(Some(Box::new(val.clone())))) - .collect(), - )), - ), - - "OID" => Value::BigInt(Some( - row.try_get(c.ordinal()).expect("Failed to get oid"), - )), - #[cfg(feature = "postgres-array")] - "OID[]" => Value::Array( - sea_query::ArrayType::BigInt, - Some(Box::new( - row.try_get::, _>(c.ordinal()) - .expect("Failed to get oid array") - .iter() - .map(|val| Value::BigInt(Some(*val))) - .collect(), - )), - ), - - "JSON" | "JSONB" => Value::Json(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get json"), - ))), - #[cfg(any(feature = "json-array", feature = "postgres-array"))] - "JSON[]" | "JSONB[]" => Value::Array( - sea_query::ArrayType::Json, - Some(Box::new( - row.try_get::, _>(c.ordinal()) - .expect("Failed to get json array") - .iter() - .map(|val| Value::Json(Some(Box::new(val.clone())))) - .collect(), - )), - ), - - #[cfg(feature = "with-ipnetwork")] - "INET" | "CIDR" => Value::IpNetwork(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get ip address"), - ))), - #[cfg(feature = "with-ipnetwork")] - "INET[]" | "CIDR[]" => Value::Array( - sea_query::ArrayType::IpNetwork, - Some(Box::new( - row.try_get::, _>(c.ordinal()) - .expect("Failed to get ip address array") - .iter() - .map(|val| Value::IpNetwork(Some(Box::new(val.clone())))) - .collect(), - )), - ), - - #[cfg(feature = "with-mac_address")] - "MACADDR" | "MACADDR8" => Value::MacAddress(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get mac address"), - ))), - #[cfg(all(feature = "with-mac_address", feature = "postgres-array"))] - "MACADDR[]" | "MACADDR8[]" => Value::Array( - sea_query::ArrayType::MacAddress, - Some(Box::new( - row.try_get::, _>(c.ordinal()) - .expect("Failed to get mac address array") - .iter() - .map(|val| Value::MacAddress(Some(Box::new(val.clone())))) - .collect(), - )), - ), - - #[cfg(feature = "with-chrono")] - "TIMESTAMP" => Value::ChronoDateTime(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get timestamp"), - ))), - #[cfg(all(feature = "with-time", not(feature = "with-chrono")))] - "TIMESTAMP" => Value::TimeDateTime(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get timestamp"), - ))), - - #[cfg(all(feature = "with-chrono", feature = "postgres-array"))] - "TIMESTAMP[]" => Value::Array( - sea_query::ArrayType::ChronoDateTime, - Some(Box::new( - row.try_get::, _>(c.ordinal()) - .expect("Failed to get timestamp array") - .iter() - .map(|val| Value::ChronoDateTime(Some(Box::new(val.clone())))) - .collect(), - )), - ), - #[cfg(all( - feature = "with-time", - not(feature = "with-chrono"), - feature = "postgres-array" - ))] - "TIMESTAMP[]" => Value::Array( - sea_query::ArrayType::TimeDateTime, - Some(Box::new( - row.try_get::, _>(c.ordinal()) - .expect("Failed to get timestamp array") - .iter() - .map(|val| Value::TimeDateTime(Some(Box::new(val.clone())))) - .collect(), - )), - ), - - #[cfg(feature = "with-chrono")] - "DATE" => Value::ChronoDate(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get date"), - ))), - #[cfg(all(feature = "with-time", not(feature = "with-chrono")))] - "DATE" => Value::TimeDate(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get date"), - ))), - - #[cfg(all(feature = "with-chrono", feature = "postgres-array"))] - "DATE[]" => Value::Array( - sea_query::ArrayType::ChronoDate, - Some(Box::new( - row.try_get::, _>(c.ordinal()) - .expect("Failed to get date array") - .iter() - .map(|val| Value::ChronoDate(Some(Box::new(val.clone())))) - .collect(), - )), - ), - #[cfg(all( - feature = "with-time", - not(feature = "with-chrono"), - feature = "postgres-array" - ))] - "DATE[]" => Value::Array( - sea_query::ArrayType::TimeDate, - Some(Box::new( - row.try_get::, _>(c.ordinal()) - .expect("Failed to get date array") - .iter() - .map(|val| Value::TimeDate(Some(Box::new(val.clone())))) - .collect(), - )), - ), - - #[cfg(feature = "with-chrono")] - "TIME" => Value::ChronoTime(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get time"), - ))), - #[cfg(all(feature = "with-time", not(feature = "with-chrono")))] - "TIME" => Value::TimeTime(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get time"), - ))), - - #[cfg(all(feature = "with-chrono", feature = "postgres-array"))] - "TIME[]" => Value::Array( - sea_query::ArrayType::ChronoTime, - Some(Box::new( - row.try_get::, _>(c.ordinal()) - .expect("Failed to get time array") - .iter() - .map(|val| Value::ChronoTime(Some(Box::new(val.clone())))) - .collect(), - )), - ), - #[cfg(all( - feature = "with-time", - not(feature = "with-chrono"), - feature = "postgres-array" - ))] - "TIME[]" => Value::Array( - sea_query::ArrayType::TimeTime, - Some(Box::new( - row.try_get::, _>(c.ordinal()) - .expect("Failed to get time array") - .iter() - .map(|val| Value::TimeTime(Some(Box::new(val.clone())))) - .collect(), - )), - ), - - #[cfg(feature = "with-chrono")] - "TIMESTAMPTZ" => Value::ChronoDateTimeUtc(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get timestamptz"), - ))), - #[cfg(all(feature = "with-time", not(feature = "with-chrono")))] - "TIMESTAMPTZ" => Value::TimeDateTime(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get timestamptz"), - ))), - - #[cfg(all(feature = "with-chrono", feature = "postgres-array"))] - "TIMESTAMPTZ[]" => Value::Array( - sea_query::ArrayType::ChronoDateTimeUtc, - Some(Box::new( - row.try_get::>, _>(c.ordinal()) - .expect("Failed to get timestamptz array") - .iter() - .map(|val| { - Value::ChronoDateTimeUtc(Some(Box::new(val.clone()))) - }) - .collect(), - )), - ), - #[cfg(all( - feature = "with-time", - not(feature = "with-chrono"), - feature = "postgres-array" - ))] - "TIMESTAMPTZ[]" => Value::Array( - sea_query::ArrayType::TimeDateTime, - Some(Box::new( - row.try_get::, _>(c.ordinal()) - .expect("Failed to get timestamptz array") - .iter() - .map(|val| Value::TimeDateTime(Some(Box::new(val.clone())))) - .collect(), - )), - ), - - #[cfg(feature = "with-chrono")] - "TIMETZ" => Value::ChronoTime(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get timetz"), - ))), - #[cfg(all(feature = "with-time", not(feature = "with-chrono")))] - "TIMETZ" => Value::TimeTime(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get timetz"), - ))), - - #[cfg(all(feature = "with-chrono", feature = "postgres-array"))] - "TIMETZ[]" => Value::Array( - sea_query::ArrayType::ChronoTime, - Some(Box::new( - row.try_get::, _>(c.ordinal()) - .expect("Failed to get timetz array") - .iter() - .map(|val| Value::ChronoTime(Some(Box::new(val.clone())))) - .collect(), - )), - ), - #[cfg(all( - feature = "with-time", - not(feature = "with-chrono"), - feature = "postgres-array" - ))] - "TIMETZ[]" => Value::Array( - sea_query::ArrayType::TimeTime, - Some(Box::new( - row.try_get::, _>(c.ordinal()) - .expect("Failed to get timetz array") - .iter() - .map(|val| Value::TimeTime(Some(Box::new(val.clone())))) - .collect(), - )), - ), - - #[cfg(feature = "with-uuid")] - "UUID" => Value::Uuid(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get uuid"), - ))), - - #[cfg(all(feature = "with-uuid", feature = "postgres-array"))] - "UUID[]" => Value::Array( - sea_query::ArrayType::Uuid, - Some(Box::new( - row.try_get::, _>(c.ordinal()) - .expect("Failed to get uuid array") - .iter() - .map(|val| Value::Uuid(Some(Box::new(val.clone())))) - .collect(), - )), - ), - - _ => unreachable!("Unknown column type: {}", c.type_info().name()), - }, - ) - }) - .collect(), - } -} - -#[cfg(feature = "sqlx-sqlite")] -pub(crate) fn from_sqlx_sqlite_row_to_proxy_row(row: &sqlx::sqlite::SqliteRow) -> ProxyRow { - // https://docs.rs/sqlx-sqlite/0.7.2/src/sqlx_sqlite/type_info.rs.html - // https://docs.rs/sqlx-sqlite/0.7.2/sqlx_sqlite/types/index.html - use sqlx::{Column, Row, TypeInfo}; - ProxyRow { - values: row - .columns() - .iter() - .map(|c| { - ( - c.name().to_string(), - match c.type_info().name() { - "BOOLEAN" => Value::Bool(Some( - row.try_get(c.ordinal()).expect("Failed to get boolean"), - )), - - "INTEGER" => Value::Int(Some( - row.try_get(c.ordinal()).expect("Failed to get integer"), - )), - - "BIGINT" | "INT8" => Value::BigInt(Some( - row.try_get(c.ordinal()).expect("Failed to get big integer"), - )), - - "REAL" => Value::Double(Some( - row.try_get(c.ordinal()).expect("Failed to get double"), - )), - - "TEXT" => Value::String(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get string"), - ))), - - "BLOB" => Value::Bytes(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get bytes"), - ))), - - #[cfg(feature = "with-chrono")] - "DATETIME" => Value::ChronoDateTimeUtc(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get timestamp"), - ))), - #[cfg(all(feature = "with-time", not(feature = "with-chrono")))] - "DATETIME" => Value::TimeDateTimeWithTimeZone(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get timestamp"), - ))), - - #[cfg(feature = "with-chrono")] - "DATE" => Value::ChronoDate(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get date"), - ))), - #[cfg(all(feature = "with-time", not(feature = "with-chrono")))] - "DATE" => Value::TimeDate(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get date"), - ))), - - #[cfg(feature = "with-chrono")] - "TIME" => Value::ChronoTime(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get time"), - ))), - #[cfg(all(feature = "with-time", not(feature = "with-chrono")))] - "TIME" => Value::TimeTime(Some(Box::new( - row.try_get(c.ordinal()).expect("Failed to get time"), - ))), - - _ => unreachable!("Unknown column type: {}", c.type_info().name()), - }, - ) - }) - .collect(), - } -} - impl ProxyRow { /// Get a value from the [ProxyRow] pub fn try_get(&self, index: I) -> Result diff --git a/src/database/stream/query.rs b/src/database/stream/query.rs index 30642bde0..3c77b7b0d 100644 --- a/src/database/stream/query.rs +++ b/src/database/stream/query.rs @@ -1,17 +1,14 @@ #![allow(missing_docs, unreachable_code, unused_variables)] -use tracing::instrument; - -#[cfg(any(feature = "mock", feature = "proxy"))] -use std::sync::Arc; +use futures::Stream; use std::{pin::Pin, task::Poll}; +use tracing::instrument; -use futures::Stream; #[cfg(feature = "sqlx-dep")] use futures::TryStreamExt; #[cfg(feature = "sqlx-dep")] -use sqlx::{pool::PoolConnection, Executor}; +use sqlx::Executor; use super::metric::MetricStream; #[cfg(feature = "sqlx-dep")] @@ -29,101 +26,6 @@ pub struct QueryStream { stream: MetricStream<'this>, } -#[cfg(feature = "sqlx-mysql")] -impl - From<( - PoolConnection, - Statement, - Option, - )> for QueryStream -{ - fn from( - (conn, stmt, metric_callback): ( - PoolConnection, - Statement, - Option, - ), - ) -> Self { - QueryStream::build(stmt, InnerConnection::MySql(conn), metric_callback) - } -} - -#[cfg(feature = "sqlx-postgres")] -impl - From<( - PoolConnection, - Statement, - Option, - )> for QueryStream -{ - fn from( - (conn, stmt, metric_callback): ( - PoolConnection, - Statement, - Option, - ), - ) -> Self { - QueryStream::build(stmt, InnerConnection::Postgres(conn), metric_callback) - } -} - -#[cfg(feature = "sqlx-sqlite")] -impl - From<( - PoolConnection, - Statement, - Option, - )> for QueryStream -{ - fn from( - (conn, stmt, metric_callback): ( - PoolConnection, - Statement, - Option, - ), - ) -> Self { - QueryStream::build(stmt, InnerConnection::Sqlite(conn), metric_callback) - } -} - -#[cfg(feature = "mock")] -impl - From<( - Arc, - Statement, - Option, - )> for QueryStream -{ - fn from( - (conn, stmt, metric_callback): ( - Arc, - Statement, - Option, - ), - ) -> Self { - QueryStream::build(stmt, InnerConnection::Mock(conn), metric_callback) - } -} - -#[cfg(feature = "proxy")] -impl - From<( - Arc, - Statement, - Option, - )> for QueryStream -{ - fn from( - (conn, stmt, metric_callback): ( - Arc, - Statement, - Option, - ), - ) -> Self { - QueryStream::build(stmt, InnerConnection::Proxy(conn), metric_callback) - } -} - impl std::fmt::Debug for QueryStream { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "QueryStream") @@ -132,7 +34,7 @@ impl std::fmt::Debug for QueryStream { impl QueryStream { #[instrument(level = "trace", skip(metric_callback))] - fn build( + pub(crate) fn build( stmt: Statement, conn: InnerConnection, metric_callback: Option, diff --git a/src/database/transaction.rs b/src/database/transaction.rs index 3216ffd99..2e58a4768 100644 --- a/src/database/transaction.rs +++ b/src/database/transaction.rs @@ -7,7 +7,7 @@ use crate::{ use crate::{sqlx_error_to_exec_err, sqlx_error_to_query_err}; use futures::lock::Mutex; #[cfg(feature = "sqlx-dep")] -use sqlx::{pool::PoolConnection, TransactionManager}; +use sqlx::TransactionManager; use std::{future::Future, pin::Pin, sync::Arc}; use tracing::instrument; @@ -28,91 +28,8 @@ impl std::fmt::Debug for DatabaseTransaction { } impl DatabaseTransaction { - #[cfg(feature = "sqlx-mysql")] - pub(crate) async fn new_mysql( - inner: PoolConnection, - metric_callback: Option, - isolation_level: Option, - access_mode: Option, - ) -> Result { - Self::begin( - Arc::new(Mutex::new(InnerConnection::MySql(inner))), - DbBackend::MySql, - metric_callback, - isolation_level, - access_mode, - ) - .await - } - - #[cfg(feature = "sqlx-postgres")] - pub(crate) async fn new_postgres( - inner: PoolConnection, - metric_callback: Option, - isolation_level: Option, - access_mode: Option, - ) -> Result { - Self::begin( - Arc::new(Mutex::new(InnerConnection::Postgres(inner))), - DbBackend::Postgres, - metric_callback, - isolation_level, - access_mode, - ) - .await - } - - #[cfg(feature = "sqlx-sqlite")] - pub(crate) async fn new_sqlite( - inner: PoolConnection, - metric_callback: Option, - isolation_level: Option, - access_mode: Option, - ) -> Result { - Self::begin( - Arc::new(Mutex::new(InnerConnection::Sqlite(inner))), - DbBackend::Sqlite, - metric_callback, - isolation_level, - access_mode, - ) - .await - } - - #[cfg(feature = "mock")] - pub(crate) async fn new_mock( - inner: Arc, - metric_callback: Option, - ) -> Result { - let backend = inner.get_database_backend(); - Self::begin( - Arc::new(Mutex::new(InnerConnection::Mock(inner))), - backend, - metric_callback, - None, - None, - ) - .await - } - - #[cfg(feature = "proxy")] - pub(crate) async fn new_proxy( - inner: Arc, - metric_callback: Option, - ) -> Result { - let backend = inner.get_database_backend(); - Self::begin( - Arc::new(Mutex::new(InnerConnection::Proxy(inner))), - backend, - metric_callback, - None, - None, - ) - .await - } - #[instrument(level = "trace", skip(metric_callback))] - async fn begin( + pub(crate) async fn begin( conn: Arc>, backend: DbBackend, metric_callback: Option, @@ -293,17 +210,6 @@ impl DatabaseTransaction { } Ok(()) } - - #[cfg(feature = "sqlx-dep")] - fn map_err_ignore_not_found( - err: Result, sqlx::Error>, - ) -> Result, DbErr> { - if let Err(sqlx::Error::RowNotFound) = err { - Ok(None) - } else { - err.map_err(sqlx_error_to_query_err) - } - } } impl Drop for DatabaseTransaction { @@ -411,7 +317,7 @@ impl ConnectionTrait for DatabaseTransaction { let query = crate::driver::sqlx_mysql::sqlx_query(&stmt); let conn: &mut sqlx::MySqlConnection = &mut *conn; crate::metric::metric!(self.metric_callback, &stmt, { - Self::map_err_ignore_not_found( + crate::sqlx_map_err_ignore_not_found( query.fetch_one(conn).await.map(|row| Some(row.into())), ) }) @@ -421,7 +327,7 @@ impl ConnectionTrait for DatabaseTransaction { let query = crate::driver::sqlx_postgres::sqlx_query(&stmt); let conn: &mut sqlx::PgConnection = &mut *conn; crate::metric::metric!(self.metric_callback, &stmt, { - Self::map_err_ignore_not_found( + crate::sqlx_map_err_ignore_not_found( query.fetch_one(conn).await.map(|row| Some(row.into())), ) }) @@ -431,7 +337,7 @@ impl ConnectionTrait for DatabaseTransaction { let query = crate::driver::sqlx_sqlite::sqlx_query(&stmt); let conn: &mut sqlx::SqliteConnection = &mut *conn; crate::metric::metric!(self.metric_callback, &stmt, { - Self::map_err_ignore_not_found( + crate::sqlx_map_err_ignore_not_found( query.fetch_one(conn).await.map(|row| Some(row.into())), ) }) diff --git a/src/driver/mock.rs b/src/driver/mock.rs index 6b2fd08e6..c25d1954b 100644 --- a/src/driver/mock.rs +++ b/src/driver/mock.rs @@ -207,3 +207,39 @@ impl MockDatabaseConnection { self.mocker.lock().map_err(query_err)?.ping() } } + +impl + From<( + Arc, + Statement, + Option, + )> for crate::QueryStream +{ + fn from( + (conn, stmt, metric_callback): ( + Arc, + Statement, + Option, + ), + ) -> Self { + crate::QueryStream::build(stmt, crate::InnerConnection::Mock(conn), metric_callback) + } +} + +impl crate::DatabaseTransaction { + pub(crate) async fn new_mock( + inner: Arc, + metric_callback: Option, + ) -> Result { + use futures::lock::Mutex; + let backend = inner.get_database_backend(); + Self::begin( + Arc::new(Mutex::new(crate::InnerConnection::Mock(inner))), + backend, + metric_callback, + None, + None, + ) + .await + } +} diff --git a/src/driver/mod.rs b/src/driver/mod.rs index 5e456e687..c09bbe0ca 100644 --- a/src/driver/mod.rs +++ b/src/driver/mod.rs @@ -16,7 +16,7 @@ pub use mock::*; #[cfg(feature = "proxy")] pub use proxy::*; #[cfg(feature = "sqlx-dep")] -pub use sqlx_common::*; +pub(crate) use sqlx_common::*; #[cfg(feature = "sqlx-mysql")] pub use sqlx_mysql::*; #[cfg(feature = "sqlx-postgres")] diff --git a/src/driver/proxy.rs b/src/driver/proxy.rs index 1ed1ab81b..d46335e74 100644 --- a/src/driver/proxy.rs +++ b/src/driver/proxy.rs @@ -138,3 +138,39 @@ impl ProxyDatabaseConnection { self.proxy.lock().map_err(query_err)?.ping() } } + +impl + From<( + Arc, + Statement, + Option, + )> for crate::QueryStream +{ + fn from( + (conn, stmt, metric_callback): ( + Arc, + Statement, + Option, + ), + ) -> Self { + crate::QueryStream::build(stmt, crate::InnerConnection::Proxy(conn), metric_callback) + } +} + +impl crate::DatabaseTransaction { + pub(crate) async fn new_proxy( + inner: Arc, + metric_callback: Option, + ) -> Result { + use futures::lock::Mutex; + let backend = inner.get_database_backend(); + Self::begin( + Arc::new(Mutex::new(crate::InnerConnection::Proxy(inner))), + backend, + metric_callback, + None, + None, + ) + .await + } +} diff --git a/src/driver/sqlx_common.rs b/src/driver/sqlx_common.rs index 37a250ed3..28a1e9252 100644 --- a/src/driver/sqlx_common.rs +++ b/src/driver/sqlx_common.rs @@ -1,4 +1,4 @@ -use crate::{DbErr, RuntimeErr}; +use crate::{ConnAcquireErr, ConnectOptions, DbErr, RuntimeErr}; /// Converts an [sqlx::error] execution error to a [DbErr] pub fn sqlx_error_to_exec_err(err: sqlx::Error) -> DbErr { @@ -14,3 +14,53 @@ pub fn sqlx_error_to_query_err(err: sqlx::Error) -> DbErr { pub fn sqlx_error_to_conn_err(err: sqlx::Error) -> DbErr { DbErr::Conn(RuntimeErr::SqlxError(err)) } + +/// Converts an [sqlx::error] error to a [DbErr] +pub fn sqlx_map_err_ignore_not_found( + err: Result, sqlx::Error>, +) -> Result, DbErr> { + if let Err(sqlx::Error::RowNotFound) = err { + Ok(None) + } else { + err.map_err(sqlx_error_to_query_err) + } +} + +/// Converts an [sqlx::error] error to a [DbErr] +pub fn sqlx_conn_acquire_err(sqlx_err: sqlx::Error) -> DbErr { + match sqlx_err { + sqlx::Error::PoolTimedOut => DbErr::ConnectionAcquire(ConnAcquireErr::Timeout), + sqlx::Error::PoolClosed => DbErr::ConnectionAcquire(ConnAcquireErr::ConnectionClosed), + _ => DbErr::Conn(RuntimeErr::SqlxError(sqlx_err)), + } +} + +impl ConnectOptions { + /// Convert [ConnectOptions] into [sqlx::pool::PoolOptions] + pub fn sqlx_pool_options(self) -> sqlx::pool::PoolOptions + where + DB: sqlx::Database, + { + let mut opt = sqlx::pool::PoolOptions::new(); + if let Some(max_connections) = self.max_connections { + opt = opt.max_connections(max_connections); + } + if let Some(min_connections) = self.min_connections { + opt = opt.min_connections(min_connections); + } + if let Some(connect_timeout) = self.connect_timeout { + opt = opt.acquire_timeout(connect_timeout); + } + if let Some(idle_timeout) = self.idle_timeout { + opt = opt.idle_timeout(Some(idle_timeout)); + } + if let Some(acquire_timeout) = self.acquire_timeout { + opt = opt.acquire_timeout(acquire_timeout); + } + if let Some(max_lifetime) = self.max_lifetime { + opt = opt.max_lifetime(Some(max_lifetime)); + } + opt = opt.test_before_acquire(self.test_before_acquire); + opt + } +} diff --git a/src/driver/sqlx_mysql.rs b/src/driver/sqlx_mysql.rs index 0385b76ad..aa5ee6e00 100644 --- a/src/driver/sqlx_mysql.rs +++ b/src/driver/sqlx_mysql.rs @@ -1,3 +1,4 @@ +use futures::lock::Mutex; use log::LevelFilter; use sea_query::Values; use std::{future::Future, pin::Pin, sync::Arc}; @@ -60,7 +61,7 @@ impl SqlxMySqlConnector { ); } } - match options.pool_options().connect_with(opt).await { + match options.sqlx_pool_options().connect_with(opt).await { Ok(pool) => Ok(DatabaseConnection::SqlxMySqlPoolConnection( SqlxMySqlPoolConnection { pool, @@ -89,7 +90,7 @@ impl SqlxMySqlPoolConnection { debug_print!("{}", stmt); let query = sqlx_query(&stmt); - let mut conn = self.pool.acquire().await.map_err(conn_acquire_err)?; + let mut conn = self.pool.acquire().await.map_err(sqlx_conn_acquire_err)?; crate::metric::metric!(self.metric_callback, &stmt, { match query.execute(&mut *conn).await { Ok(res) => Ok(res.into()), @@ -103,7 +104,7 @@ impl SqlxMySqlPoolConnection { pub async fn execute_unprepared(&self, sql: &str) -> Result { debug_print!("{}", sql); - let conn = &mut self.pool.acquire().await.map_err(conn_acquire_err)?; + let conn = &mut self.pool.acquire().await.map_err(sqlx_conn_acquire_err)?; match conn.execute(sql).await { Ok(res) => Ok(res.into()), Err(err) => Err(sqlx_error_to_exec_err(err)), @@ -116,7 +117,7 @@ impl SqlxMySqlPoolConnection { debug_print!("{}", stmt); let query = sqlx_query(&stmt); - let mut conn = self.pool.acquire().await.map_err(conn_acquire_err)?; + let mut conn = self.pool.acquire().await.map_err(sqlx_conn_acquire_err)?; crate::metric::metric!(self.metric_callback, &stmt, { match query.fetch_one(&mut *conn).await { Ok(row) => Ok(Some(row.into())), @@ -134,7 +135,7 @@ impl SqlxMySqlPoolConnection { debug_print!("{}", stmt); let query = sqlx_query(&stmt); - let mut conn = self.pool.acquire().await.map_err(conn_acquire_err)?; + let mut conn = self.pool.acquire().await.map_err(sqlx_conn_acquire_err)?; crate::metric::metric!(self.metric_callback, &stmt, { match query.fetch_all(&mut *conn).await { Ok(rows) => Ok(rows.into_iter().map(|r| r.into()).collect()), @@ -148,7 +149,7 @@ impl SqlxMySqlPoolConnection { pub async fn stream(&self, stmt: Statement) -> Result { debug_print!("{}", stmt); - let conn = self.pool.acquire().await.map_err(conn_acquire_err)?; + let conn = self.pool.acquire().await.map_err(sqlx_conn_acquire_err)?; Ok(QueryStream::from(( conn, stmt, @@ -163,7 +164,7 @@ impl SqlxMySqlPoolConnection { isolation_level: Option, access_mode: Option, ) -> Result { - let conn = self.pool.acquire().await.map_err(conn_acquire_err)?; + let conn = self.pool.acquire().await.map_err(sqlx_conn_acquire_err)?; DatabaseTransaction::new_mysql( conn, self.metric_callback.clone(), @@ -189,7 +190,7 @@ impl SqlxMySqlPoolConnection { T: Send, E: std::error::Error + Send, { - let conn = self.pool.acquire().await.map_err(conn_acquire_err)?; + let conn = self.pool.acquire().await.map_err(sqlx_conn_acquire_err)?; let transaction = DatabaseTransaction::new_mysql( conn, self.metric_callback.clone(), @@ -210,7 +211,7 @@ impl SqlxMySqlPoolConnection { /// Checks if a connection to the database is still valid. pub async fn ping(&self) -> Result<(), DbErr> { - let conn = &mut self.pool.acquire().await.map_err(conn_acquire_err)?; + let conn = &mut self.pool.acquire().await.map_err(sqlx_conn_acquire_err)?; match conn.ping().await { Ok(_) => Ok(()), Err(err) => Err(sqlx_error_to_conn_err(err)), @@ -273,3 +274,179 @@ pub(crate) async fn set_transaction_config( } Ok(()) } + +impl + From<( + PoolConnection, + Statement, + Option, + )> for crate::QueryStream +{ + fn from( + (conn, stmt, metric_callback): ( + PoolConnection, + Statement, + Option, + ), + ) -> Self { + crate::QueryStream::build(stmt, crate::InnerConnection::MySql(conn), metric_callback) + } +} + +impl crate::DatabaseTransaction { + pub(crate) async fn new_mysql( + inner: PoolConnection, + metric_callback: Option, + isolation_level: Option, + access_mode: Option, + ) -> Result { + Self::begin( + Arc::new(Mutex::new(crate::InnerConnection::MySql(inner))), + crate::DbBackend::MySql, + metric_callback, + isolation_level, + access_mode, + ) + .await + } +} + +#[cfg(feature = "proxy")] +pub(crate) fn from_sqlx_mysql_row_to_proxy_row(row: &sqlx::mysql::MySqlRow) -> crate::ProxyRow { + // https://docs.rs/sqlx-mysql/0.7.2/src/sqlx_mysql/protocol/text/column.rs.html + // https://docs.rs/sqlx-mysql/0.7.2/sqlx_mysql/types/index.html + use sea_query::Value; + use sqlx::{Column, Row, TypeInfo}; + crate::ProxyRow { + values: row + .columns() + .iter() + .map(|c| { + ( + c.name().to_string(), + match c.type_info().name() { + "TINYINT(1)" | "BOOLEAN" => Value::Bool(Some( + row.try_get(c.ordinal()).expect("Failed to get boolean"), + )), + "TINYINT UNSIGNED" => Value::TinyUnsigned(Some( + row.try_get(c.ordinal()) + .expect("Failed to get unsigned tiny integer"), + )), + "SMALLINT UNSIGNED" => Value::SmallUnsigned(Some( + row.try_get(c.ordinal()) + .expect("Failed to get unsigned small integer"), + )), + "INT UNSIGNED" => Value::Unsigned(Some( + row.try_get(c.ordinal()) + .expect("Failed to get unsigned integer"), + )), + "MEDIUMINT UNSIGNED" | "BIGINT UNSIGNED" => Value::BigUnsigned(Some( + row.try_get(c.ordinal()) + .expect("Failed to get unsigned big integer"), + )), + "TINYINT" => Value::TinyInt(Some( + row.try_get(c.ordinal()) + .expect("Failed to get tiny integer"), + )), + "SMALLINT" => Value::SmallInt(Some( + row.try_get(c.ordinal()) + .expect("Failed to get small integer"), + )), + "INT" => Value::Int(Some( + row.try_get(c.ordinal()).expect("Failed to get integer"), + )), + "MEDIUMINT" | "BIGINT" => Value::BigInt(Some( + row.try_get(c.ordinal()).expect("Failed to get big integer"), + )), + "FLOAT" => Value::Float(Some( + row.try_get(c.ordinal()).expect("Failed to get float"), + )), + "DOUBLE" => Value::Double(Some( + row.try_get(c.ordinal()).expect("Failed to get double"), + )), + + "BIT" | "BINARY" | "VARBINARY" | "TINYBLOB" | "BLOB" | "MEDIUMBLOB" + | "LONGBLOB" => Value::Bytes(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get bytes"), + ))), + + "CHAR" | "VARCHAR" | "TINYTEXT" | "TEXT" | "MEDIUMTEXT" | "LONGTEXT" => { + Value::String(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get string"), + ))) + } + + #[cfg(feature = "with-chrono")] + "TIMESTAMP" => Value::ChronoDateTimeUtc(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get timestamp"), + ))), + #[cfg(all(feature = "with-time", not(feature = "with-chrono")))] + "TIMESTAMP" => Value::TimeDateTime(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get timestamp"), + ))), + + #[cfg(feature = "with-chrono")] + "DATE" => Value::ChronoDate(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get date"), + ))), + #[cfg(all(feature = "with-time", not(feature = "with-chrono")))] + "DATE" => Value::TimeDate(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get date"), + ))), + + #[cfg(feature = "with-chrono")] + "TIME" => Value::ChronoTime(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get time"), + ))), + #[cfg(all(feature = "with-time", not(feature = "with-chrono")))] + "TIME" => Value::TimeTime(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get time"), + ))), + + #[cfg(feature = "with-chrono")] + "DATETIME" => Value::ChronoDateTime(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get datetime"), + ))), + #[cfg(all(feature = "with-time", not(feature = "with-chrono")))] + "DATETIME" => Value::TimeDateTime(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get datetime"), + ))), + + #[cfg(feature = "with-chrono")] + "YEAR" => Value::ChronoDate(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get year"), + ))), + #[cfg(all(feature = "with-time", not(feature = "with-chrono")))] + "YEAR" => Value::TimeDate(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get year"), + ))), + + "ENUM" | "SET" | "GEOMETRY" => Value::String(Some(Box::new( + row.try_get(c.ordinal()) + .expect("Failed to get serialized string"), + ))), + + #[cfg(feature = "with-bigdecimal")] + "DECIMAL" => Value::BigDecimal(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get decimal"), + ))), + #[cfg(all( + feature = "with-rust_decimal", + not(feature = "with-bigdecimal") + ))] + "DECIMAL" => Value::Decimal(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get decimal"), + ))), + + #[cfg(feature = "with-json")] + "JSON" => Value::Json(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get json"), + ))), + + _ => unreachable!("Unknown column type: {}", c.type_info().name()), + }, + ) + }) + .collect(), + } +} diff --git a/src/driver/sqlx_postgres.rs b/src/driver/sqlx_postgres.rs index b623c60b7..ef73001a6 100644 --- a/src/driver/sqlx_postgres.rs +++ b/src/driver/sqlx_postgres.rs @@ -1,3 +1,4 @@ +use futures::lock::Mutex; use log::LevelFilter; use sea_query::Values; use std::{future::Future, pin::Pin, sync::Arc}; @@ -64,7 +65,7 @@ impl SqlxPostgresConnector { .schema_search_path .as_ref() .map(|schema| format!("SET search_path = '{schema}'")); - let mut pool_options = options.pool_options(); + let mut pool_options = options.sqlx_pool_options(); if let Some(sql) = set_search_path_sql { pool_options = pool_options.after_connect(move |conn, _| { let sql = sql.clone(); @@ -104,7 +105,7 @@ impl SqlxPostgresPoolConnection { debug_print!("{}", stmt); let query = sqlx_query(&stmt); - let mut conn = self.pool.acquire().await.map_err(conn_acquire_err)?; + let mut conn = self.pool.acquire().await.map_err(sqlx_conn_acquire_err)?; crate::metric::metric!(self.metric_callback, &stmt, { match query.execute(&mut *conn).await { Ok(res) => Ok(res.into()), @@ -118,7 +119,7 @@ impl SqlxPostgresPoolConnection { pub async fn execute_unprepared(&self, sql: &str) -> Result { debug_print!("{}", sql); - let conn = &mut self.pool.acquire().await.map_err(conn_acquire_err)?; + let conn = &mut self.pool.acquire().await.map_err(sqlx_conn_acquire_err)?; match conn.execute(sql).await { Ok(res) => Ok(res.into()), Err(err) => Err(sqlx_error_to_exec_err(err)), @@ -131,7 +132,7 @@ impl SqlxPostgresPoolConnection { debug_print!("{}", stmt); let query = sqlx_query(&stmt); - let mut conn = self.pool.acquire().await.map_err(conn_acquire_err)?; + let mut conn = self.pool.acquire().await.map_err(sqlx_conn_acquire_err)?; crate::metric::metric!(self.metric_callback, &stmt, { match query.fetch_one(&mut *conn).await { Ok(row) => Ok(Some(row.into())), @@ -149,7 +150,7 @@ impl SqlxPostgresPoolConnection { debug_print!("{}", stmt); let query = sqlx_query(&stmt); - let mut conn = self.pool.acquire().await.map_err(conn_acquire_err)?; + let mut conn = self.pool.acquire().await.map_err(sqlx_conn_acquire_err)?; crate::metric::metric!(self.metric_callback, &stmt, { match query.fetch_all(&mut *conn).await { Ok(rows) => Ok(rows.into_iter().map(|r| r.into()).collect()), @@ -163,7 +164,7 @@ impl SqlxPostgresPoolConnection { pub async fn stream(&self, stmt: Statement) -> Result { debug_print!("{}", stmt); - let conn = self.pool.acquire().await.map_err(conn_acquire_err)?; + let conn = self.pool.acquire().await.map_err(sqlx_conn_acquire_err)?; Ok(QueryStream::from(( conn, stmt, @@ -178,7 +179,7 @@ impl SqlxPostgresPoolConnection { isolation_level: Option, access_mode: Option, ) -> Result { - let conn = self.pool.acquire().await.map_err(conn_acquire_err)?; + let conn = self.pool.acquire().await.map_err(sqlx_conn_acquire_err)?; DatabaseTransaction::new_postgres( conn, self.metric_callback.clone(), @@ -204,7 +205,7 @@ impl SqlxPostgresPoolConnection { T: Send, E: std::error::Error + Send, { - let conn = self.pool.acquire().await.map_err(conn_acquire_err)?; + let conn = self.pool.acquire().await.map_err(sqlx_conn_acquire_err)?; let transaction = DatabaseTransaction::new_postgres( conn, self.metric_callback.clone(), @@ -225,7 +226,7 @@ impl SqlxPostgresPoolConnection { /// Checks if a connection to the database is still valid. pub async fn ping(&self) -> Result<(), DbErr> { - let conn = &mut self.pool.acquire().await.map_err(conn_acquire_err)?; + let conn = &mut self.pool.acquire().await.map_err(sqlx_conn_acquire_err)?; match conn.ping().await { Ok(_) => Ok(()), Err(err) => Err(sqlx_error_to_conn_err(err)), @@ -288,3 +289,502 @@ pub(crate) async fn set_transaction_config( } Ok(()) } + +impl + From<( + PoolConnection, + Statement, + Option, + )> for crate::QueryStream +{ + fn from( + (conn, stmt, metric_callback): ( + PoolConnection, + Statement, + Option, + ), + ) -> Self { + crate::QueryStream::build( + stmt, + crate::InnerConnection::Postgres(conn), + metric_callback, + ) + } +} + +impl crate::DatabaseTransaction { + pub(crate) async fn new_postgres( + inner: PoolConnection, + metric_callback: Option, + isolation_level: Option, + access_mode: Option, + ) -> Result { + Self::begin( + Arc::new(Mutex::new(crate::InnerConnection::Postgres(inner))), + crate::DbBackend::Postgres, + metric_callback, + isolation_level, + access_mode, + ) + .await + } +} + +#[cfg(feature = "proxy")] +pub(crate) fn from_sqlx_postgres_row_to_proxy_row(row: &sqlx::postgres::PgRow) -> crate::ProxyRow { + // https://docs.rs/sqlx-postgres/0.7.2/src/sqlx_postgres/type_info.rs.html + // https://docs.rs/sqlx-postgres/0.7.2/sqlx_postgres/types/index.html + use sea_query::Value; + use sqlx::{Column, Row, TypeInfo}; + crate::ProxyRow { + values: row + .columns() + .iter() + .map(|c| { + ( + c.name().to_string(), + match c.type_info().name() { + "BOOL" => Value::Bool(Some( + row.try_get(c.ordinal()).expect("Failed to get boolean"), + )), + #[cfg(feature = "postgres-array")] + "BOOL[]" => Value::Array( + sea_query::ArrayType::Bool, + Some(Box::new( + row.try_get::, _>(c.ordinal()) + .expect("Failed to get boolean array") + .iter() + .map(|val| Value::Bool(Some(*val))) + .collect(), + )), + ), + + "\"CHAR\"" => Value::TinyInt(Some( + row.try_get(c.ordinal()) + .expect("Failed to get small integer"), + )), + #[cfg(feature = "postgres-array")] + "\"CHAR\"[]" => Value::Array( + sea_query::ArrayType::TinyInt, + Some(Box::new( + row.try_get::, _>(c.ordinal()) + .expect("Failed to get small integer array") + .iter() + .map(|val| Value::TinyInt(Some(*val))) + .collect(), + )), + ), + + "SMALLINT" | "SMALLSERIAL" | "INT2" => Value::SmallInt(Some( + row.try_get(c.ordinal()) + .expect("Failed to get small integer"), + )), + #[cfg(feature = "postgres-array")] + "SMALLINT[]" | "SMALLSERIAL[]" | "INT2[]" => Value::Array( + sea_query::ArrayType::SmallInt, + Some(Box::new( + row.try_get::, _>(c.ordinal()) + .expect("Failed to get small integer array") + .iter() + .map(|val| Value::SmallInt(Some(*val))) + .collect(), + )), + ), + + "INT" | "SERIAL" | "INT4" => Value::Int(Some( + row.try_get(c.ordinal()).expect("Failed to get integer"), + )), + #[cfg(feature = "postgres-array")] + "INT[]" | "SERIAL[]" | "INT4[]" => Value::Array( + sea_query::ArrayType::Int, + Some(Box::new( + row.try_get::, _>(c.ordinal()) + .expect("Failed to get integer array") + .iter() + .map(|val| Value::Int(Some(*val))) + .collect(), + )), + ), + + "BIGINT" | "BIGSERIAL" | "INT8" => Value::BigInt(Some( + row.try_get(c.ordinal()).expect("Failed to get big integer"), + )), + #[cfg(feature = "postgres-array")] + "BIGINT[]" | "BIGSERIAL[]" | "INT8[]" => Value::Array( + sea_query::ArrayType::BigInt, + Some(Box::new( + row.try_get::, _>(c.ordinal()) + .expect("Failed to get big integer array") + .iter() + .map(|val| Value::BigInt(Some(*val))) + .collect(), + )), + ), + + "FLOAT4" | "REAL" => Value::Float(Some( + row.try_get(c.ordinal()).expect("Failed to get float"), + )), + #[cfg(feature = "postgres-array")] + "FLOAT4[]" | "REAL[]" => Value::Array( + sea_query::ArrayType::Float, + Some(Box::new( + row.try_get::, _>(c.ordinal()) + .expect("Failed to get float array") + .iter() + .map(|val| Value::Float(Some(*val))) + .collect(), + )), + ), + + "FLOAT8" | "DOUBLE PRECISION" => Value::Double(Some( + row.try_get(c.ordinal()).expect("Failed to get double"), + )), + #[cfg(feature = "postgres-array")] + "FLOAT8[]" | "DOUBLE PRECISION[]" => Value::Array( + sea_query::ArrayType::Double, + Some(Box::new( + row.try_get::, _>(c.ordinal()) + .expect("Failed to get double array") + .iter() + .map(|val| Value::Double(Some(*val))) + .collect(), + )), + ), + + "VARCHAR" | "CHAR" | "TEXT" | "NAME" => Value::String(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get string"), + ))), + #[cfg(feature = "postgres-array")] + "VARCHAR[]" | "CHAR[]" | "TEXT[]" | "NAME[]" => Value::Array( + sea_query::ArrayType::String, + Some(Box::new( + row.try_get::, _>(c.ordinal()) + .expect("Failed to get string array") + .iter() + .map(|val| Value::String(Some(Box::new(val.clone())))) + .collect(), + )), + ), + + "BYTEA" => Value::Bytes(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get bytes"), + ))), + #[cfg(feature = "postgres-array")] + "BYTEA[]" => Value::Array( + sea_query::ArrayType::Bytes, + Some(Box::new( + row.try_get::>, _>(c.ordinal()) + .expect("Failed to get bytes array") + .iter() + .map(|val| Value::Bytes(Some(Box::new(val.clone())))) + .collect(), + )), + ), + + #[cfg(feature = "with-bigdecimal")] + "NUMERIC" => Value::BigDecimal(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get numeric"), + ))), + #[cfg(all( + feature = "with-rust_decimal", + not(feature = "with-bigdecimal") + ))] + "NUMERIC" => Value::Decimal(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get numeric"), + ))), + + #[cfg(all(feature = "with-bigdecimal", feature = "postgres-array"))] + "NUMERIC[]" => Value::Array( + sea_query::ArrayType::BigDecimal, + Some(Box::new( + row.try_get::, _>(c.ordinal()) + .expect("Failed to get numeric array") + .iter() + .map(|val| Value::BigDecimal(Some(Box::new(val.clone())))) + .collect(), + )), + ), + #[cfg(all( + feature = "with-rust_decimal", + not(feature = "with-bigdecimal"), + feature = "postgres-array" + ))] + "NUMERIC[]" => Value::Array( + sea_query::ArrayType::Decimal, + Some(Box::new( + row.try_get::, _>(c.ordinal()) + .expect("Failed to get numeric array") + .iter() + .map(|val| Value::Decimal(Some(Box::new(val.clone())))) + .collect(), + )), + ), + + "OID" => Value::BigInt(Some( + row.try_get(c.ordinal()).expect("Failed to get oid"), + )), + #[cfg(feature = "postgres-array")] + "OID[]" => Value::Array( + sea_query::ArrayType::BigInt, + Some(Box::new( + row.try_get::, _>(c.ordinal()) + .expect("Failed to get oid array") + .iter() + .map(|val| Value::BigInt(Some(*val))) + .collect(), + )), + ), + + "JSON" | "JSONB" => Value::Json(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get json"), + ))), + #[cfg(any(feature = "json-array", feature = "postgres-array"))] + "JSON[]" | "JSONB[]" => Value::Array( + sea_query::ArrayType::Json, + Some(Box::new( + row.try_get::, _>(c.ordinal()) + .expect("Failed to get json array") + .iter() + .map(|val| Value::Json(Some(Box::new(val.clone())))) + .collect(), + )), + ), + + #[cfg(feature = "with-ipnetwork")] + "INET" | "CIDR" => Value::IpNetwork(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get ip address"), + ))), + #[cfg(feature = "with-ipnetwork")] + "INET[]" | "CIDR[]" => Value::Array( + sea_query::ArrayType::IpNetwork, + Some(Box::new( + row.try_get::, _>(c.ordinal()) + .expect("Failed to get ip address array") + .iter() + .map(|val| Value::IpNetwork(Some(Box::new(val.clone())))) + .collect(), + )), + ), + + #[cfg(feature = "with-mac_address")] + "MACADDR" | "MACADDR8" => Value::MacAddress(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get mac address"), + ))), + #[cfg(all(feature = "with-mac_address", feature = "postgres-array"))] + "MACADDR[]" | "MACADDR8[]" => Value::Array( + sea_query::ArrayType::MacAddress, + Some(Box::new( + row.try_get::, _>(c.ordinal()) + .expect("Failed to get mac address array") + .iter() + .map(|val| Value::MacAddress(Some(Box::new(val.clone())))) + .collect(), + )), + ), + + #[cfg(feature = "with-chrono")] + "TIMESTAMP" => Value::ChronoDateTime(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get timestamp"), + ))), + #[cfg(all(feature = "with-time", not(feature = "with-chrono")))] + "TIMESTAMP" => Value::TimeDateTime(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get timestamp"), + ))), + + #[cfg(all(feature = "with-chrono", feature = "postgres-array"))] + "TIMESTAMP[]" => Value::Array( + sea_query::ArrayType::ChronoDateTime, + Some(Box::new( + row.try_get::, _>(c.ordinal()) + .expect("Failed to get timestamp array") + .iter() + .map(|val| Value::ChronoDateTime(Some(Box::new(val.clone())))) + .collect(), + )), + ), + #[cfg(all( + feature = "with-time", + not(feature = "with-chrono"), + feature = "postgres-array" + ))] + "TIMESTAMP[]" => Value::Array( + sea_query::ArrayType::TimeDateTime, + Some(Box::new( + row.try_get::, _>(c.ordinal()) + .expect("Failed to get timestamp array") + .iter() + .map(|val| Value::TimeDateTime(Some(Box::new(val.clone())))) + .collect(), + )), + ), + + #[cfg(feature = "with-chrono")] + "DATE" => Value::ChronoDate(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get date"), + ))), + #[cfg(all(feature = "with-time", not(feature = "with-chrono")))] + "DATE" => Value::TimeDate(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get date"), + ))), + + #[cfg(all(feature = "with-chrono", feature = "postgres-array"))] + "DATE[]" => Value::Array( + sea_query::ArrayType::ChronoDate, + Some(Box::new( + row.try_get::, _>(c.ordinal()) + .expect("Failed to get date array") + .iter() + .map(|val| Value::ChronoDate(Some(Box::new(val.clone())))) + .collect(), + )), + ), + #[cfg(all( + feature = "with-time", + not(feature = "with-chrono"), + feature = "postgres-array" + ))] + "DATE[]" => Value::Array( + sea_query::ArrayType::TimeDate, + Some(Box::new( + row.try_get::, _>(c.ordinal()) + .expect("Failed to get date array") + .iter() + .map(|val| Value::TimeDate(Some(Box::new(val.clone())))) + .collect(), + )), + ), + + #[cfg(feature = "with-chrono")] + "TIME" => Value::ChronoTime(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get time"), + ))), + #[cfg(all(feature = "with-time", not(feature = "with-chrono")))] + "TIME" => Value::TimeTime(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get time"), + ))), + + #[cfg(all(feature = "with-chrono", feature = "postgres-array"))] + "TIME[]" => Value::Array( + sea_query::ArrayType::ChronoTime, + Some(Box::new( + row.try_get::, _>(c.ordinal()) + .expect("Failed to get time array") + .iter() + .map(|val| Value::ChronoTime(Some(Box::new(val.clone())))) + .collect(), + )), + ), + #[cfg(all( + feature = "with-time", + not(feature = "with-chrono"), + feature = "postgres-array" + ))] + "TIME[]" => Value::Array( + sea_query::ArrayType::TimeTime, + Some(Box::new( + row.try_get::, _>(c.ordinal()) + .expect("Failed to get time array") + .iter() + .map(|val| Value::TimeTime(Some(Box::new(val.clone())))) + .collect(), + )), + ), + + #[cfg(feature = "with-chrono")] + "TIMESTAMPTZ" => Value::ChronoDateTimeUtc(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get timestamptz"), + ))), + #[cfg(all(feature = "with-time", not(feature = "with-chrono")))] + "TIMESTAMPTZ" => Value::TimeDateTime(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get timestamptz"), + ))), + + #[cfg(all(feature = "with-chrono", feature = "postgres-array"))] + "TIMESTAMPTZ[]" => Value::Array( + sea_query::ArrayType::ChronoDateTimeUtc, + Some(Box::new( + row.try_get::>, _>(c.ordinal()) + .expect("Failed to get timestamptz array") + .iter() + .map(|val| { + Value::ChronoDateTimeUtc(Some(Box::new(val.clone()))) + }) + .collect(), + )), + ), + #[cfg(all( + feature = "with-time", + not(feature = "with-chrono"), + feature = "postgres-array" + ))] + "TIMESTAMPTZ[]" => Value::Array( + sea_query::ArrayType::TimeDateTime, + Some(Box::new( + row.try_get::, _>(c.ordinal()) + .expect("Failed to get timestamptz array") + .iter() + .map(|val| Value::TimeDateTime(Some(Box::new(val.clone())))) + .collect(), + )), + ), + + #[cfg(feature = "with-chrono")] + "TIMETZ" => Value::ChronoTime(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get timetz"), + ))), + #[cfg(all(feature = "with-time", not(feature = "with-chrono")))] + "TIMETZ" => Value::TimeTime(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get timetz"), + ))), + + #[cfg(all(feature = "with-chrono", feature = "postgres-array"))] + "TIMETZ[]" => Value::Array( + sea_query::ArrayType::ChronoTime, + Some(Box::new( + row.try_get::, _>(c.ordinal()) + .expect("Failed to get timetz array") + .iter() + .map(|val| Value::ChronoTime(Some(Box::new(val.clone())))) + .collect(), + )), + ), + #[cfg(all( + feature = "with-time", + not(feature = "with-chrono"), + feature = "postgres-array" + ))] + "TIMETZ[]" => Value::Array( + sea_query::ArrayType::TimeTime, + Some(Box::new( + row.try_get::, _>(c.ordinal()) + .expect("Failed to get timetz array") + .iter() + .map(|val| Value::TimeTime(Some(Box::new(val.clone())))) + .collect(), + )), + ), + + #[cfg(feature = "with-uuid")] + "UUID" => Value::Uuid(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get uuid"), + ))), + + #[cfg(all(feature = "with-uuid", feature = "postgres-array"))] + "UUID[]" => Value::Array( + sea_query::ArrayType::Uuid, + Some(Box::new( + row.try_get::, _>(c.ordinal()) + .expect("Failed to get uuid array") + .iter() + .map(|val| Value::Uuid(Some(Box::new(val.clone())))) + .collect(), + )), + ), + + _ => unreachable!("Unknown column type: {}", c.type_info().name()), + }, + ) + }) + .collect(), + } +} diff --git a/src/driver/sqlx_sqlite.rs b/src/driver/sqlx_sqlite.rs index 0d275c8fa..ef62bb766 100644 --- a/src/driver/sqlx_sqlite.rs +++ b/src/driver/sqlx_sqlite.rs @@ -1,3 +1,4 @@ +use futures::lock::Mutex; use log::LevelFilter; use sea_query::Values; use std::{future::Future, pin::Pin, sync::Arc}; @@ -68,7 +69,7 @@ impl SqlxSqliteConnector { if options.get_max_connections().is_none() { options.max_connections(1); } - match options.pool_options().connect_with(opt).await { + match options.sqlx_pool_options().connect_with(opt).await { Ok(pool) => { let pool = SqlxSqlitePoolConnection { pool, @@ -105,7 +106,7 @@ impl SqlxSqlitePoolConnection { debug_print!("{}", stmt); let query = sqlx_query(&stmt); - let mut conn = self.pool.acquire().await.map_err(conn_acquire_err)?; + let mut conn = self.pool.acquire().await.map_err(sqlx_conn_acquire_err)?; crate::metric::metric!(self.metric_callback, &stmt, { match query.execute(&mut *conn).await { Ok(res) => Ok(res.into()), @@ -119,7 +120,7 @@ impl SqlxSqlitePoolConnection { pub async fn execute_unprepared(&self, sql: &str) -> Result { debug_print!("{}", sql); - let conn = &mut self.pool.acquire().await.map_err(conn_acquire_err)?; + let conn = &mut self.pool.acquire().await.map_err(sqlx_conn_acquire_err)?; match conn.execute(sql).await { Ok(res) => Ok(res.into()), Err(err) => Err(sqlx_error_to_exec_err(err)), @@ -132,7 +133,7 @@ impl SqlxSqlitePoolConnection { debug_print!("{}", stmt); let query = sqlx_query(&stmt); - let mut conn = self.pool.acquire().await.map_err(conn_acquire_err)?; + let mut conn = self.pool.acquire().await.map_err(sqlx_conn_acquire_err)?; crate::metric::metric!(self.metric_callback, &stmt, { match query.fetch_one(&mut *conn).await { Ok(row) => Ok(Some(row.into())), @@ -150,7 +151,7 @@ impl SqlxSqlitePoolConnection { debug_print!("{}", stmt); let query = sqlx_query(&stmt); - let mut conn = self.pool.acquire().await.map_err(conn_acquire_err)?; + let mut conn = self.pool.acquire().await.map_err(sqlx_conn_acquire_err)?; crate::metric::metric!(self.metric_callback, &stmt, { match query.fetch_all(&mut *conn).await { Ok(rows) => Ok(rows.into_iter().map(|r| r.into()).collect()), @@ -164,7 +165,7 @@ impl SqlxSqlitePoolConnection { pub async fn stream(&self, stmt: Statement) -> Result { debug_print!("{}", stmt); - let conn = self.pool.acquire().await.map_err(conn_acquire_err)?; + let conn = self.pool.acquire().await.map_err(sqlx_conn_acquire_err)?; Ok(QueryStream::from(( conn, stmt, @@ -179,7 +180,7 @@ impl SqlxSqlitePoolConnection { isolation_level: Option, access_mode: Option, ) -> Result { - let conn = self.pool.acquire().await.map_err(conn_acquire_err)?; + let conn = self.pool.acquire().await.map_err(sqlx_conn_acquire_err)?; DatabaseTransaction::new_sqlite( conn, self.metric_callback.clone(), @@ -205,7 +206,7 @@ impl SqlxSqlitePoolConnection { T: Send, E: std::error::Error + Send, { - let conn = self.pool.acquire().await.map_err(conn_acquire_err)?; + let conn = self.pool.acquire().await.map_err(sqlx_conn_acquire_err)?; let transaction = DatabaseTransaction::new_sqlite( conn, self.metric_callback.clone(), @@ -226,7 +227,7 @@ impl SqlxSqlitePoolConnection { /// Checks if a connection to the database is still valid. pub async fn ping(&self) -> Result<(), DbErr> { - let conn = &mut self.pool.acquire().await.map_err(conn_acquire_err)?; + let conn = &mut self.pool.acquire().await.map_err(sqlx_conn_acquire_err)?; match conn.ping().await { Ok(_) => Ok(()), Err(err) => Err(sqlx_error_to_conn_err(err)), @@ -325,6 +326,115 @@ fn ensure_returning_version(version: &str) -> Result<(), DbErr> { } } +impl + From<( + PoolConnection, + Statement, + Option, + )> for crate::QueryStream +{ + fn from( + (conn, stmt, metric_callback): ( + PoolConnection, + Statement, + Option, + ), + ) -> Self { + crate::QueryStream::build(stmt, crate::InnerConnection::Sqlite(conn), metric_callback) + } +} + +impl crate::DatabaseTransaction { + pub(crate) async fn new_sqlite( + inner: PoolConnection, + metric_callback: Option, + isolation_level: Option, + access_mode: Option, + ) -> Result { + Self::begin( + Arc::new(Mutex::new(crate::InnerConnection::Sqlite(inner))), + crate::DbBackend::Sqlite, + metric_callback, + isolation_level, + access_mode, + ) + .await + } +} + +#[cfg(feature = "proxy")] +pub(crate) fn from_sqlx_sqlite_row_to_proxy_row(row: &sqlx::sqlite::SqliteRow) -> crate::ProxyRow { + // https://docs.rs/sqlx-sqlite/0.7.2/src/sqlx_sqlite/type_info.rs.html + // https://docs.rs/sqlx-sqlite/0.7.2/sqlx_sqlite/types/index.html + use sea_query::Value; + use sqlx::{Column, Row, TypeInfo}; + crate::ProxyRow { + values: row + .columns() + .iter() + .map(|c| { + ( + c.name().to_string(), + match c.type_info().name() { + "BOOLEAN" => Value::Bool(Some( + row.try_get(c.ordinal()).expect("Failed to get boolean"), + )), + + "INTEGER" => Value::Int(Some( + row.try_get(c.ordinal()).expect("Failed to get integer"), + )), + + "BIGINT" | "INT8" => Value::BigInt(Some( + row.try_get(c.ordinal()).expect("Failed to get big integer"), + )), + + "REAL" => Value::Double(Some( + row.try_get(c.ordinal()).expect("Failed to get double"), + )), + + "TEXT" => Value::String(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get string"), + ))), + + "BLOB" => Value::Bytes(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get bytes"), + ))), + + #[cfg(feature = "with-chrono")] + "DATETIME" => Value::ChronoDateTimeUtc(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get timestamp"), + ))), + #[cfg(all(feature = "with-time", not(feature = "with-chrono")))] + "DATETIME" => Value::TimeDateTimeWithTimeZone(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get timestamp"), + ))), + + #[cfg(feature = "with-chrono")] + "DATE" => Value::ChronoDate(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get date"), + ))), + #[cfg(all(feature = "with-time", not(feature = "with-chrono")))] + "DATE" => Value::TimeDate(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get date"), + ))), + + #[cfg(feature = "with-chrono")] + "TIME" => Value::ChronoTime(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get time"), + ))), + #[cfg(all(feature = "with-time", not(feature = "with-chrono")))] + "TIME" => Value::TimeTime(Some(Box::new( + row.try_get(c.ordinal()).expect("Failed to get time"), + ))), + + _ => unreachable!("Unknown column type: {}", c.type_info().name()), + }, + ) + }) + .collect(), + } +} + #[cfg(all(test, feature = "sqlite-use-returning-for-3_35"))] mod tests { use super::*; diff --git a/src/entity/column.rs b/src/entity/column.rs index 5a2a94c64..c3c064068 100644 --- a/src/entity/column.rs +++ b/src/entity/column.rs @@ -1,4 +1,4 @@ -use crate::{EntityName, Iden, IdenStatic, IntoSimpleExpr, Iterable}; +use crate::{DbBackend, EntityName, Iden, IdenStatic, IntoSimpleExpr, Iterable}; use sea_query::{ Alias, BinOper, DynIden, Expr, IntoIden, SeaRc, SelectStatement, SimpleExpr, Value, }; @@ -247,6 +247,14 @@ pub trait ColumnTrait: IdenStatic + Iterable + FromStr { Expr::expr(self.into_simple_expr()) } + /// Construct a returning [`Expr`]. + #[allow(clippy::match_single_binding)] + fn into_returning_expr(self, db_backend: DbBackend) -> Expr { + match db_backend { + _ => Expr::col(self), + } + } + /// Cast column expression used in select statement. /// It only cast database enum as text if it's an enum column. fn select_as(&self, expr: Expr) -> SimpleExpr { diff --git a/src/error.rs b/src/error.rs index f9c054c99..ab13badb8 100644 --- a/src/error.rs +++ b/src/error.rs @@ -151,16 +151,6 @@ where DbErr::Json(s.to_string()) } -#[allow(dead_code)] -#[cfg(feature = "sqlx-dep")] -pub(crate) fn conn_acquire_err(sqlx_err: sqlx::Error) -> DbErr { - match sqlx_err { - sqlx::Error::PoolTimedOut => DbErr::ConnectionAcquire(ConnAcquireErr::Timeout), - sqlx::Error::PoolClosed => DbErr::ConnectionAcquire(ConnAcquireErr::ConnectionClosed), - _ => DbErr::Conn(RuntimeErr::SqlxError(sqlx_err)), - } -} - /// An error from unsuccessful SQL query #[derive(Error, Debug, Clone, PartialEq, Eq)] #[non_exhaustive] diff --git a/src/executor/insert.rs b/src/executor/insert.rs index 2f6aa74ce..1bd074d6f 100644 --- a/src/executor/insert.rs +++ b/src/executor/insert.rs @@ -3,7 +3,7 @@ use crate::{ Iterable, PrimaryKeyToColumn, PrimaryKeyTrait, SelectModel, SelectorRaw, Statement, TryFromU64, TryInsert, }; -use sea_query::{Expr, FromValueTuple, Iden, InsertStatement, IntoColumnRef, Query, ValueTuple}; +use sea_query::{FromValueTuple, Iden, InsertStatement, Query, ValueTuple}; use std::{future::Future, marker::PhantomData}; /// Defines a structure to perform INSERT operations in an ActiveModel @@ -118,10 +118,12 @@ where // so that self is dropped before entering await let mut query = self.query; if db.support_returning() && ::PrimaryKey::iter().count() > 0 { - let returning = Query::returning().exprs( - ::PrimaryKey::iter() - .map(|c| c.into_column().select_as(Expr::col(c.into_column_ref()))), - ); + let db_backend = db.get_database_backend(); + let returning = + Query::returning().exprs(::PrimaryKey::iter().map(|c| { + c.into_column() + .select_as(c.into_column().into_returning_expr(db_backend)) + })); query.returning(returning); } Inserter::::new(self.primary_key, query).exec(db) @@ -275,7 +277,8 @@ where let found = match db.support_returning() { true => { let returning = Query::returning().exprs( - ::Column::iter().map(|c| c.select_as(Expr::col(c))), + ::Column::iter() + .map(|c| c.select_as(c.into_returning_expr(db_backend))), ); insert_statement.returning(returning); SelectorRaw::::Model>>::from_statement( diff --git a/src/executor/update.rs b/src/executor/update.rs index e2ae3550b..4a8045f52 100644 --- a/src/executor/update.rs +++ b/src/executor/update.rs @@ -2,7 +2,7 @@ use crate::{ error::*, ActiveModelTrait, ColumnTrait, ConnectionTrait, EntityTrait, IntoActiveModel, Iterable, PrimaryKeyTrait, SelectModel, SelectorRaw, UpdateMany, UpdateOne, }; -use sea_query::{Expr, FromValueTuple, Query, UpdateStatement}; +use sea_query::{FromValueTuple, Query, UpdateStatement}; /// Defines an update operation #[derive(Clone, Debug)] @@ -114,10 +114,11 @@ impl Updater { match db.support_returning() { true => { - let returning = Query::returning() - .exprs(Column::::iter().map(|c| c.select_as(Expr::col(c)))); - self.query.returning(returning); let db_backend = db.get_database_backend(); + let returning = Query::returning().exprs( + Column::::iter().map(|c| c.select_as(c.into_returning_expr(db_backend))), + ); + self.query.returning(returning); let found: Option> = SelectorRaw::>>::from_statement( db_backend.build(&self.query), ) @@ -148,10 +149,11 @@ impl Updater { match db.support_returning() { true => { - let returning = - Query::returning().exprs(E::Column::iter().map(|c| c.select_as(Expr::col(c)))); - self.query.returning(returning); let db_backend = db.get_database_backend(); + let returning = Query::returning().exprs( + E::Column::iter().map(|c| c.select_as(c.into_returning_expr(db_backend))), + ); + self.query.returning(returning); let models: Vec = SelectorRaw::>::from_statement( db_backend.build(&self.query), ) diff --git a/tests/active_enum_tests.rs b/tests/active_enum_tests.rs index f31663fad..45610eb0e 100644 --- a/tests/active_enum_tests.rs +++ b/tests/active_enum_tests.rs @@ -13,11 +13,6 @@ use sea_orm::{ }; #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] async fn main() -> Result<(), DbErr> { let ctx = TestContext::new("active_enum_tests").await; create_tables(&ctx.db).await?; diff --git a/tests/bits_tests.rs b/tests/bits_tests.rs index 3ef12b9a7..7d642423d 100644 --- a/tests/bits_tests.rs +++ b/tests/bits_tests.rs @@ -2,7 +2,7 @@ pub mod common; use common::features::*; use pretty_assertions::assert_eq; -use sea_orm::{entity::prelude::*, entity::*, DatabaseConnection}; +use sea_orm::{entity::prelude::*, entity::*, DatabaseConnection, NotSet}; #[sea_orm_macros::test] #[cfg(feature = "sqlx-postgres")] @@ -26,7 +26,12 @@ pub async fn create_and_update(db: &DatabaseConnection) -> Result<(), DbErr> { bit64: 64, }; - let res = bits.clone().into_active_model().insert(db).await?; + let res = bits::ActiveModel { + id: NotSet, + ..bits.clone().into_active_model() + } + .insert(db) + .await?; let model = Bits::find().one(db).await?; assert_eq!(model, Some(res)); diff --git a/tests/byte_primary_key_tests.rs b/tests/byte_primary_key_tests.rs index 63579b0d6..8fef3ff25 100644 --- a/tests/byte_primary_key_tests.rs +++ b/tests/byte_primary_key_tests.rs @@ -5,11 +5,6 @@ use pretty_assertions::assert_eq; use sea_orm::{entity::prelude::*, entity::*, DatabaseConnection}; #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] async fn main() -> Result<(), DbErr> { let ctx = TestContext::new("byte_primary_key_tests").await; create_tables(&ctx.db).await?; diff --git a/tests/connection_tests.rs b/tests/connection_tests.rs index e5966d106..f75c588fc 100644 --- a/tests/connection_tests.rs +++ b/tests/connection_tests.rs @@ -5,11 +5,6 @@ use pretty_assertions::assert_eq; use sea_orm::prelude::*; #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] pub async fn connection_ping() { let ctx = TestContext::new("connection_ping").await; diff --git a/tests/crud_tests.rs b/tests/crud_tests.rs index 9f7ea4049..8f6708106 100644 --- a/tests/crud_tests.rs +++ b/tests/crud_tests.rs @@ -10,11 +10,6 @@ use sea_orm::DatabaseConnection; // DATABASE_URL="mysql://root:root@localhost" cargo test --features sqlx-mysql,runtime-async-std-native-tls --test crud_tests // DATABASE_URL="postgres://root:root@localhost" cargo test --features sqlx-postgres,runtime-async-std-native-tls --test crud_tests #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] async fn main() { let ctx = TestContext::new("bakery_chain_schema_crud_tests").await; create_tables(&ctx.db).await.unwrap(); diff --git a/tests/cursor_tests.rs b/tests/cursor_tests.rs index 0d1d54eb7..0b652d751 100644 --- a/tests/cursor_tests.rs +++ b/tests/cursor_tests.rs @@ -6,11 +6,6 @@ use sea_orm::{entity::prelude::*, DerivePartialModel, FromQueryResult, QuerySele use serde_json::json; #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] async fn cursor_tests() -> Result<(), DbErr> { let ctx = TestContext::new("cursor_tests").await; create_tables(&ctx.db).await?; diff --git a/tests/delete_by_id_tests.rs b/tests/delete_by_id_tests.rs index 8ad99805b..66a0afab8 100644 --- a/tests/delete_by_id_tests.rs +++ b/tests/delete_by_id_tests.rs @@ -1,13 +1,8 @@ pub mod common; pub use common::{features::*, setup::*, TestContext}; -use sea_orm::{entity::prelude::*, DatabaseConnection, IntoActiveModel}; +use sea_orm::{entity::prelude::*, DatabaseConnection, IntoActiveModel, NotSet}; #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] async fn main() -> Result<(), DbErr> { let ctx = TestContext::new("delete_by_id_tests").await; create_tables(&ctx.db).await?; @@ -26,9 +21,12 @@ pub async fn create_and_delete_applog(db: &DatabaseConnection) -> Result<(), DbE created_at: "2021-09-17T17:50:20+08:00".parse().unwrap(), }; - Applog::insert(log1.clone().into_active_model()) - .exec(db) - .await?; + Applog::insert(applog::ActiveModel { + id: NotSet, + ..log1.clone().into_active_model() + }) + .exec(db) + .await?; let log2 = applog::Model { id: 2, @@ -37,9 +35,12 @@ pub async fn create_and_delete_applog(db: &DatabaseConnection) -> Result<(), DbE created_at: "2022-09-17T17:50:20+08:00".parse().unwrap(), }; - Applog::insert(log2.clone().into_active_model()) - .exec(db) - .await?; + Applog::insert(applog::ActiveModel { + id: NotSet, + ..log2.clone().into_active_model() + }) + .exec(db) + .await?; let delete_res = Applog::delete_by_id(2).exec(db).await?; assert_eq!(delete_res.rows_affected, 1); diff --git a/tests/dyn_table_name_tests.rs b/tests/dyn_table_name_tests.rs index f95d3a2ef..af1f6a4ce 100644 --- a/tests/dyn_table_name_tests.rs +++ b/tests/dyn_table_name_tests.rs @@ -3,17 +3,12 @@ pub mod common; pub use common::{features::*, setup::*, TestContext}; use pretty_assertions::assert_eq; use sea_orm::{ - entity::prelude::*, DatabaseConnection, Delete, IntoActiveModel, Iterable, QueryTrait, Set, - Update, + entity::prelude::*, DatabaseConnection, Delete, IntoActiveModel, Iterable, NotSet, QueryTrait, + Set, Update, }; use sea_query::{Expr, Query}; #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] async fn main() -> Result<(), DbErr> { let ctx = TestContext::new("dyn_table_name_tests").await; create_tables(&ctx.db).await?; @@ -36,7 +31,10 @@ pub async fn dyn_table_name_lazy_static(db: &DatabaseConnection) -> Result<(), D name: "1st Row".into(), }; // Prepare insert statement - let mut insert = Entity::insert(model.clone().into_active_model()); + let mut insert = Entity::insert(ActiveModel { + id: NotSet, + ..model.clone().into_active_model() + }); // Reset the table name of insert statement insert.query().into_table(entity.table_ref()); // Execute the insert statement diff --git a/tests/empty_insert_tests.rs b/tests/empty_insert_tests.rs index 6bc01f3a1..abac775c5 100644 --- a/tests/empty_insert_tests.rs +++ b/tests/empty_insert_tests.rs @@ -11,11 +11,6 @@ pub use crud::*; use sea_orm::{DbConn, TryInsertResult}; #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] async fn main() { let ctx = TestContext::new("bakery_chain_empty_insert_tests").await; create_tables(&ctx.db).await.unwrap(); diff --git a/tests/enum_primary_key_tests.rs b/tests/enum_primary_key_tests.rs index 8364865d4..b897c3cae 100644 --- a/tests/enum_primary_key_tests.rs +++ b/tests/enum_primary_key_tests.rs @@ -10,11 +10,6 @@ use sea_orm::{ }; #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] async fn main() -> Result<(), DbErr> { let ctx = TestContext::new("enum_primary_key_tests").await; create_tables(&ctx.db).await?; diff --git a/tests/event_trigger_tests.rs b/tests/event_trigger_tests.rs index 2d8712c5b..92c7a201e 100644 --- a/tests/event_trigger_tests.rs +++ b/tests/event_trigger_tests.rs @@ -9,7 +9,7 @@ pub use common::{ TestContext, }; use pretty_assertions::assert_eq; -use sea_orm::{entity::prelude::*, entity::*, DatabaseConnection}; +use sea_orm::{entity::prelude::*, entity::*, DatabaseConnection, NotSet}; #[sea_orm_macros::test] #[cfg(all(feature = "sqlx-postgres", feature = "postgres-array"))] @@ -33,7 +33,12 @@ pub async fn insert_event_trigger(db: &DatabaseConnection) -> Result<(), DbErr> ), }; - let result = event_trigger.clone().into_active_model().insert(db).await?; + let result = event_trigger::ActiveModel { + id: NotSet, + ..event_trigger.clone().into_active_model() + } + .insert(db) + .await?; assert_eq!(result, event_trigger); diff --git a/tests/execute_unprepared_tests.rs b/tests/execute_unprepared_tests.rs index e8384981b..1f8aabb6e 100644 --- a/tests/execute_unprepared_tests.rs +++ b/tests/execute_unprepared_tests.rs @@ -5,11 +5,6 @@ use pretty_assertions::assert_eq; use sea_orm::{entity::prelude::*, ConnectionTrait, DatabaseConnection}; #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] async fn main() -> Result<(), DbErr> { let ctx = TestContext::new("execute_unprepared_tests").await; create_tables(&ctx.db).await?; @@ -24,7 +19,7 @@ pub async fn execute_unprepared(db: &DatabaseConnection) -> Result<(), DbErr> { db.execute_unprepared( [ - "INSERT INTO insert_default VALUES (1), (2), (3), (4), (5)", + "INSERT INTO insert_default (id) VALUES (1), (2), (3), (4), (5)", "DELETE FROM insert_default WHERE id % 2 = 0", ] .join(";") diff --git a/tests/insert_default_tests.rs b/tests/insert_default_tests.rs index c60671b83..a3959694e 100644 --- a/tests/insert_default_tests.rs +++ b/tests/insert_default_tests.rs @@ -5,11 +5,6 @@ use pretty_assertions::assert_eq; use sea_orm::entity::prelude::*; #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] async fn main() -> Result<(), DbErr> { let ctx = TestContext::new("insert_default_tests").await; create_tables(&ctx.db).await?; diff --git a/tests/json_struct_tests.rs b/tests/json_struct_tests.rs index 877806969..0a976d13c 100644 --- a/tests/json_struct_tests.rs +++ b/tests/json_struct_tests.rs @@ -2,15 +2,10 @@ pub mod common; pub use common::{features::*, setup::*, TestContext}; use pretty_assertions::assert_eq; -use sea_orm::{entity::prelude::*, entity::*, DatabaseConnection}; +use sea_orm::{entity::prelude::*, entity::*, DatabaseConnection, NotSet}; use serde_json::json; #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] async fn main() -> Result<(), DbErr> { let ctx = TestContext::new("json_struct_tests").await; create_tables(&ctx.db).await?; @@ -46,7 +41,12 @@ pub async fn insert_json_struct_1(db: &DatabaseConnection) -> Result<(), DbErr> }), }; - let result = model.clone().into_active_model().insert(db).await?; + let result = ActiveModel { + id: NotSet, + ..model.clone().into_active_model() + } + .insert(db) + .await?; assert_eq!(result, model); @@ -81,7 +81,12 @@ pub async fn insert_json_struct_2(db: &DatabaseConnection) -> Result<(), DbErr> json_value_opt: None, }; - let result = model.clone().into_active_model().insert(db).await?; + let result = ActiveModel { + id: NotSet, + ..model.clone().into_active_model() + } + .insert(db) + .await?; assert_eq!(result, model); diff --git a/tests/json_vec_tests.rs b/tests/json_vec_tests.rs index f92cb6732..dca6ec1cf 100644 --- a/tests/json_vec_tests.rs +++ b/tests/json_vec_tests.rs @@ -5,11 +5,6 @@ use pretty_assertions::assert_eq; use sea_orm::{entity::prelude::*, entity::*, DatabaseConnection}; #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] async fn main() -> Result<(), DbErr> { let ctx = TestContext::new("json_vec_tests").await; create_tables(&ctx.db).await?; @@ -32,7 +27,12 @@ pub async fn insert_json_vec(db: &DatabaseConnection) -> Result<(), DbErr> { ])), }; - let result = json_vec.clone().into_active_model().insert(db).await?; + let result = json_vec::ActiveModel { + id: NotSet, + ..json_vec.clone().into_active_model() + } + .insert(db) + .await?; assert_eq!(result, json_vec); @@ -48,7 +48,7 @@ pub async fn insert_json_vec(db: &DatabaseConnection) -> Result<(), DbErr> { pub async fn insert_json_string_vec_derive(db: &DatabaseConnection) -> Result<(), DbErr> { let json_vec = json_vec_derive::json_string_vec::Model { - id: 2, + id: 1, str_vec: Some(json_vec_derive::json_string_vec::StringVec(vec![ "4".to_string(), "5".to_string(), @@ -56,7 +56,12 @@ pub async fn insert_json_string_vec_derive(db: &DatabaseConnection) -> Result<() ])), }; - let result = json_vec.clone().into_active_model().insert(db).await?; + let result = json_vec_derive::json_string_vec::ActiveModel { + id: NotSet, + ..json_vec.clone().into_active_model() + } + .insert(db) + .await?; assert_eq!(result, json_vec); @@ -72,7 +77,7 @@ pub async fn insert_json_string_vec_derive(db: &DatabaseConnection) -> Result<() pub async fn insert_json_struct_vec_derive(db: &DatabaseConnection) -> Result<(), DbErr> { let json_vec = json_vec_derive::json_struct_vec::Model { - id: 2, + id: 1, struct_vec: vec![ json_vec_derive::json_struct_vec::JsonColumn { value: "4".to_string(), @@ -86,7 +91,12 @@ pub async fn insert_json_struct_vec_derive(db: &DatabaseConnection) -> Result<() ], }; - let result = json_vec.clone().into_active_model().insert(db).await?; + let result = json_vec_derive::json_struct_vec::ActiveModel { + id: NotSet, + ..json_vec.clone().into_active_model() + } + .insert(db) + .await?; assert_eq!(result, json_vec); let model = json_vec_derive::json_struct_vec::Entity::find() diff --git a/tests/loader_tests.rs b/tests/loader_tests.rs index 67341fdc6..49eea14ed 100644 --- a/tests/loader_tests.rs +++ b/tests/loader_tests.rs @@ -4,11 +4,6 @@ pub use common::{bakery_chain::*, setup::*, TestContext}; use sea_orm::{entity::*, query::*, DbConn, DbErr, RuntimeErr}; #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] async fn loader_load_one() -> Result<(), DbErr> { let ctx = TestContext::new("loader_test_load_one").await; create_tables(&ctx.db).await?; @@ -47,11 +42,6 @@ async fn loader_load_one() -> Result<(), DbErr> { } #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] async fn loader_load_many() -> Result<(), DbErr> { let ctx = TestContext::new("loader_test_load_many").await; create_tables(&ctx.db).await?; @@ -121,11 +111,6 @@ async fn loader_load_many() -> Result<(), DbErr> { } #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] async fn loader_load_many_multi() -> Result<(), DbErr> { let ctx = TestContext::new("loader_test_load_many_multi").await; create_tables(&ctx.db).await?; @@ -154,11 +139,6 @@ async fn loader_load_many_multi() -> Result<(), DbErr> { } #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] async fn loader_load_many_to_many() -> Result<(), DbErr> { let ctx = TestContext::new("loader_test_load_many_to_many").await; create_tables(&ctx.db).await?; diff --git a/tests/parallel_tests.rs b/tests/parallel_tests.rs index 5c5588211..c228c2b17 100644 --- a/tests/parallel_tests.rs +++ b/tests/parallel_tests.rs @@ -5,11 +5,6 @@ use pretty_assertions::assert_eq; use sea_orm::{entity::prelude::*, DatabaseConnection, IntoActiveModel, Set}; #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] async fn main() -> Result<(), DbErr> { let ctx = TestContext::new("features_parallel_tests").await; create_tables(&ctx.db).await?; diff --git a/tests/pi_tests.rs b/tests/pi_tests.rs index 31f3b794b..42632e1ea 100644 --- a/tests/pi_tests.rs +++ b/tests/pi_tests.rs @@ -2,15 +2,10 @@ pub mod common; use common::{features::*, setup::*, TestContext}; use pretty_assertions::assert_eq; -use sea_orm::{entity::prelude::*, entity::*, DatabaseConnection}; +use sea_orm::{entity::prelude::*, entity::*, DatabaseConnection, NotSet}; use std::str::FromStr; #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] async fn main() -> Result<(), DbErr> { let ctx = TestContext::new("pi_tests").await; create_tables(&ctx.db).await?; @@ -29,7 +24,12 @@ pub async fn create_and_update_pi(db: &DatabaseConnection) -> Result<(), DbErr> big_decimal_opt: None, }; - let res = pi.clone().into_active_model().insert(db).await?; + let res = pi::ActiveModel { + id: NotSet, + ..pi.clone().into_active_model() + } + .insert(db) + .await?; let model = Pi::find().one(db).await?; assert_eq!(model, Some(res)); diff --git a/tests/query_tests.rs b/tests/query_tests.rs index d613a6a82..28c6be4a8 100644 --- a/tests/query_tests.rs +++ b/tests/query_tests.rs @@ -7,11 +7,6 @@ pub use sea_orm::{ConnectionTrait, QueryFilter, QuerySelect}; // Run the test locally: // DATABASE_URL="mysql://root:@localhost" cargo test --features sqlx-mysql,runtime-async-std --test query_tests #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] pub async fn find_one_with_no_result() { let ctx = TestContext::new("find_one_with_no_result").await; create_tables(&ctx.db).await.unwrap(); @@ -23,11 +18,6 @@ pub async fn find_one_with_no_result() { } #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] pub async fn find_one_with_result() { let ctx = TestContext::new("find_one_with_result").await; create_tables(&ctx.db).await.unwrap(); @@ -49,11 +39,6 @@ pub async fn find_one_with_result() { } #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] pub async fn find_by_id_with_no_result() { let ctx = TestContext::new("find_by_id_with_no_result").await; create_tables(&ctx.db).await.unwrap(); @@ -65,11 +50,6 @@ pub async fn find_by_id_with_no_result() { } #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] pub async fn find_by_id_with_result() { let ctx = TestContext::new("find_by_id_with_result").await; create_tables(&ctx.db).await.unwrap(); @@ -95,11 +75,6 @@ pub async fn find_by_id_with_result() { } #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] pub async fn find_all_with_no_result() { let ctx = TestContext::new("find_all_with_no_result").await; create_tables(&ctx.db).await.unwrap(); @@ -111,11 +86,6 @@ pub async fn find_all_with_no_result() { } #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] pub async fn find_all_with_result() { let ctx = TestContext::new("find_all_with_result").await; create_tables(&ctx.db).await.unwrap(); @@ -146,11 +116,6 @@ pub async fn find_all_with_result() { } #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] pub async fn find_all_filter_no_result() { let ctx = TestContext::new("find_all_filter_no_result").await; create_tables(&ctx.db).await.unwrap(); @@ -185,11 +150,6 @@ pub async fn find_all_filter_no_result() { } #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] pub async fn find_all_filter_with_results() { let ctx = TestContext::new("find_all_filter_with_results").await; create_tables(&ctx.db).await.unwrap(); @@ -224,11 +184,6 @@ pub async fn find_all_filter_with_results() { } #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] pub async fn select_only_exclude_option_fields() { let ctx = TestContext::new("select_only_exclude_option_fields").await; create_tables(&ctx.db).await.unwrap(); diff --git a/tests/relational_tests.rs b/tests/relational_tests.rs index 6a51f2036..76943290c 100644 --- a/tests/relational_tests.rs +++ b/tests/relational_tests.rs @@ -11,11 +11,6 @@ pub use uuid::Uuid; // Run the test locally: // DATABASE_URL="mysql://root:@localhost" cargo test --features sqlx-mysql,runtime-async-std-native-tls --test relational_tests #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] pub async fn left_join() { let ctx = TestContext::new("test_left_join").await; create_tables(&ctx.db).await.unwrap(); @@ -200,11 +195,6 @@ pub async fn right_join() { } #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] pub async fn inner_join() { let ctx = TestContext::new("test_inner_join").await; create_tables(&ctx.db).await.unwrap(); @@ -290,11 +280,6 @@ pub async fn inner_join() { } #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] pub async fn group_by() { let ctx = TestContext::new("test_group_by").await; create_tables(&ctx.db).await.unwrap(); @@ -384,11 +369,6 @@ pub async fn group_by() { } #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] pub async fn having() { // customers with orders with total equal to $90 let ctx = TestContext::new("test_having").await; @@ -494,11 +474,6 @@ pub async fn having() { } #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] pub async fn related() -> Result<(), DbErr> { use sea_orm::{SelectA, SelectB}; @@ -743,11 +718,6 @@ pub async fn related() -> Result<(), DbErr> { } #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] pub async fn linked() -> Result<(), DbErr> { use common::bakery_chain::Order; use sea_orm::{SelectA, SelectB}; diff --git a/tests/returning_tests.rs b/tests/returning_tests.rs index 0e0181e9f..059c1b976 100644 --- a/tests/returning_tests.rs +++ b/tests/returning_tests.rs @@ -1,16 +1,11 @@ pub mod common; pub use common::{bakery_chain::*, setup::*, TestContext}; -use sea_orm::{entity::prelude::*, IntoActiveModel}; +use sea_orm::{entity::prelude::*, IntoActiveModel, Set}; pub use sea_query::{Expr, Query}; use serde_json::json; #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] async fn main() -> Result<(), DbErr> { use bakery::*; @@ -33,7 +28,9 @@ async fn main() -> Result<(), DbErr> { ]) .and_where(Column::Id.eq(1)); - let returning = Query::returning().columns([Column::Id, Column::Name, Column::ProfitMargin]); + let columns = [Column::Id, Column::Name, Column::ProfitMargin]; + let returning = + Query::returning().exprs(columns.into_iter().map(|c| c.into_returning_expr(builder))); create_tables(db).await?; @@ -69,11 +66,6 @@ async fn main() -> Result<(), DbErr> { } #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] #[cfg_attr( any( feature = "sqlx-mysql", @@ -95,10 +87,10 @@ async fn update_many() { create_tables(db).await?; Entity::insert( - Model { - id: 1, - action: "before_save".into(), - values: json!({ "id": "unique-id-001" }), + ActiveModel { + action: Set("before_save".into()), + values: Set(json!({ "id": "unique-id-001" })), + ..Default::default() } .into_active_model(), ) @@ -106,10 +98,10 @@ async fn update_many() { .await?; Entity::insert( - Model { - id: 2, - action: "before_save".into(), - values: json!({ "id": "unique-id-002" }), + ActiveModel { + action: Set("before_save".into()), + values: Set(json!({ "id": "unique-id-002" })), + ..Default::default() } .into_active_model(), ) @@ -117,10 +109,10 @@ async fn update_many() { .await?; Entity::insert( - Model { - id: 3, - action: "before_save".into(), - values: json!({ "id": "unique-id-003" }), + ActiveModel { + action: Set("before_save".into()), + values: Set(json!({ "id": "unique-id-003" })), + ..Default::default() } .into_active_model(), ) diff --git a/tests/self_join_tests.rs b/tests/self_join_tests.rs index f35dd5050..6c8d961e7 100644 --- a/tests/self_join_tests.rs +++ b/tests/self_join_tests.rs @@ -5,11 +5,6 @@ use pretty_assertions::assert_eq; use sea_orm::{entity::prelude::*, query::*, DbBackend, IntoActiveModel, QueryOrder}; #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] async fn main() -> Result<(), DbErr> { let ctx = TestContext::new("self_join_tests").await; create_tables(&ctx.db).await?; diff --git a/tests/sequential_op_tests.rs b/tests/sequential_op_tests.rs index d84f6bfed..0d2ca8f6e 100644 --- a/tests/sequential_op_tests.rs +++ b/tests/sequential_op_tests.rs @@ -133,9 +133,9 @@ async fn seed_data(db: &DatabaseConnection) { #[cfg(any(feature = "sqlx-mysql", feature = "sqlx-postgres"))] async fn find_baker_least_sales(db: &DatabaseConnection) -> Option { - #[cfg(feature = "sqlx-postgres")] + #[cfg(any(feature = "sqlx-postgres"))] type Type = i64; - #[cfg(not(feature = "sqlx-postgres"))] + #[cfg(not(any(feature = "sqlx-postgres")))] type Type = Decimal; #[derive(Debug, FromQueryResult)] diff --git a/tests/sql_err_tests.rs b/tests/sql_err_tests.rs index 4f032a486..5034b05df 100644 --- a/tests/sql_err_tests.rs +++ b/tests/sql_err_tests.rs @@ -1,17 +1,12 @@ pub mod common; pub use common::{bakery_chain::*, setup::*, TestContext}; pub use sea_orm::{ - entity::*, error::DbErr, error::SqlErr, tests_cfg, DatabaseConnection, DbBackend, EntityName, - ExecResult, + entity::*, error::DbErr, error::SqlErr, tests_cfg, ConnectionTrait, DatabaseConnection, + DbBackend, EntityName, ExecResult, }; use uuid::Uuid; #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] async fn main() { let ctx = TestContext::new("bakery_chain_sql_err_tests").await; create_tables(&ctx.db).await.unwrap(); diff --git a/tests/stream_tests.rs b/tests/stream_tests.rs index 37e6c21d9..e89fd6ac1 100644 --- a/tests/stream_tests.rs +++ b/tests/stream_tests.rs @@ -5,11 +5,6 @@ pub use sea_orm::entity::*; pub use sea_orm::{ConnectionTrait, DbErr, QueryFilter}; #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] pub async fn stream() -> Result<(), DbErr> { use futures::StreamExt; diff --git a/tests/string_primary_key_tests.rs b/tests/string_primary_key_tests.rs index 5d32c46fe..c2de13502 100644 --- a/tests/string_primary_key_tests.rs +++ b/tests/string_primary_key_tests.rs @@ -6,11 +6,6 @@ use sea_orm::{entity::prelude::*, entity::*, DatabaseConnection}; use serde_json::json; #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] async fn main() -> Result<(), DbErr> { let ctx = TestContext::new("features_schema_string_primary_key_tests").await; create_tables(&ctx.db).await?; diff --git a/tests/time_crate_tests.rs b/tests/time_crate_tests.rs index 6a940330f..c6f1cdc89 100644 --- a/tests/time_crate_tests.rs +++ b/tests/time_crate_tests.rs @@ -1,16 +1,11 @@ pub mod common; pub use common::{features::*, setup::*, TestContext}; use pretty_assertions::assert_eq; -use sea_orm::{entity::prelude::*, DatabaseConnection, IntoActiveModel}; +use sea_orm::{entity::prelude::*, ActiveValue::NotSet, DatabaseConnection, IntoActiveModel}; use serde_json::json; use time::macros::{date, time}; #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] async fn main() { let ctx = TestContext::new("time_crate_tests").await; create_tables(&ctx.db).await.unwrap(); @@ -30,9 +25,12 @@ pub async fn create_transaction_log(db: &DatabaseConnection) -> Result<(), DbErr .assume_utc(), }; - let res = TransactionLog::insert(transaction_log.clone().into_active_model()) - .exec(db) - .await?; + let res = TransactionLog::insert(transaction_log::ActiveModel { + id: NotSet, + ..transaction_log.clone().into_active_model() + }) + .exec(db) + .await?; assert_eq!(transaction_log.id, res.last_insert_id); assert_eq!( diff --git a/tests/timestamp_tests.rs b/tests/timestamp_tests.rs index 90e2da638..981d87a37 100644 --- a/tests/timestamp_tests.rs +++ b/tests/timestamp_tests.rs @@ -1,14 +1,9 @@ pub mod common; pub use common::{features::*, setup::*, TestContext}; use pretty_assertions::assert_eq; -use sea_orm::{entity::prelude::*, DatabaseConnection, IntoActiveModel}; +use sea_orm::{entity::prelude::*, DatabaseConnection, IntoActiveModel, NotSet}; #[sea_orm_macros::test] -#[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?; @@ -28,9 +23,12 @@ pub async fn create_applog(db: &DatabaseConnection) -> Result<(), DbErr> { created_at: "2021-09-17T17:50:20+08:00".parse().unwrap(), }; - let res = Applog::insert(log.clone().into_active_model()) - .exec(db) - .await?; + let res = Applog::insert(applog::ActiveModel { + id: NotSet, + ..log.clone().into_active_model() + }) + .exec(db) + .await?; assert_eq!(log.id, res.last_insert_id); assert_eq!(Applog::find().one(db).await?, Some(log.clone())); @@ -77,9 +75,12 @@ pub async fn create_satellites_log(db: &DatabaseConnection) -> Result<(), DbErr> deployment_date: "2022-01-07T12:11:23Z".parse().unwrap(), }; - let res = Satellite::insert(archive.clone().into_active_model()) - .exec(db) - .await?; + let res = Satellite::insert(satellite::ActiveModel { + id: NotSet, + ..archive.clone().into_active_model() + }) + .exec(db) + .await?; assert_eq!(archive.id, res.last_insert_id); assert_eq!(Satellite::find().one(db).await?, Some(archive.clone())); diff --git a/tests/transaction_tests.rs b/tests/transaction_tests.rs index fea395189..b643cc3be 100644 --- a/tests/transaction_tests.rs +++ b/tests/transaction_tests.rs @@ -5,11 +5,6 @@ use pretty_assertions::assert_eq; use sea_orm::{prelude::*, AccessMode, DatabaseTransaction, IsolationLevel, Set, TransactionTrait}; #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] pub async fn transaction() { let ctx = TestContext::new("transaction_test").await; create_tables(&ctx.db).await.unwrap(); @@ -50,11 +45,6 @@ pub async fn transaction() { } #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] pub async fn transaction_with_reference() { let ctx = TestContext::new("transaction_with_reference_test").await; create_tables(&ctx.db).await.unwrap(); @@ -105,11 +95,6 @@ fn _transaction_with_reference<'a>( } #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] pub async fn transaction_begin_out_of_scope() -> Result<(), DbErr> { let ctx = TestContext::new("transaction_begin_out_of_scope_test").await; create_tables(&ctx.db).await?; @@ -150,11 +135,6 @@ pub async fn transaction_begin_out_of_scope() -> Result<(), DbErr> { } #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] pub async fn transaction_begin_commit() -> Result<(), DbErr> { let ctx = TestContext::new("transaction_begin_commit_test").await; create_tables(&ctx.db).await?; @@ -196,11 +176,6 @@ pub async fn transaction_begin_commit() -> Result<(), DbErr> { } #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] pub async fn transaction_begin_rollback() -> Result<(), DbErr> { let ctx = TestContext::new("transaction_begin_rollback_test").await; create_tables(&ctx.db).await?; @@ -242,11 +217,6 @@ pub async fn transaction_begin_rollback() -> Result<(), DbErr> { } #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] pub async fn transaction_closure_commit() -> Result<(), DbErr> { let ctx = TestContext::new("transaction_closure_commit_test").await; create_tables(&ctx.db).await?; @@ -291,11 +261,6 @@ pub async fn transaction_closure_commit() -> Result<(), DbErr> { } #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] pub async fn transaction_closure_rollback() -> Result<(), DbErr> { let ctx = TestContext::new("transaction_closure_rollback_test").await; create_tables(&ctx.db).await?; @@ -352,11 +317,6 @@ pub async fn transaction_closure_rollback() -> Result<(), DbErr> { } #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] pub async fn transaction_with_active_model_behaviour() -> Result<(), DbErr> { let ctx = TestContext::new("transaction_with_active_model_behaviour_test").await; create_tables(&ctx.db).await?; @@ -440,11 +400,6 @@ pub async fn transaction_with_active_model_behaviour() -> Result<(), DbErr> { } #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] pub async fn transaction_nested() { let ctx = TestContext::new("transaction_nested_test").await; create_tables(&ctx.db).await.unwrap(); @@ -692,11 +647,6 @@ pub async fn transaction_nested() { } #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] pub async fn transaction_with_config() { let ctx = TestContext::new("transaction_with_config").await; create_tables(&ctx.db).await.unwrap(); diff --git a/tests/uuid_fmt_tests.rs b/tests/uuid_fmt_tests.rs index 49dd99f58..ec8909c11 100644 --- a/tests/uuid_fmt_tests.rs +++ b/tests/uuid_fmt_tests.rs @@ -2,14 +2,9 @@ pub mod common; pub use common::{features::*, setup::*, TestContext}; use pretty_assertions::assert_eq; -use sea_orm::{entity::prelude::*, entity::*, DatabaseConnection}; +use sea_orm::{entity::prelude::*, entity::*, DatabaseConnection, NotSet}; #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] async fn main() -> Result<(), DbErr> { let ctx = TestContext::new("uuid_fmt_tests").await; create_tables(&ctx.db).await?; @@ -31,7 +26,12 @@ pub async fn insert_uuid_fmt(db: &DatabaseConnection) -> Result<(), DbErr> { uuid_urn: uuid.urn(), }; - let result = uuid_fmt.clone().into_active_model().insert(db).await?; + let result = uuid_fmt::ActiveModel { + id: NotSet, + ..uuid_fmt.clone().into_active_model() + } + .insert(db) + .await?; assert_eq!(result, uuid_fmt); diff --git a/tests/uuid_tests.rs b/tests/uuid_tests.rs index 963b9fa82..e4ff15340 100644 --- a/tests/uuid_tests.rs +++ b/tests/uuid_tests.rs @@ -6,11 +6,6 @@ use sea_orm::{entity::prelude::*, entity::*, DatabaseConnection}; use serde_json::json; #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] async fn main() -> Result<(), DbErr> { let ctx = TestContext::new("bakery_chain_schema_uuid_tests").await; create_tables(&ctx.db).await?; diff --git a/tests/value_type_tests.rs b/tests/value_type_tests.rs index efcb9b125..dc58e80af 100644 --- a/tests/value_type_tests.rs +++ b/tests/value_type_tests.rs @@ -12,15 +12,10 @@ pub use common::{ TestContext, }; use pretty_assertions::assert_eq; -use sea_orm::{entity::prelude::*, entity::*, DatabaseConnection}; +use sea_orm::{entity::prelude::*, entity::*, DatabaseConnection, NotSet}; use sea_query::{ArrayType, ColumnType, Value, ValueType, ValueTypeErr}; #[sea_orm_macros::test] -#[cfg(any( - feature = "sqlx-mysql", - feature = "sqlx-sqlite", - feature = "sqlx-postgres" -))] async fn main() -> Result<(), DbErr> { let ctx = TestContext::new("value_type_tests").await; create_tables(&ctx.db).await?; @@ -45,7 +40,12 @@ pub async fn insert_value(db: &DatabaseConnection) -> Result<(), DbErr> { id: 1, number: 48.into(), }; - let result = model.clone().into_active_model().insert(db).await?; + let result = value_type_general::ActiveModel { + id: NotSet, + ..model.clone().into_active_model() + } + .insert(db) + .await?; assert_eq!(result, model); Ok(()) @@ -57,7 +57,12 @@ pub async fn postgres_insert_value(db: &DatabaseConnection) -> Result<(), DbErr> number: 48.into(), str_vec: StringVec(vec!["ab".to_string(), "cd".to_string()]), }; - let result = model.clone().into_active_model().insert(db).await?; + let result = value_type_pg::ActiveModel { + id: NotSet, + ..model.clone().into_active_model() + } + .insert(db) + .await?; assert_eq!(result, model); Ok(()) From a0a7e74ae92d990ea3b7690c2a3ec4046e316737 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=87=8A=E5=BC=A6=E5=87=9D=E7=BB=9D?= <42119608+Goodjooy@users.noreply.github.com> Date: Mon, 11 Mar 2024 02:20:24 +0800 Subject: [PATCH 03/21] Fix `DerivePartialModel` attr `entity` not support syn::Type token (#2137) * :bug: fix macro attr `entity` only accept `Ident` * :art: cargo fmt * :white_check_mark: fix test --- sea-orm-macros/src/derives/partial_model.rs | 29 ++++++++++----------- tests/partial_model_tests.rs | 11 +++++++- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/sea-orm-macros/src/derives/partial_model.rs b/sea-orm-macros/src/derives/partial_model.rs index 79ad9ea69..0413fc86b 100644 --- a/sea-orm-macros/src/derives/partial_model.rs +++ b/sea-orm-macros/src/derives/partial_model.rs @@ -27,12 +27,12 @@ enum ColumnAs { Col(syn::Ident), /// alias from a column in model ColAlias { col: syn::Ident, field: String }, - /// from a expr + /// from an expr Expr { expr: syn::Expr, field_name: String }, } struct DerivePartialModel { - entity_ident: Option, + entity: Option, ident: syn::Ident, fields: Vec, } @@ -54,7 +54,7 @@ impl DerivePartialModel { return Err(Error::InputNotStruct); }; - let mut entity_ident = None; + let mut entity = None; for attr in input.attrs.iter() { if !attr.path().is_ident("sea_orm") { @@ -63,9 +63,9 @@ impl DerivePartialModel { if let Ok(list) = attr.parse_args_with(Punctuated::::parse_terminated) { for meta in list { - entity_ident = meta + entity = meta .get_as_kv("entity") - .map(|s| syn::parse_str::(&s).map_err(Error::Syn)) + .map(|s| syn::parse_str::(&s).map_err(Error::Syn)) .transpose()?; } } @@ -102,7 +102,7 @@ impl DerivePartialModel { let col_as = match (from_col, from_expr) { (None, None) => { - if entity_ident.is_none() { + if entity.is_none() { return Err(Error::EntityNotSpecific); } ColumnAs::Col(format_ident!( @@ -115,7 +115,7 @@ impl DerivePartialModel { field_name: field_name.to_string(), }, (Some(col), None) => { - if entity_ident.is_none() { + if entity.is_none() { return Err(Error::EntityNotSpecific); } @@ -128,7 +128,7 @@ impl DerivePartialModel { } Ok(Self { - entity_ident, + entity, ident: input.ident, fields: column_as_list, }) @@ -141,18 +141,18 @@ impl DerivePartialModel { fn impl_partial_model_trait(&self) -> TokenStream { let select_ident = format_ident!("select"); let DerivePartialModel { - entity_ident, + entity, ident, fields, } = self; let select_col_code_gen = fields.iter().map(|col_as| match col_as { ColumnAs::Col(ident) => { - let entity = entity_ident.as_ref().unwrap(); + let entity = entity.as_ref().unwrap(); let col_value = quote!( <#entity as sea_orm::EntityTrait>::Column:: #ident); quote!(let #select_ident = sea_orm::SelectColumns::select_column(#select_ident, #col_value);) }, ColumnAs::ColAlias { col, field } => { - let entity = entity_ident.as_ref().unwrap(); + let entity = entity.as_ref().unwrap(); let col_value = quote!( <#entity as sea_orm::EntityTrait>::Column:: #col); quote!(let #select_ident = sea_orm::SelectColumns::select_column_as(#select_ident, #col_value, #field);) }, @@ -228,7 +228,7 @@ mod util { #[cfg(test)] mod test { use quote::format_ident; - use syn::DeriveInput; + use syn::{parse_str, DeriveInput, Type}; use crate::derives::partial_model::ColumnAs; @@ -250,11 +250,10 @@ struct PartialModel{ "#; #[test] fn test_load_macro_input() -> StdResult<()> { - let input = syn::parse_str::(CODE_SNIPPET)?; + let input = parse_str::(CODE_SNIPPET)?; let middle = DerivePartialModel::new(input).unwrap(); - - assert_eq!(middle.entity_ident, Some(format_ident!("Entity"))); + assert_eq!(middle.entity, Some(parse_str::("Entity").unwrap())); assert_eq!(middle.ident, format_ident!("PartialModel")); assert_eq!(middle.fields.len(), 3); assert_eq!( diff --git a/tests/partial_model_tests.rs b/tests/partial_model_tests.rs index a9350045d..10407c22e 100644 --- a/tests/partial_model_tests.rs +++ b/tests/partial_model_tests.rs @@ -1,5 +1,5 @@ use entity::{Column, Entity}; -use sea_orm::{ColumnTrait, DerivePartialModel, FromQueryResult}; +use sea_orm::{ColumnTrait, DerivePartialModel, EntityTrait, FromQueryResult, ModelTrait}; use sea_query::Expr; mod entity { @@ -29,6 +29,15 @@ struct SimpleTest { _bar: String, } +#[derive(FromQueryResult, DerivePartialModel)] +#[sea_orm(entity = "::Entity")] +struct EntityNameNotAIdent { + #[sea_orm(from_col = "foo2")] + _foo: i32, + #[sea_orm(from_col = "bar2")] + _bar: String, +} + #[derive(FromQueryResult, DerivePartialModel)] #[sea_orm(entity = "Entity")] struct FieldFromDiffNameColumnTest { From 572311d0ff4d49117967399a5ac221bbe86cbf60 Mon Sep 17 00:00:00 2001 From: Chris Tsang Date: Sun, 10 Mar 2024 23:39:00 +0000 Subject: [PATCH 04/21] Changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index da1a5b022..4b5fd0591 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Breaking Changes * Updated Strum to version 0.26 https://github.com/SeaQL/sea-orm/pull/2088 +* Renamed `ConnectOptions::pool_options()` to `ConnectOptions::sqlx_pool_options()` https://github.com/SeaQL/sea-orm/pull/2145 +* Made `sqlx_common` private, hiding `sqlx_error_to_xxx_err` https://github.com/SeaQL/sea-orm/pull/2145 ### Enhancements From d64b627ba2dd2dbe101f06e39b7b150d92ea1765 Mon Sep 17 00:00:00 2001 From: Chris Tsang Date: Sun, 10 Mar 2024 23:41:53 +0000 Subject: [PATCH 05/21] Changelog --- CHANGELOG.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b5fd0591..eab0a11f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,17 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Enhancements * [sea-orm-cli] Fix `migrate generate` on empty `mod.rs` files +* `DerivePartialModel` macro attribute `entity` now supports `syn::Type` https://github.com/SeaQL/sea-orm/pull/2137 +```rust +#[derive(DerivePartialModel)] +#[sea_orm(entity = "::Entity")] +struct EntityNameNotAIdent { + #[sea_orm(from_col = "foo2")] + _foo: i32, + #[sea_orm(from_col = "bar2")] + _bar: String, +} +``` ## 1.0.0-rc.1 - 2024-02-06 From 763a3f9aa100d9c827133feeb13d7359f41bd4ea Mon Sep 17 00:00:00 2001 From: ikka0426 <107255632+ikka0426@users.noreply.github.com> Date: Mon, 11 Mar 2024 07:42:07 +0800 Subject: [PATCH 06/21] actix example bug fix (#2140) * bug fix * fmt --------- Co-authored-by: Chris Tsang --- examples/actix_example/api/src/lib.rs | 30 ++++++++++++++++++--------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/examples/actix_example/api/src/lib.rs b/examples/actix_example/api/src/lib.rs index f57e3e769..cd7450c48 100644 --- a/examples/actix_example/api/src/lib.rs +++ b/examples/actix_example/api/src/lib.rs @@ -89,24 +89,34 @@ async fn create( .finish()) } -#[get("/{id}")] +#[get(r#"/{id:\d+}"#)] async fn edit(data: web::Data, id: web::Path) -> Result { let conn = &data.conn; let template = &data.templates; let id = id.into_inner(); - let post: post::Model = Query::find_post_by_id(conn, id) + let post: Option = Query::find_post_by_id(conn, id) .await - .expect("could not find post") - .unwrap_or_else(|| panic!("could not find post with id {id}")); + .expect("could not find post"); let mut ctx = tera::Context::new(); - ctx.insert("post", &post); - - let body = template - .render("edit.html.tera", &ctx) - .map_err(|_| error::ErrorInternalServerError("Template error"))?; - Ok(HttpResponse::Ok().content_type("text/html").body(body)) + let body = match post { + Some(post) => { + ctx.insert("post", &post); + + template + .render("edit.html.tera", &ctx) + .map_err(|_| error::ErrorInternalServerError("Template error")) + } + None => { + ctx.insert("uri", &format!("/{}", id)); + + template + .render("error/404.html.tera", &ctx) + .map_err(|_| error::ErrorInternalServerError("Template error")) + } + }; + Ok(HttpResponse::Ok().content_type("text/html").body(body?)) } #[post("/{id}")] From a5b3759e962faecd1e8c238376e273f5e97c426c Mon Sep 17 00:00:00 2001 From: Chris Tsang Date: Sun, 10 Mar 2024 23:45:51 +0000 Subject: [PATCH 07/21] Changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index eab0a11f1..6773bc098 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,10 @@ struct EntityNameNotAIdent { } ``` +### House keeping + +* Improved Actix example to return 404 not found on unexpected inputs https://github.com/SeaQL/sea-orm/pull/2140 + ## 1.0.0-rc.1 - 2024-02-06 ### New Features From b1f0a8167211562b179ab3eb0fa9d5e4217283de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Ma=C4=87kowski?= Date: Sun, 10 Mar 2024 23:51:01 +0000 Subject: [PATCH 08/21] Bring back rocket_okapi support (#2136) --- .github/workflows/rust.yml | 2 +- examples/rocket_okapi_example/README.md | 4 ++-- examples/rocket_okapi_example/Rocket.toml | 6 +++++- examples/rocket_okapi_example/api/Cargo.toml | 11 ++--------- .../rocket_okapi_example/api/src/okapi_example.rs | 1 - examples/rocket_okapi_example/dto/Cargo.toml | 2 +- examples/rocket_okapi_example/entity/Cargo.toml | 2 +- examples/rocket_okapi_example/service/Cargo.toml | 6 +++--- sea-orm-rocket/lib/Cargo.toml | 11 ++++------- 9 files changed, 19 insertions(+), 26 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index a84fd3b13..02e4f390e 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -243,7 +243,7 @@ jobs: examples/poem_example, examples/proxy_gluesql_example, examples/rocket_example, - # examples/rocket_okapi_example, + examples/rocket_okapi_example, examples/salvo_example, examples/seaography_example, examples/tonic_example, diff --git a/examples/rocket_okapi_example/README.md b/examples/rocket_okapi_example/README.md index 15b2c0683..78ae61e28 100644 --- a/examples/rocket_okapi_example/README.md +++ b/examples/rocket_okapi_example/README.md @@ -1,8 +1,8 @@ # Rocket and Rocket-API with SeaORM example app -1. Modify the `url` var in `api/Rocket.toml` to point to your chosen database +1. Modify the `url` var in `api/Rocket.toml` to point to your chosen database (or leave it as-is to use in-memory SQLite) -1. Turn on the appropriate database feature for your chosen db in `service/Cargo.toml` (the `"sqlx-postgres",` line) +1. If not using the SQLite DB: turn on the appropriate database feature for your chosen db in `service/Cargo.toml` (the `"sqlx-postgres",` line) 1. Execute `cargo run` to start the server diff --git a/examples/rocket_okapi_example/Rocket.toml b/examples/rocket_okapi_example/Rocket.toml index 8ad71194b..3b3ed9650 100644 --- a/examples/rocket_okapi_example/Rocket.toml +++ b/examples/rocket_okapi_example/Rocket.toml @@ -8,4 +8,8 @@ template_dir = "api/templates/" # Postgres # make sure to enable "sqlx-postgres" feature in Cargo.toml, i.e default = ["sqlx-postgres"] -url = "postgres://user:pass@localhost:5432/rocket" +# url = "postgres://user:pass@localhost:5432/rocket" + +# SQLite +# make sure to enable "sqlx-sqlite" feature in Cargo.toml, i.e default = ["sqlx-sqlite"] +url = "sqlite::memory:" diff --git a/examples/rocket_okapi_example/api/Cargo.toml b/examples/rocket_okapi_example/api/Cargo.toml index e9adc091c..877b6569a 100644 --- a/examples/rocket_okapi_example/api/Cargo.toml +++ b/examples/rocket_okapi_example/api/Cargo.toml @@ -12,7 +12,9 @@ rocket-okapi-example-service = { path = "../service" } futures = { version = "0.3" } futures-util = { version = "0.3" } rocket = { version = "0.5.0", features = ["json"] } +rocket_cors = "0.6.0" rocket_dyn_templates = { version = "0.1.0-rc.1", features = ["tera"] } +rocket_okapi = { version = "0.8.0", features = ["swagger", "rapidoc", "rocket_db_pools"] } serde_json = { version = "1" } entity = { path = "../entity" } migration = { path = "../migration" } @@ -26,12 +28,3 @@ features = [ "rocket_okapi", ] # enables rocket_okapi so to have open api features enabled # version = "0.5" - -[dependencies.rocket_okapi] -version = "0.8.0-rc.2" -features = ["swagger", "rapidoc", "rocket_db_pools"] - -[dependencies.rocket_cors] -git = "https://github.com/lawliet89/rocket_cors.git" -rev = "54fae070" -default-features = false diff --git a/examples/rocket_okapi_example/api/src/okapi_example.rs b/examples/rocket_okapi_example/api/src/okapi_example.rs index 3e0f967c7..43c532b4d 100644 --- a/examples/rocket_okapi_example/api/src/okapi_example.rs +++ b/examples/rocket_okapi_example/api/src/okapi_example.rs @@ -11,7 +11,6 @@ use crate::pool; use pool::Db; pub use entity::post; -pub use entity::post::Entity as Post; use rocket_okapi::settings::OpenApiSettings; diff --git a/examples/rocket_okapi_example/dto/Cargo.toml b/examples/rocket_okapi_example/dto/Cargo.toml index 1f08ac4e7..078592ccd 100644 --- a/examples/rocket_okapi_example/dto/Cargo.toml +++ b/examples/rocket_okapi_example/dto/Cargo.toml @@ -15,4 +15,4 @@ rocket = { version = "0.5.0", features = ["json"] } path = "../entity" [dependencies.rocket_okapi] -version = "0.8.0-rc.2" +version = "0.8.0" diff --git a/examples/rocket_okapi_example/entity/Cargo.toml b/examples/rocket_okapi_example/entity/Cargo.toml index fc90fd65c..7f878f9c1 100644 --- a/examples/rocket_okapi_example/entity/Cargo.toml +++ b/examples/rocket_okapi_example/entity/Cargo.toml @@ -16,4 +16,4 @@ path = "../../../" # remove this line in your own project version = "1.0.0-rc.1" # sea-orm version [dependencies.rocket_okapi] -version = "0.8.0-rc.2" +version = "0.8.0" diff --git a/examples/rocket_okapi_example/service/Cargo.toml b/examples/rocket_okapi_example/service/Cargo.toml index 0178db603..0915684d7 100644 --- a/examples/rocket_okapi_example/service/Cargo.toml +++ b/examples/rocket_okapi_example/service/Cargo.toml @@ -13,9 +13,9 @@ path = "../../../" # remove this line in your own project version = "1.0.0-rc.1" # sea-orm version features = [ "runtime-tokio-native-tls", - "sqlx-postgres", - # "sqlx-mysql", - # "sqlx-sqlite", +# "sqlx-postgres", +# "sqlx-mysql", + "sqlx-sqlite", ] [dev-dependencies] diff --git a/sea-orm-rocket/lib/Cargo.toml b/sea-orm-rocket/lib/Cargo.toml index 095cf8a00..b906ae1a0 100644 --- a/sea-orm-rocket/lib/Cargo.toml +++ b/sea-orm-rocket/lib/Cargo.toml @@ -20,15 +20,12 @@ default-features = false path = "../codegen" version = "0.5.1" -# [dependencies.rocket_okapi] -# version = "0.8.0-rc.4" -# default-features = false -# optional = true +[dependencies.rocket_okapi] +version = "0.8.0" +default-features = false +optional = true [dev-dependencies.rocket] version = "0.5.0" default-features = false features = ["json"] - -[features] -rocket_okapi = [] \ No newline at end of file From be7ec5b64bb7a5b569b329a22e0e35cd50089578 Mon Sep 17 00:00:00 2001 From: Chris Tsang Date: Sun, 10 Mar 2024 23:52:02 +0000 Subject: [PATCH 09/21] Changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6773bc098..7a085b3d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,7 @@ struct EntityNameNotAIdent { ### House keeping * Improved Actix example to return 404 not found on unexpected inputs https://github.com/SeaQL/sea-orm/pull/2140 +* Re-enable `rocket_okapi` example https://github.com/SeaQL/sea-orm/pull/2136 ## 1.0.0-rc.1 - 2024-02-06 From 159c53e65f9e755ba24efa0720546b3c5fada13c Mon Sep 17 00:00:00 2001 From: Dmitrii Aleksandrov Date: Mon, 11 Mar 2024 03:55:22 +0400 Subject: [PATCH 10/21] Add `RelationDef::from_alias()` (#2146) * Add `RelationDef::from_alias()` * Fix code formatting * Fix code formatting again --- src/entity/relation.rs | 52 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/src/entity/relation.rs b/src/entity/relation.rs index 6f0d105f7..db995f837 100644 --- a/src/entity/relation.rs +++ b/src/entity/relation.rs @@ -1,7 +1,7 @@ use crate::{unpack_table_ref, EntityTrait, Identity, IdentityOf, Iterable, QuerySelect, Select}; use core::marker::PhantomData; use sea_query::{ - Alias, Condition, ConditionType, DynIden, ForeignKeyCreateStatement, JoinType, SeaRc, + Alias, Condition, ConditionType, DynIden, ForeignKeyCreateStatement, IntoIden, JoinType, SeaRc, TableForeignKey, TableRef, }; use std::fmt::Debug; @@ -167,6 +167,56 @@ impl RelationDef { } } + /// Express the relation from a table alias. + /// + /// This is a shorter and more discoverable equivalent to modifying `from_tbl` field by hand. + /// + /// # Examples + /// + /// Here's a short synthetic example. + /// In real life you'd use aliases when the table name comes up twice and you need to disambiguate, + /// e.g. https://github.com/SeaQL/sea-orm/discussions/2133 + /// + /// ``` + /// use sea_orm::{ + /// entity::*, + /// query::*, + /// tests_cfg::{cake, cake_filling}, + /// DbBackend, + /// }; + /// use sea_query::Alias; + /// + /// let cf = Alias::new("cf"); + /// + /// assert_eq!( + /// cake::Entity::find() + /// .join_as( + /// JoinType::LeftJoin, + /// cake_filling::Relation::Cake.def().rev(), + /// cf.clone() + /// ) + /// .join( + /// JoinType::LeftJoin, + /// cake_filling::Relation::Filling.def().from_alias(cf) + /// ) + /// .build(DbBackend::MySql) + /// .to_string(), + /// [ + /// "SELECT `cake`.`id`, `cake`.`name` FROM `cake`", + /// "LEFT JOIN `cake_filling` AS `cf` ON `cake`.`id` = `cf`.`cake_id`", + /// "LEFT JOIN `filling` ON `cf`.`filling_id` = `filling`.`id`", + /// ] + /// .join(" ") + /// ); + /// ``` + pub fn from_alias(mut self, alias: A) -> Self + where + A: IntoIden, + { + self.from_tbl = self.from_tbl.alias(alias); + self + } + /// Set custom join ON condition. /// /// This method takes a closure with two parameters From f0724c41d83a78026db6460fb799fc829a1a1c31 Mon Sep 17 00:00:00 2001 From: Chris Tsang Date: Sun, 10 Mar 2024 23:58:48 +0000 Subject: [PATCH 11/21] Changelog --- CHANGELOG.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a085b3d2..cd4979b96 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,29 @@ struct EntityNameNotAIdent { _bar: String, } ``` +* Added `RelationDef::from_alias()` https://github.com/SeaQL/sea-orm/pull/2146 +```rust +assert_eq!( + cake::Entity::find() + .join_as( + JoinType::LeftJoin, + cake_filling::Relation::Cake.def().rev(), + cf.clone() + ) + .join( + JoinType::LeftJoin, + cake_filling::Relation::Filling.def().from_alias(cf) + ) + .build(DbBackend::MySql) + .to_string(), + [ + "SELECT `cake`.`id`, `cake`.`name` FROM `cake`", + "LEFT JOIN `cake_filling` AS `cf` ON `cake`.`id` = `cf`.`cake_id`", + "LEFT JOIN `filling` ON `cf`.`filling_id` = `filling`.`id`", + ] + .join(" ") +); +``` ### House keeping From b866236704bca613a2a2e9d8216d924d7192ab62 Mon Sep 17 00:00:00 2001 From: Billy Chan Date: Wed, 13 Mar 2024 13:46:53 +0800 Subject: [PATCH 12/21] examples: deprecate actix3_example (#2154) --- .github/workflows/rust.yml | 1 - README.md | 1 - examples/actix3_example/.env | 3 - examples/actix3_example/Cargo.toml | 12 - examples/actix3_example/README.md | 27 -- examples/actix3_example/Screenshot.png | Bin 618378 -> 0 bytes examples/actix3_example/api/Cargo.toml | 22 - examples/actix3_example/api/src/lib.rs | 219 --------- .../api/static/css/normalize.css | 427 ------------------ .../api/static/css/skeleton.css | 421 ----------------- .../actix3_example/api/static/css/style.css | 73 --- .../api/static/images/favicon.png | Bin 1155 -> 0 bytes .../api/templates/edit.html.tera | 49 -- .../api/templates/error/404.html.tera | 11 - .../api/templates/index.html.tera | 52 --- .../api/templates/layout.html.tera | 26 -- .../api/templates/new.html.tera | 38 -- examples/actix3_example/entity/Cargo.toml | 16 - examples/actix3_example/entity/src/lib.rs | 1 - examples/actix3_example/entity/src/post.rs | 18 - examples/actix3_example/migration/Cargo.toml | 21 - examples/actix3_example/migration/README.md | 37 -- examples/actix3_example/migration/src/lib.rs | 12 - .../src/m20220120_000001_create_post_table.rs | 35 -- examples/actix3_example/migration/src/main.rs | 6 - examples/actix3_example/service/Cargo.toml | 30 -- examples/actix3_example/service/src/lib.rs | 7 - .../actix3_example/service/src/mutation.rs | 53 --- examples/actix3_example/service/src/query.rs | 26 -- examples/actix3_example/service/tests/mock.rs | 79 ---- .../actix3_example/service/tests/prepare.rs | 50 -- examples/actix3_example/src/main.rs | 3 - src/lib.rs | 1 - 33 files changed, 1777 deletions(-) delete mode 100644 examples/actix3_example/.env delete mode 100644 examples/actix3_example/Cargo.toml delete mode 100644 examples/actix3_example/README.md delete mode 100644 examples/actix3_example/Screenshot.png delete mode 100644 examples/actix3_example/api/Cargo.toml delete mode 100644 examples/actix3_example/api/src/lib.rs delete mode 100644 examples/actix3_example/api/static/css/normalize.css delete mode 100644 examples/actix3_example/api/static/css/skeleton.css delete mode 100644 examples/actix3_example/api/static/css/style.css delete mode 100644 examples/actix3_example/api/static/images/favicon.png delete mode 100644 examples/actix3_example/api/templates/edit.html.tera delete mode 100644 examples/actix3_example/api/templates/error/404.html.tera delete mode 100644 examples/actix3_example/api/templates/index.html.tera delete mode 100644 examples/actix3_example/api/templates/layout.html.tera delete mode 100644 examples/actix3_example/api/templates/new.html.tera delete mode 100644 examples/actix3_example/entity/Cargo.toml delete mode 100644 examples/actix3_example/entity/src/lib.rs delete mode 100644 examples/actix3_example/entity/src/post.rs delete mode 100644 examples/actix3_example/migration/Cargo.toml delete mode 100644 examples/actix3_example/migration/README.md delete mode 100644 examples/actix3_example/migration/src/lib.rs delete mode 100644 examples/actix3_example/migration/src/m20220120_000001_create_post_table.rs delete mode 100644 examples/actix3_example/migration/src/main.rs delete mode 100644 examples/actix3_example/service/Cargo.toml delete mode 100644 examples/actix3_example/service/src/lib.rs delete mode 100644 examples/actix3_example/service/src/mutation.rs delete mode 100644 examples/actix3_example/service/src/query.rs delete mode 100644 examples/actix3_example/service/tests/mock.rs delete mode 100644 examples/actix3_example/service/tests/prepare.rs delete mode 100644 examples/actix3_example/src/main.rs diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 02e4f390e..1d4623264 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -234,7 +234,6 @@ jobs: matrix: path: [ examples/actix_example, - examples/actix3_example, examples/axum_example, examples/basic, examples/graphql_example, diff --git a/README.md b/README.md index ac46a7ba2..c3bcfbaea 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,6 @@ Please help us with maintaining SeaORM by completing the [SeaQL Community Survey Integration examples: + [Actix v4 Example](https://github.com/SeaQL/sea-orm/tree/master/examples/actix_example) -+ [Actix v3 Example](https://github.com/SeaQL/sea-orm/tree/master/examples/actix3_example) + [Axum Example](https://github.com/SeaQL/sea-orm/tree/master/examples/axum_example) + [GraphQL Example](https://github.com/SeaQL/sea-orm/tree/master/examples/graphql_example) + [jsonrpsee Example](https://github.com/SeaQL/sea-orm/tree/master/examples/jsonrpsee_example) diff --git a/examples/actix3_example/.env b/examples/actix3_example/.env deleted file mode 100644 index 1a12a183a..000000000 --- a/examples/actix3_example/.env +++ /dev/null @@ -1,3 +0,0 @@ -HOST=127.0.0.1 -PORT=8000 -DATABASE_URL="mysql://root:root@localhost/actix_example" \ No newline at end of file diff --git a/examples/actix3_example/Cargo.toml b/examples/actix3_example/Cargo.toml deleted file mode 100644 index c6ad416ad..000000000 --- a/examples/actix3_example/Cargo.toml +++ /dev/null @@ -1,12 +0,0 @@ -[package] -name = "sea-orm-actix-example" -version = "0.1.0" -authors = ["Sam Samai "] -edition = "2021" -publish = false - -[workspace] -members = [".", "api", "service", "entity", "migration"] - -[dependencies] -actix3-example-api = { path = "api" } diff --git a/examples/actix3_example/README.md b/examples/actix3_example/README.md deleted file mode 100644 index 0e65f5768..000000000 --- a/examples/actix3_example/README.md +++ /dev/null @@ -1,27 +0,0 @@ -![screenshot](Screenshot.png) - -# Actix 3 with SeaORM example app - -> Actix Web 3 has been superseeded by [Actix Web 4](https://github.com/actix/actix-web). - -1. Modify the `DATABASE_URL` var in `.env` to point to your chosen database - -1. Turn on the appropriate database feature for your chosen db in `service/Cargo.toml` (the `"sqlx-mysql",` line) - -1. Execute `cargo run` to start the server - -1. Visit [localhost:8000](http://localhost:8000) in browser - -Run server with auto-reloading: - -```bash -cargo install systemfd -systemfd --no-pid -s http::8000 -- cargo watch -x run -``` - -Run mock test on the service logic crate: - -```bash -cd service -cargo test --features mock -``` diff --git a/examples/actix3_example/Screenshot.png b/examples/actix3_example/Screenshot.png deleted file mode 100644 index 8846f70fd2da3af430c95718987734fdc4b6a231..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 618378 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åHo#XRoA45r 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

I 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 kBHG*-37mCENP!dA%VXYYhNh1TO(u@*YkEx|SZ_ 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 +7ctBT%x6<2(Kt^j4oB2t7bH8vwYd6v`KC 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ⅇ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�H_L=aLaN+``$qlyRVjn_ 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 diff --git a/examples/actix3_example/api/Cargo.toml b/examples/actix3_example/api/Cargo.toml deleted file mode 100644 index 7d17eab29..000000000 --- a/examples/actix3_example/api/Cargo.toml +++ /dev/null @@ -1,22 +0,0 @@ -[package] -name = "actix3-example-api" -version = "0.1.0" -authors = ["Sam Samai "] -edition = "2021" -publish = false - -[dependencies] -actix3-example-service = { path = "../service" } -actix-http = "2" -actix-web = "3" -actix-flash = "0.2" -actix-files = "0.5" -futures = { version = "0.3" } -futures-util = { version = "0.3" } -tera = "1.8.0" -dotenvy = "0.15" -listenfd = "0.3.3" -serde = "1" -tracing-subscriber = { version = "0.3.17", features = ["env-filter"] } -entity = { path = "../entity" } -migration = { path = "../migration" } diff --git a/examples/actix3_example/api/src/lib.rs b/examples/actix3_example/api/src/lib.rs deleted file mode 100644 index 8a2be8005..000000000 --- a/examples/actix3_example/api/src/lib.rs +++ /dev/null @@ -1,219 +0,0 @@ -use actix3_example_service::{ - sea_orm::{Database, DatabaseConnection}, - Mutation, Query, -}; -use actix_files as fs; -use actix_web::{ - error, get, middleware, post, web, App, Error, HttpRequest, HttpResponse, HttpServer, Result, -}; - -use entity::post; -use listenfd::ListenFd; -use migration::{Migrator, MigratorTrait}; -use serde::{Deserialize, Serialize}; -use std::env; -use tera::Tera; - -const DEFAULT_POSTS_PER_PAGE: u64 = 5; - -#[derive(Debug, Clone)] -struct AppState { - templates: tera::Tera, - conn: DatabaseConnection, -} -#[derive(Debug, Deserialize)] -pub struct Params { - page: Option, - posts_per_page: Option, -} - -#[derive(Deserialize, Serialize, Debug, Clone)] -struct FlashData { - kind: String, - message: String, -} - -#[get("/")] -async fn list( - req: HttpRequest, - data: web::Data, - opt_flash: Option>, -) -> Result { - let template = &data.templates; - let conn = &data.conn; - - // get params - let params = web::Query::::from_query(req.query_string()).unwrap(); - - let page = params.page.unwrap_or(1); - let posts_per_page = params.posts_per_page.unwrap_or(DEFAULT_POSTS_PER_PAGE); - - let (posts, num_pages) = Query::find_posts_in_page(conn, page, posts_per_page) - .await - .expect("Cannot find posts in page"); - - let mut ctx = tera::Context::new(); - ctx.insert("posts", &posts); - ctx.insert("page", &page); - ctx.insert("posts_per_page", &posts_per_page); - ctx.insert("num_pages", &num_pages); - - if let Some(flash) = opt_flash { - let flash_inner = flash.into_inner(); - ctx.insert("flash", &flash_inner); - } - - let body = template - .render("index.html.tera", &ctx) - .map_err(|_| error::ErrorInternalServerError("Template error"))?; - Ok(HttpResponse::Ok().content_type("text/html").body(body)) -} - -#[get("/new")] -async fn new(data: web::Data) -> Result { - let template = &data.templates; - let ctx = tera::Context::new(); - let body = template - .render("new.html.tera", &ctx) - .map_err(|_| error::ErrorInternalServerError("Template error"))?; - Ok(HttpResponse::Ok().content_type("text/html").body(body)) -} - -#[post("/")] -async fn create( - data: web::Data, - post_form: web::Form, -) -> actix_flash::Response { - let conn = &data.conn; - - let form = post_form.into_inner(); - - Mutation::create_post(conn, form) - .await - .expect("could not insert post"); - - let flash = FlashData { - kind: "success".to_owned(), - message: "Post successfully added.".to_owned(), - }; - - actix_flash::Response::with_redirect(flash, "/") -} - -#[get("/{id}")] -async fn edit(data: web::Data, id: web::Path) -> Result { - let conn = &data.conn; - let template = &data.templates; - let id = id.into_inner(); - - let post: post::Model = Query::find_post_by_id(conn, id) - .await - .expect("could not find post") - .unwrap_or_else(|| panic!("could not find post with id {id}")); - - let mut ctx = tera::Context::new(); - ctx.insert("post", &post); - - let body = template - .render("edit.html.tera", &ctx) - .map_err(|_| error::ErrorInternalServerError("Template error"))?; - Ok(HttpResponse::Ok().content_type("text/html").body(body)) -} - -#[post("/{id}")] -async fn update( - data: web::Data, - id: web::Path, - post_form: web::Form, -) -> actix_flash::Response { - let conn = &data.conn; - let form = post_form.into_inner(); - let id = id.into_inner(); - - Mutation::update_post_by_id(conn, id, form) - .await - .expect("could not edit post"); - - let flash = FlashData { - kind: "success".to_owned(), - message: "Post successfully updated.".to_owned(), - }; - - actix_flash::Response::with_redirect(flash, "/") -} - -#[post("/delete/{id}")] -async fn delete( - data: web::Data, - id: web::Path, -) -> actix_flash::Response { - let conn = &data.conn; - let id = id.into_inner(); - - Mutation::delete_post(conn, id) - .await - .expect("could not delete post"); - - let flash = FlashData { - kind: "success".to_owned(), - message: "Post successfully deleted.".to_owned(), - }; - - actix_flash::Response::with_redirect(flash, "/") -} - -#[actix_web::main] -async fn start() -> std::io::Result<()> { - std::env::set_var("RUST_LOG", "debug"); - tracing_subscriber::fmt::init(); - - // get env vars - dotenvy::dotenv().ok(); - let db_url = env::var("DATABASE_URL").expect("DATABASE_URL is not set in .env file"); - let host = env::var("HOST").expect("HOST is not set in .env file"); - let port = env::var("PORT").expect("PORT is not set in .env file"); - let server_url = format!("{host}:{port}"); - - // create post table if not exists - let conn = Database::connect(&db_url).await.unwrap(); - Migrator::up(&conn, None).await.unwrap(); - let templates = Tera::new(concat!(env!("CARGO_MANIFEST_DIR"), "/templates/**/*")).unwrap(); - let state = AppState { templates, conn }; - - let mut listenfd = ListenFd::from_env(); - let mut server = HttpServer::new(move || { - App::new() - .data(state.clone()) - .wrap(middleware::Logger::default()) // enable logger - .wrap(actix_flash::Flash::default()) - .configure(init) - .service(fs::Files::new("/static", "./api/static").show_files_listing()) - }); - - server = match listenfd.take_tcp_listener(0)? { - Some(listener) => server.listen(listener)?, - None => server.bind(&server_url)?, - }; - - println!("Starting server at {server_url}"); - server.run().await?; - - Ok(()) -} - -fn init(cfg: &mut web::ServiceConfig) { - cfg.service(list); - cfg.service(new); - cfg.service(create); - cfg.service(edit); - cfg.service(update); - cfg.service(delete); -} - -pub fn main() { - let result = start(); - - if let Some(err) = result.err() { - println!("Error: {err}") - } -} diff --git a/examples/actix3_example/api/static/css/normalize.css b/examples/actix3_example/api/static/css/normalize.css deleted file mode 100644 index 458eea1ea..000000000 --- a/examples/actix3_example/api/static/css/normalize.css +++ /dev/null @@ -1,427 +0,0 @@ -/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ - -/** - * 1. Set default font family to sans-serif. - * 2. Prevent iOS text size adjust after orientation change, without disabling - * user zoom. - */ - -html { - font-family: sans-serif; /* 1 */ - -ms-text-size-adjust: 100%; /* 2 */ - -webkit-text-size-adjust: 100%; /* 2 */ -} - -/** - * Remove default margin. - */ - -body { - margin: 0; -} - -/* HTML5 display definitions - ========================================================================== */ - -/** - * Correct `block` display not defined for any HTML5 element in IE 8/9. - * Correct `block` display not defined for `details` or `summary` in IE 10/11 - * and Firefox. - * Correct `block` display not defined for `main` in IE 11. - */ - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -menu, -nav, -section, -summary { - display: block; -} - -/** - * 1. Correct `inline-block` display not defined in IE 8/9. - * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. - */ - -audio, -canvas, -progress, -video { - display: inline-block; /* 1 */ - vertical-align: baseline; /* 2 */ -} - -/** - * Prevent modern browsers from displaying `audio` without controls. - * Remove excess height in iOS 5 devices. - */ - -audio:not([controls]) { - display: none; - height: 0; -} - -/** - * Address `[hidden]` styling not present in IE 8/9/10. - * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. - */ - -[hidden], -template { - display: none; -} - -/* Links - ========================================================================== */ - -/** - * Remove the gray background color from active links in IE 10. - */ - -a { - background-color: transparent; -} - -/** - * Improve readability when focused and also mouse hovered in all browsers. - */ - -a:active, -a:hover { - outline: 0; -} - -/* Text-level semantics - ========================================================================== */ - -/** - * Address styling not present in IE 8/9/10/11, Safari, and Chrome. - */ - -abbr[title] { - border-bottom: 1px dotted; -} - -/** - * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. - */ - -b, -strong { - font-weight: bold; -} - -/** - * Address styling not present in Safari and Chrome. - */ - -dfn { - font-style: italic; -} - -/** - * Address variable `h1` font-size and margin within `section` and `article` - * contexts in Firefox 4+, Safari, and Chrome. - */ - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -/** - * Address styling not present in IE 8/9. - */ - -mark { - background: #ff0; - color: #000; -} - -/** - * Address inconsistent and variable font size in all browsers. - */ - -small { - font-size: 80%; -} - -/** - * Prevent `sub` and `sup` affecting `line-height` in all browsers. - */ - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -/* Embedded content - ========================================================================== */ - -/** - * Remove border when inside `a` element in IE 8/9/10. - */ - -img { - border: 0; -} - -/** - * Correct overflow not hidden in IE 9/10/11. - */ - -svg:not(:root) { - overflow: hidden; -} - -/* Grouping content - ========================================================================== */ - -/** - * Address margin not present in IE 8/9 and Safari. - */ - -figure { - margin: 1em 40px; -} - -/** - * Address differences between Firefox and other browsers. - */ - -hr { - -moz-box-sizing: content-box; - box-sizing: content-box; - height: 0; -} - -/** - * Contain overflow in all browsers. - */ - -pre { - overflow: auto; -} - -/** - * Address odd `em`-unit font size rendering in all browsers. - */ - -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; -} - -/* Forms - ========================================================================== */ - -/** - * Known limitation: by default, Chrome and Safari on OS X allow very limited - * styling of `select`, unless a `border` property is set. - */ - -/** - * 1. Correct color not being inherited. - * Known issue: affects color of disabled elements. - * 2. Correct font properties not being inherited. - * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. - */ - -button, -input, -optgroup, -select, -textarea { - color: inherit; /* 1 */ - font: inherit; /* 2 */ - margin: 0; /* 3 */ -} - -/** - * Address `overflow` set to `hidden` in IE 8/9/10/11. - */ - -button { - overflow: visible; -} - -/** - * Address inconsistent `text-transform` inheritance for `button` and `select`. - * All other form control elements do not inherit `text-transform` values. - * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. - * Correct `select` style inheritance in Firefox. - */ - -button, -select { - text-transform: none; -} - -/** - * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` - * and `video` controls. - * 2. Correct inability to style clickable `input` types in iOS. - * 3. Improve usability and consistency of cursor style between image-type - * `input` and others. - */ - -button, -html input[type="button"], /* 1 */ -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; /* 2 */ - cursor: pointer; /* 3 */ -} - -/** - * Re-set default cursor for disabled elements. - */ - -button[disabled], -html input[disabled] { - cursor: default; -} - -/** - * Remove inner padding and border in Firefox 4+. - */ - -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} - -/** - * Address Firefox 4+ setting `line-height` on `input` using `!important` in - * the UA stylesheet. - */ - -input { - line-height: normal; -} - -/** - * It's recommended that you don't attempt to style these elements. - * Firefox's implementation doesn't respect box-sizing, padding, or width. - * - * 1. Address box sizing set to `content-box` in IE 8/9/10. - * 2. Remove excess padding in IE 8/9/10. - */ - -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * Fix the cursor style for Chrome's increment/decrement buttons. For certain - * `font-size` values of the `input`, it causes the cursor style of the - * decrement button to change from `default` to `text`. - */ - -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { - height: auto; -} - -/** - * 1. Address `appearance` set to `searchfield` in Safari and Chrome. - * 2. Address `box-sizing` set to `border-box` in Safari and Chrome - * (include `-moz` to future-proof). - */ - -input[type="search"] { - -webkit-appearance: textfield; /* 1 */ - -moz-box-sizing: content-box; - -webkit-box-sizing: content-box; /* 2 */ - box-sizing: content-box; -} - -/** - * Remove inner padding and search cancel button in Safari and Chrome on OS X. - * Safari (but not Chrome) clips the cancel button when the search input has - * padding (and `textfield` appearance). - */ - -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -/** - * Define consistent border, margin, and padding. - */ - -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} - -/** - * 1. Correct `color` not being inherited in IE 8/9/10/11. - * 2. Remove padding so people aren't caught out if they zero out fieldsets. - */ - -legend { - border: 0; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * Remove default vertical scrollbar in IE 8/9/10/11. - */ - -textarea { - overflow: auto; -} - -/** - * Don't inherit the `font-weight` (applied by a rule above). - * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. - */ - -optgroup { - font-weight: bold; -} - -/* Tables - ========================================================================== */ - -/** - * Remove most spacing between table cells. - */ - -table { - border-collapse: collapse; - border-spacing: 0; -} - -td, -th { - padding: 0; -} diff --git a/examples/actix3_example/api/static/css/skeleton.css b/examples/actix3_example/api/static/css/skeleton.css deleted file mode 100644 index cdc432a47..000000000 --- a/examples/actix3_example/api/static/css/skeleton.css +++ /dev/null @@ -1,421 +0,0 @@ -/* -* Skeleton V2.0.4 -* Copyright 2014, Dave Gamache -* www.getskeleton.com -* Free to use under the MIT license. -* https://opensource.org/licenses/mit-license.php -* 12/29/2014 -*/ - - -/* Table of contents -–––––––––––––––––––––––––––––––––––––––––––––––––– -- Grid -- Base Styles -- Typography -- Links -- Buttons -- Forms -- Lists -- Code -- Tables -- Spacing -- Utilities -- Clearing -- Media Queries -*/ - - -/* Grid -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -.container { - position: relative; - width: 100%; - max-width: 960px; - margin: 0 auto; - padding: 0 20px; - box-sizing: border-box; } -.column, -.columns { - width: 100%; - float: left; - box-sizing: border-box; } - -/* For devices larger than 400px */ -@media (min-width: 400px) { - .container { - width: 85%; - padding: 0; } -} - -/* For devices larger than 550px */ -@media (min-width: 550px) { - .container { - width: 80%; } - .column, - .columns { - margin-left: 4%; } - .column:first-child, - .columns:first-child { - margin-left: 0; } - - .one.column, - .one.columns { width: 4.66666666667%; } - .two.columns { width: 13.3333333333%; } - .three.columns { width: 22%; } - .four.columns { width: 30.6666666667%; } - .five.columns { width: 39.3333333333%; } - .six.columns { width: 48%; } - .seven.columns { width: 56.6666666667%; } - .eight.columns { width: 65.3333333333%; } - .nine.columns { width: 74.0%; } - .ten.columns { width: 82.6666666667%; } - .eleven.columns { width: 91.3333333333%; } - .twelve.columns { width: 100%; margin-left: 0; } - - .one-third.column { width: 30.6666666667%; } - .two-thirds.column { width: 65.3333333333%; } - - .one-half.column { width: 48%; } - - /* Offsets */ - .offset-by-one.column, - .offset-by-one.columns { margin-left: 8.66666666667%; } - .offset-by-two.column, - .offset-by-two.columns { margin-left: 17.3333333333%; } - .offset-by-three.column, - .offset-by-three.columns { margin-left: 26%; } - .offset-by-four.column, - .offset-by-four.columns { margin-left: 34.6666666667%; } - .offset-by-five.column, - .offset-by-five.columns { margin-left: 43.3333333333%; } - .offset-by-six.column, - .offset-by-six.columns { margin-left: 52%; } - .offset-by-seven.column, - .offset-by-seven.columns { margin-left: 60.6666666667%; } - .offset-by-eight.column, - .offset-by-eight.columns { margin-left: 69.3333333333%; } - .offset-by-nine.column, - .offset-by-nine.columns { margin-left: 78.0%; } - .offset-by-ten.column, - .offset-by-ten.columns { margin-left: 86.6666666667%; } - .offset-by-eleven.column, - .offset-by-eleven.columns { margin-left: 95.3333333333%; } - - .offset-by-one-third.column, - .offset-by-one-third.columns { margin-left: 34.6666666667%; } - .offset-by-two-thirds.column, - .offset-by-two-thirds.columns { margin-left: 69.3333333333%; } - - .offset-by-one-half.column, - .offset-by-one-half.columns { margin-left: 52%; } - -} - - -/* Base Styles -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -/* NOTE -html is set to 62.5% so that all the REM measurements throughout Skeleton -are based on 10px sizing. So basically 1.5rem = 15px :) */ -html { - font-size: 62.5%; } -body { - font-size: 1.5em; /* currently ems cause chrome bug misinterpreting rems on body element */ - line-height: 1.6; - font-weight: 400; - font-family: "Raleway", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif; - color: #222; } - - -/* Typography -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -h1, h2, h3, h4, h5, h6 { - margin-top: 0; - margin-bottom: 2rem; - font-weight: 300; } -h1 { font-size: 4.0rem; line-height: 1.2; letter-spacing: -.1rem;} -h2 { font-size: 3.6rem; line-height: 1.25; letter-spacing: -.1rem; } -h3 { font-size: 3.0rem; line-height: 1.3; letter-spacing: -.1rem; } -h4 { font-size: 2.4rem; line-height: 1.35; letter-spacing: -.08rem; } -h5 { font-size: 1.8rem; line-height: 1.5; letter-spacing: -.05rem; } -h6 { font-size: 1.5rem; line-height: 1.6; letter-spacing: 0; } - -/* Larger than phablet */ -@media (min-width: 550px) { - h1 { font-size: 5.0rem; } - h2 { font-size: 4.2rem; } - h3 { font-size: 3.6rem; } - h4 { font-size: 3.0rem; } - h5 { font-size: 2.4rem; } - h6 { font-size: 1.5rem; } -} - -p { - margin-top: 0; } - - -/* Links -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -a { - color: #1EAEDB; } -a:hover { - color: #0FA0CE; } - - -/* Buttons -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -.button, -button, -input[type="submit"], -input[type="reset"], -input[type="button"] { - display: inline-block; - height: 38px; - padding: 0 30px; - color: #555; - text-align: center; - font-size: 11px; - font-weight: 600; - line-height: 38px; - letter-spacing: .1rem; - text-transform: uppercase; - text-decoration: none; - white-space: nowrap; - background-color: transparent; - border-radius: 4px; - border: 1px solid #bbb; - cursor: pointer; - box-sizing: border-box; } -.button:hover, -button:hover, -input[type="submit"]:hover, -input[type="reset"]:hover, -input[type="button"]:hover, -.button:focus, -button:focus, -input[type="submit"]:focus, -input[type="reset"]:focus, -input[type="button"]:focus { - color: #333; - border-color: #888; - outline: 0; } -.button.button-primary, -button.button-primary, -button.primary, -input[type="submit"].button-primary, -input[type="reset"].button-primary, -input[type="button"].button-primary { - color: #FFF; - background-color: #33C3F0; - border-color: #33C3F0; } -.button.button-primary:hover, -button.button-primary:hover, -button.primary:hover, -input[type="submit"].button-primary:hover, -input[type="reset"].button-primary:hover, -input[type="button"].button-primary:hover, -.button.button-primary:focus, -button.button-primary:focus, -button.primary:focus, -input[type="submit"].button-primary:focus, -input[type="reset"].button-primary:focus, -input[type="button"].button-primary:focus { - color: #FFF; - background-color: #1EAEDB; - border-color: #1EAEDB; } - - -/* Forms -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -input[type="email"], -input[type="number"], -input[type="search"], -input[type="text"], -input[type="tel"], -input[type="url"], -input[type="password"], -textarea, -select { - height: 38px; - padding: 6px 10px; /* The 6px vertically centers text on FF, ignored by Webkit */ - background-color: #fff; - border: 1px solid #D1D1D1; - border-radius: 4px; - box-shadow: none; - box-sizing: border-box; } -/* Removes awkward default styles on some inputs for iOS */ -input[type="email"], -input[type="number"], -input[type="search"], -input[type="text"], -input[type="tel"], -input[type="url"], -input[type="password"], -textarea { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; } -textarea { - min-height: 65px; - padding-top: 6px; - padding-bottom: 6px; } -input[type="email"]:focus, -input[type="number"]:focus, -input[type="search"]:focus, -input[type="text"]:focus, -input[type="tel"]:focus, -input[type="url"]:focus, -input[type="password"]:focus, -textarea:focus, -select:focus { - border: 1px solid #33C3F0; - outline: 0; } -label, -legend { - display: block; - margin-bottom: .5rem; - font-weight: 600; } -fieldset { - padding: 0; - border-width: 0; } -input[type="checkbox"], -input[type="radio"] { - display: inline; } -label > .label-body { - display: inline-block; - margin-left: .5rem; - font-weight: normal; } - - -/* Lists -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -ul { - list-style: circle inside; } -ol { - list-style: decimal inside; } -ol, ul { - padding-left: 0; - margin-top: 0; } -ul ul, -ul ol, -ol ol, -ol ul { - margin: 1.5rem 0 1.5rem 3rem; - font-size: 90%; } -li { - margin-bottom: 1rem; } - - -/* Code -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -code { - padding: .2rem .5rem; - margin: 0 .2rem; - font-size: 90%; - white-space: nowrap; - background: #F1F1F1; - border: 1px solid #E1E1E1; - border-radius: 4px; } -pre > code { - display: block; - padding: 1rem 1.5rem; - white-space: pre; } - - -/* Tables -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -th, -td { - padding: 12px 15px; - text-align: left; - border-bottom: 1px solid #E1E1E1; } -th:first-child, -td:first-child { - padding-left: 0; } -th:last-child, -td:last-child { - padding-right: 0; } - - -/* Spacing -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -button, -.button { - margin-bottom: 1rem; } -input, -textarea, -select, -fieldset { - margin-bottom: 1.5rem; } -pre, -blockquote, -dl, -figure, -table, -p, -ul, -ol, -form { - margin-bottom: 2.5rem; } - - -/* Utilities -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -.u-full-width { - width: 100%; - box-sizing: border-box; } -.u-max-full-width { - max-width: 100%; - box-sizing: border-box; } -.u-pull-right { - float: right; } -.u-pull-left { - float: left; } - - -/* Misc -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -hr { - margin-top: 3rem; - margin-bottom: 3.5rem; - border-width: 0; - border-top: 1px solid #E1E1E1; } - - -/* Clearing -–––––––––––––––––––––––––––––––––––––––––––––––––– */ - -/* Self Clearing Goodness */ -.container:after, -.row:after, -.u-cf { - content: ""; - display: table; - clear: both; } - - -/* Media Queries -–––––––––––––––––––––––––––––––––––––––––––––––––– */ -/* -Note: The best way to structure the use of media queries is to create the queries -near the relevant code. For example, if you wanted to change the styles for buttons -on small devices, paste the mobile query code up in the buttons section and style it -there. -*/ - - -/* Larger than mobile */ -@media (min-width: 400px) {} - -/* Larger than phablet (also point when grid becomes active) */ -@media (min-width: 550px) {} - -/* Larger than tablet */ -@media (min-width: 750px) {} - -/* Larger than desktop */ -@media (min-width: 1000px) {} - -/* Larger than Desktop HD */ -@media (min-width: 1200px) {} diff --git a/examples/actix3_example/api/static/css/style.css b/examples/actix3_example/api/static/css/style.css deleted file mode 100644 index ac2720d35..000000000 --- a/examples/actix3_example/api/static/css/style.css +++ /dev/null @@ -1,73 +0,0 @@ -.field-error { - border: 1px solid #ff0000 !important; -} - -.field-error-flash { - color: #ff0000; - display: block; - margin: -10px 0 10px 0; -} - -.field-success { - border: 1px solid #5ab953 !important; -} - -.field-success-flash { - color: #5ab953; - display: block; - margin: -10px 0 10px 0; -} - -span.completed { - text-decoration: line-through; -} - -form.inline { - display: inline; -} - -form.link, -button.link { - display: inline; - color: #1eaedb; - border: none; - outline: none; - background: none; - cursor: pointer; - padding: 0; - margin: 0 0 0 0; - height: inherit; - text-decoration: underline; - font-size: inherit; - text-transform: none; - font-weight: normal; - line-height: inherit; - letter-spacing: inherit; -} - -form.link:hover, -button.link:hover { - color: #0fa0ce; -} - -button.small { - height: 20px; - padding: 0 10px; - font-size: 10px; - line-height: 20px; - margin: 0 2.5px; -} - -.post:hover { - background-color: #bce2ee; -} - -.post td { - padding: 5px; - width: 150px; -} - -#delete-button { - color: red; - border-color: red; -} diff --git a/examples/actix3_example/api/static/images/favicon.png b/examples/actix3_example/api/static/images/favicon.png deleted file mode 100644 index 02b7390443ae2877c186898f52da23f062adbdcc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1155 zcmV-}1bq96P)(=Qx>xolP{L(>2x~5PFgqllLG?-XURWh zvn7|E20`C&yWRV!SI1Uhr?1K%v2UB0m}sFhe_PG5av(Pl2<+kH9bD;aRz}QZjK*Wi zzU=Ss53_$_q-W@WteT*|u)Sk6X{KXzp9O21Er;<5zg9bJJVN(-=Zy8l4qegdI#S(evShjLl#Pk=r9jtgPegJHb!|>nu2DZUh(FA*z*X!Ly#;=Z< zcY*h@wRV}ZUw{XTs%x<*&yAr6*O7QQIqlYkGx)Ptvae%$?Bex{(}9JyQ+)L}e`z0B>Y7?qR+gjq`2_(| z*YR1|dc+Lo=!ck$dL#l;$vC2h!$%RW3u(Hst`lh9wh`s^nV%ujFKnUV($0F52BLCWB8{a&>BRO_*@>CN}62 z(UjU)Dh1DMef+rt@phC|?U_NQ(5sA6dU2zmz~B@z{?iJlE7 z#AcOX=vSv4Lj8d7>Y@B!eoVBgSnmWY)={>fquK*F zBSk|8RK;;Ao#{j?9gxf#WYg+-BV)QTNo=ijU>!sLJNa>)EQ2-Nf((u4A6fZ5e+Gh* Ve)_7M0d)WX002ovPDHLkV1i9aF}45z diff --git a/examples/actix3_example/api/templates/edit.html.tera b/examples/actix3_example/api/templates/edit.html.tera deleted file mode 100644 index 5aeb22afc..000000000 --- a/examples/actix3_example/api/templates/edit.html.tera +++ /dev/null @@ -1,49 +0,0 @@ -{% extends "layout.html.tera" %} {% block content %} -

-{% endblock content %} diff --git a/examples/actix3_example/api/templates/error/404.html.tera b/examples/actix3_example/api/templates/error/404.html.tera deleted file mode 100644 index afda653d2..000000000 --- a/examples/actix3_example/api/templates/error/404.html.tera +++ /dev/null @@ -1,11 +0,0 @@ - - - - - 404 - tera - - -

404: Hey! There's nothing here.

- The page at {{ uri }} does not exist! - - diff --git a/examples/actix3_example/api/templates/index.html.tera b/examples/actix3_example/api/templates/index.html.tera deleted file mode 100644 index 1dccdeba5..000000000 --- a/examples/actix3_example/api/templates/index.html.tera +++ /dev/null @@ -1,52 +0,0 @@ -{% extends "layout.html.tera" %} {% block content %} -
-

-

Posts

- {% if flash %} - - {{ flash.message }} - - {% endif %} - - - - - - - - - - {% for post in posts %} - - - - - - {% endfor %} - - - - - - - - -
IDTitleText
{{ post.id }}{{ post.title }}{{ post.text }}
- {% if page == 1 %} Previous {% else %} - Previous - {% endif %} | {% if page == num_pages %} Next {% else %} - Next - {% endif %} -
- -
- - - -
-
-{% endblock content %} diff --git a/examples/actix3_example/api/templates/layout.html.tera b/examples/actix3_example/api/templates/layout.html.tera deleted file mode 100644 index c930afcca..000000000 --- a/examples/actix3_example/api/templates/layout.html.tera +++ /dev/null @@ -1,26 +0,0 @@ - - - - - Actix Example - - - - - - - - - - - -
-

- {% block content %}{% endblock content %} -
- - diff --git a/examples/actix3_example/api/templates/new.html.tera b/examples/actix3_example/api/templates/new.html.tera deleted file mode 100644 index dee195658..000000000 --- a/examples/actix3_example/api/templates/new.html.tera +++ /dev/null @@ -1,38 +0,0 @@ -{% extends "layout.html.tera" %} {% block content %} -
-

New Post

-
-
- - -
-
-
- - - -
-
-
- -
-
-
-
-{% endblock content %} diff --git a/examples/actix3_example/entity/Cargo.toml b/examples/actix3_example/entity/Cargo.toml deleted file mode 100644 index 2925db0d9..000000000 --- a/examples/actix3_example/entity/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -name = "entity" -version = "0.1.0" -edition = "2021" -publish = false - -[lib] -name = "entity" -path = "src/lib.rs" - -[dependencies] -serde = { version = "1", features = ["derive"] } - -[dependencies.sea-orm] -path = "../../../" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm version diff --git a/examples/actix3_example/entity/src/lib.rs b/examples/actix3_example/entity/src/lib.rs deleted file mode 100644 index e8b6291ac..000000000 --- a/examples/actix3_example/entity/src/lib.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod post; diff --git a/examples/actix3_example/entity/src/post.rs b/examples/actix3_example/entity/src/post.rs deleted file mode 100644 index 62cde830c..000000000 --- a/examples/actix3_example/entity/src/post.rs +++ /dev/null @@ -1,18 +0,0 @@ -use sea_orm::entity::prelude::*; -use serde::{Deserialize, Serialize}; - -#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel, Deserialize, Serialize)] -#[sea_orm(table_name = "posts")] -pub struct Model { - #[sea_orm(primary_key)] - #[serde(skip_deserializing)] - pub id: i32, - pub title: String, - #[sea_orm(column_type = "Text")] - pub text: String, -} - -#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] -pub enum Relation {} - -impl ActiveModelBehavior for ActiveModel {} diff --git a/examples/actix3_example/migration/Cargo.toml b/examples/actix3_example/migration/Cargo.toml deleted file mode 100644 index cca2dd8a1..000000000 --- a/examples/actix3_example/migration/Cargo.toml +++ /dev/null @@ -1,21 +0,0 @@ -[package] -name = "migration" -version = "0.1.0" -edition = "2021" -publish = false - -[lib] -name = "migration" -path = "src/lib.rs" - -[dependencies] -async-std = { version = "1", features = ["attributes", "tokio1"] } - -[dependencies.sea-orm-migration] -path = "../../../sea-orm-migration" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm-migration version -features = [ - # Enable following runtime and db backend features if you want to run migration via CLI - # "runtime-async-std-native-tls", - # "sqlx-mysql", -] diff --git a/examples/actix3_example/migration/README.md b/examples/actix3_example/migration/README.md deleted file mode 100644 index 963caaeb6..000000000 --- a/examples/actix3_example/migration/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# Running Migrator CLI - -- Apply all pending migrations - ```sh - cargo run - ``` - ```sh - cargo run -- up - ``` -- Apply first 10 pending migrations - ```sh - cargo run -- up -n 10 - ``` -- Rollback last applied migrations - ```sh - cargo run -- down - ``` -- Rollback last 10 applied migrations - ```sh - cargo run -- down -n 10 - ``` -- Drop all tables from the database, then reapply all migrations - ```sh - cargo run -- fresh - ``` -- Rollback all applied migrations, then reapply all migrations - ```sh - cargo run -- refresh - ``` -- Rollback all applied migrations - ```sh - cargo run -- reset - ``` -- Check the status of all migrations - ```sh - cargo run -- status - ``` diff --git a/examples/actix3_example/migration/src/lib.rs b/examples/actix3_example/migration/src/lib.rs deleted file mode 100644 index af8d9b2ac..000000000 --- a/examples/actix3_example/migration/src/lib.rs +++ /dev/null @@ -1,12 +0,0 @@ -pub use sea_orm_migration::prelude::*; - -mod m20220120_000001_create_post_table; - -pub struct Migrator; - -#[async_trait::async_trait] -impl MigratorTrait for Migrator { - fn migrations() -> Vec> { - vec![Box::new(m20220120_000001_create_post_table::Migration)] - } -} diff --git a/examples/actix3_example/migration/src/m20220120_000001_create_post_table.rs b/examples/actix3_example/migration/src/m20220120_000001_create_post_table.rs deleted file mode 100644 index c42a347bc..000000000 --- a/examples/actix3_example/migration/src/m20220120_000001_create_post_table.rs +++ /dev/null @@ -1,35 +0,0 @@ -use sea_orm_migration::{prelude::*, schema::*}; - -#[derive(DeriveMigrationName)] -pub struct Migration; - -#[async_trait::async_trait] -impl MigrationTrait for Migration { - async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { - manager - .create_table( - Table::create() - .table(Posts::Table) - .if_not_exists() - .col(pk_auto(Posts::Id)) - .col(string(Posts::Title)) - .col(string(Posts::Text)) - .to_owned(), - ) - .await - } - - async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { - manager - .drop_table(Table::drop().table(Posts::Table).to_owned()) - .await - } -} - -#[derive(DeriveIden)] -enum Posts { - Table, - Id, - Title, - Text, -} diff --git a/examples/actix3_example/migration/src/main.rs b/examples/actix3_example/migration/src/main.rs deleted file mode 100644 index c6b6e48db..000000000 --- a/examples/actix3_example/migration/src/main.rs +++ /dev/null @@ -1,6 +0,0 @@ -use sea_orm_migration::prelude::*; - -#[async_std::main] -async fn main() { - cli::run_cli(migration::Migrator).await; -} diff --git a/examples/actix3_example/service/Cargo.toml b/examples/actix3_example/service/Cargo.toml deleted file mode 100644 index 1f7194b40..000000000 --- a/examples/actix3_example/service/Cargo.toml +++ /dev/null @@ -1,30 +0,0 @@ -[package] -name = "actix3-example-service" -version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -entity = { path = "../entity" } - -[dependencies.sea-orm] -path = "../../../" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm version -features = [ - "debug-print", - "runtime-async-std-native-tls", - "sqlx-mysql", - # "sqlx-postgres", - # "sqlx-sqlite", -] - -[dev-dependencies] -tokio = { version = "1.20.0", features = ["macros", "rt"] } - -[features] -mock = ["sea-orm/mock"] - -[[test]] -name = "mock" -required-features = ["mock"] diff --git a/examples/actix3_example/service/src/lib.rs b/examples/actix3_example/service/src/lib.rs deleted file mode 100644 index 4a80f2391..000000000 --- a/examples/actix3_example/service/src/lib.rs +++ /dev/null @@ -1,7 +0,0 @@ -mod mutation; -mod query; - -pub use mutation::*; -pub use query::*; - -pub use sea_orm; diff --git a/examples/actix3_example/service/src/mutation.rs b/examples/actix3_example/service/src/mutation.rs deleted file mode 100644 index dd6891d4a..000000000 --- a/examples/actix3_example/service/src/mutation.rs +++ /dev/null @@ -1,53 +0,0 @@ -use ::entity::{post, post::Entity as Post}; -use sea_orm::*; - -pub struct Mutation; - -impl Mutation { - pub async fn create_post( - db: &DbConn, - form_data: post::Model, - ) -> Result { - post::ActiveModel { - title: Set(form_data.title.to_owned()), - text: Set(form_data.text.to_owned()), - ..Default::default() - } - .save(db) - .await - } - - pub async fn update_post_by_id( - db: &DbConn, - id: i32, - form_data: post::Model, - ) -> Result { - let post: post::ActiveModel = Post::find_by_id(id) - .one(db) - .await? - .ok_or(DbErr::Custom("Cannot find post.".to_owned())) - .map(Into::into)?; - - post::ActiveModel { - id: post.id, - title: Set(form_data.title.to_owned()), - text: Set(form_data.text.to_owned()), - } - .update(db) - .await - } - - pub async fn delete_post(db: &DbConn, id: i32) -> Result { - let post: post::ActiveModel = Post::find_by_id(id) - .one(db) - .await? - .ok_or(DbErr::Custom("Cannot find post.".to_owned())) - .map(Into::into)?; - - post.delete(db).await - } - - pub async fn delete_all_posts(db: &DbConn) -> Result { - Post::delete_many().exec(db).await - } -} diff --git a/examples/actix3_example/service/src/query.rs b/examples/actix3_example/service/src/query.rs deleted file mode 100644 index e8d2668f5..000000000 --- a/examples/actix3_example/service/src/query.rs +++ /dev/null @@ -1,26 +0,0 @@ -use ::entity::{post, post::Entity as Post}; -use sea_orm::*; - -pub struct Query; - -impl Query { - pub async fn find_post_by_id(db: &DbConn, id: i32) -> Result, DbErr> { - Post::find_by_id(id).one(db).await - } - - /// If ok, returns (post models, num pages). - pub async fn find_posts_in_page( - db: &DbConn, - page: u64, - posts_per_page: u64, - ) -> Result<(Vec, u64), DbErr> { - // Setup paginator - let paginator = Post::find() - .order_by_asc(post::Column::Id) - .paginate(db, posts_per_page); - let num_pages = paginator.num_pages().await?; - - // Fetch paginated posts - paginator.fetch_page(page - 1).await.map(|p| (p, num_pages)) - } -} diff --git a/examples/actix3_example/service/tests/mock.rs b/examples/actix3_example/service/tests/mock.rs deleted file mode 100644 index bef2d1fdb..000000000 --- a/examples/actix3_example/service/tests/mock.rs +++ /dev/null @@ -1,79 +0,0 @@ -mod prepare; - -use actix3_example_service::{Mutation, Query}; -use entity::post; -use prepare::prepare_mock_db; - -#[tokio::test] -async fn main() { - let db = &prepare_mock_db(); - - { - let post = Query::find_post_by_id(db, 1).await.unwrap().unwrap(); - - assert_eq!(post.id, 1); - } - - { - let post = Query::find_post_by_id(db, 5).await.unwrap().unwrap(); - - assert_eq!(post.id, 5); - } - - { - let post = Mutation::create_post( - db, - post::Model { - id: 0, - title: "Title D".to_owned(), - text: "Text D".to_owned(), - }, - ) - .await - .unwrap(); - - assert_eq!( - post, - post::ActiveModel { - id: sea_orm::ActiveValue::Unchanged(6), - title: sea_orm::ActiveValue::Unchanged("Title D".to_owned()), - text: sea_orm::ActiveValue::Unchanged("Text D".to_owned()) - } - ); - } - - { - let post = Mutation::update_post_by_id( - db, - 1, - post::Model { - id: 1, - title: "New Title A".to_owned(), - text: "New Text A".to_owned(), - }, - ) - .await - .unwrap(); - - assert_eq!( - post, - post::Model { - id: 1, - title: "New Title A".to_owned(), - text: "New Text A".to_owned(), - } - ); - } - - { - let result = Mutation::delete_post(db, 5).await.unwrap(); - - assert_eq!(result.rows_affected, 1); - } - - { - let result = Mutation::delete_all_posts(db).await.unwrap(); - - assert_eq!(result.rows_affected, 5); - } -} diff --git a/examples/actix3_example/service/tests/prepare.rs b/examples/actix3_example/service/tests/prepare.rs deleted file mode 100644 index 556c192c9..000000000 --- a/examples/actix3_example/service/tests/prepare.rs +++ /dev/null @@ -1,50 +0,0 @@ -use ::entity::post; -use sea_orm::*; - -#[cfg(feature = "mock")] -pub fn prepare_mock_db() -> DatabaseConnection { - MockDatabase::new(DatabaseBackend::Postgres) - .append_query_results([ - [post::Model { - id: 1, - title: "Title A".to_owned(), - text: "Text A".to_owned(), - }], - [post::Model { - id: 5, - title: "Title C".to_owned(), - text: "Text C".to_owned(), - }], - [post::Model { - id: 6, - title: "Title D".to_owned(), - text: "Text D".to_owned(), - }], - [post::Model { - id: 1, - title: "Title A".to_owned(), - text: "Text A".to_owned(), - }], - [post::Model { - id: 1, - title: "New Title A".to_owned(), - text: "New Text A".to_owned(), - }], - [post::Model { - id: 5, - title: "Title C".to_owned(), - text: "Text C".to_owned(), - }], - ]) - .append_exec_results([ - MockExecResult { - last_insert_id: 6, - rows_affected: 1, - }, - MockExecResult { - last_insert_id: 6, - rows_affected: 5, - }, - ]) - .into_connection() -} diff --git a/examples/actix3_example/src/main.rs b/examples/actix3_example/src/main.rs deleted file mode 100644 index 5a0e63b82..000000000 --- a/examples/actix3_example/src/main.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - actix3_example_api::main(); -} diff --git a/src/lib.rs b/src/lib.rs index 80a9afce0..25bb22ff8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -40,7 +40,6 @@ //! Integration examples: //! //! + [Actix v4 Example](https://github.com/SeaQL/sea-orm/tree/master/examples/actix_example) -//! + [Actix v3 Example](https://github.com/SeaQL/sea-orm/tree/master/examples/actix3_example) //! + [Axum Example](https://github.com/SeaQL/sea-orm/tree/master/examples/axum_example) //! + [GraphQL Example](https://github.com/SeaQL/sea-orm/tree/master/examples/graphql_example) //! + [jsonrpsee Example](https://github.com/SeaQL/sea-orm/tree/master/examples/jsonrpsee_example) From 950a3bc20110fc1418577ad363c42fba60514ca4 Mon Sep 17 00:00:00 2001 From: Billy Chan Date: Wed, 13 Mar 2024 16:51:17 +0800 Subject: [PATCH 13/21] Upstream Changes - 2 (#2149) * Upstream Changes - 2 * revert --- tests/common/bakery_chain/baker.rs | 2 +- tests/common/bakery_chain/cake.rs | 2 +- tests/common/bakery_chain/cakes_bakers.rs | 4 +--- tests/common/bakery_chain/lineitem.rs | 4 +--- tests/common/bakery_chain/order.rs | 4 +--- tests/common/bakery_chain/schema.rs | 16 +++++----------- tests/common/features/schema.rs | 4 +++- tests/sequential_op_tests.rs | 9 +-------- tests/sql_err_tests.rs | 13 +++++++------ 9 files changed, 21 insertions(+), 37 deletions(-) diff --git a/tests/common/bakery_chain/baker.rs b/tests/common/bakery_chain/baker.rs index df56613a9..bc79425f1 100644 --- a/tests/common/bakery_chain/baker.rs +++ b/tests/common/bakery_chain/baker.rs @@ -17,7 +17,7 @@ pub enum Relation { from = "Column::BakeryId", to = "super::bakery::Column::Id", on_update = "Cascade", - on_delete = "Cascade" + on_delete = "SetNull" )] Bakery, } diff --git a/tests/common/bakery_chain/cake.rs b/tests/common/bakery_chain/cake.rs index a43f989c3..cf2928d71 100644 --- a/tests/common/bakery_chain/cake.rs +++ b/tests/common/bakery_chain/cake.rs @@ -21,7 +21,7 @@ pub enum Relation { from = "Column::BakeryId", to = "super::bakery::Column::Id", on_update = "Cascade", - on_delete = "Cascade" + on_delete = "SetNull" )] Bakery, #[sea_orm(has_many = "super::lineitem::Entity")] diff --git a/tests/common/bakery_chain/cakes_bakers.rs b/tests/common/bakery_chain/cakes_bakers.rs index e9543fba6..92529870f 100644 --- a/tests/common/bakery_chain/cakes_bakers.rs +++ b/tests/common/bakery_chain/cakes_bakers.rs @@ -22,9 +22,7 @@ pub enum Relation { #[sea_orm( belongs_to = "super::baker::Entity", from = "Column::BakerId", - to = "super::baker::Column::Id", - on_update = "Cascade", - on_delete = "Cascade" + to = "super::baker::Column::Id" )] Baker, } diff --git a/tests/common/bakery_chain/lineitem.rs b/tests/common/bakery_chain/lineitem.rs index eb8b58785..fae4da782 100644 --- a/tests/common/bakery_chain/lineitem.rs +++ b/tests/common/bakery_chain/lineitem.rs @@ -25,9 +25,7 @@ pub enum Relation { #[sea_orm( belongs_to = "super::cake::Entity", from = "Column::CakeId", - to = "super::cake::Column::Id", - on_update = "Cascade", - on_delete = "Cascade" + to = "super::cake::Column::Id" )] Cake, } diff --git a/tests/common/bakery_chain/order.rs b/tests/common/bakery_chain/order.rs index bc137fc9f..01b5a06ee 100644 --- a/tests/common/bakery_chain/order.rs +++ b/tests/common/bakery_chain/order.rs @@ -17,9 +17,7 @@ pub enum Relation { #[sea_orm( belongs_to = "super::bakery::Entity", from = "Column::BakeryId", - to = "super::bakery::Column::Id", - on_update = "Cascade", - on_delete = "Cascade" + to = "super::bakery::Column::Id" )] Bakery, #[sea_orm( diff --git a/tests/common/bakery_chain/schema.rs b/tests/common/bakery_chain/schema.rs index c40a61812..664ffe96f 100644 --- a/tests/common/bakery_chain/schema.rs +++ b/tests/common/bakery_chain/schema.rs @@ -58,7 +58,7 @@ pub async fn create_baker_table(db: &DbConn) -> Result { .name("fk-baker-bakery_id") .from(baker::Entity, baker::Column::BakeryId) .to(bakery::Entity, bakery::Column::Id) - .on_delete(ForeignKeyAction::Cascade) + .on_delete(ForeignKeyAction::SetNull) .on_update(ForeignKeyAction::Cascade), ) .to_owned(); @@ -113,9 +113,7 @@ pub async fn create_order_table(db: &DbConn) -> Result { ForeignKey::create() .name("fk-order-bakery_id") .from(order::Entity, order::Column::BakeryId) - .to(bakery::Entity, bakery::Column::Id) - .on_delete(ForeignKeyAction::Cascade) - .on_update(ForeignKeyAction::Cascade), + .to(bakery::Entity, bakery::Column::Id), ) .foreign_key( ForeignKey::create() @@ -172,9 +170,7 @@ pub async fn create_lineitem_table(db: &DbConn) -> Result { ForeignKey::create() .name("fk-lineitem-cake_id") .from(lineitem::Entity, lineitem::Column::CakeId) - .to(cake::Entity, cake::Column::Id) - .on_delete(ForeignKeyAction::Cascade) - .on_update(ForeignKeyAction::Cascade), + .to(cake::Entity, cake::Column::Id), ) .to_owned(); @@ -212,9 +208,7 @@ pub async fn create_cakes_bakers_table(db: &DbConn) -> Result ForeignKey::create() .name("fk-cakes_bakers-baker_id") .from(cakes_bakers::Entity, cakes_bakers::Column::BakerId) - .to(baker::Entity, baker::Column::Id) - .on_delete(ForeignKeyAction::Cascade) - .on_update(ForeignKeyAction::Cascade), + .to(baker::Entity, baker::Column::Id), ) .to_owned(); @@ -243,7 +237,7 @@ pub async fn create_cake_table(db: &DbConn) -> Result { .name("fk-cake-bakery_id") .from(cake::Entity, cake::Column::BakeryId) .to(bakery::Entity, bakery::Column::Id) - .on_delete(ForeignKeyAction::Cascade) + .on_delete(ForeignKeyAction::SetNull) .on_update(ForeignKeyAction::Cascade), ) .col( diff --git a/tests/common/features/schema.rs b/tests/common/features/schema.rs index 7a8cf814a..2e7e4e00f 100644 --- a/tests/common/features/schema.rs +++ b/tests/common/features/schema.rs @@ -45,7 +45,9 @@ pub async fn create_tables(db: &DatabaseConnection) -> Result<(), DbErr> { create_edit_log_table(db).await?; create_teas_table(db).await?; create_binary_table(db).await?; - create_bits_table(db).await?; + if matches!(db_backend, DbBackend::Postgres) { + create_bits_table(db).await?; + } create_dyn_table_name_lazy_static_table(db).await?; create_value_type_table(db).await?; diff --git a/tests/sequential_op_tests.rs b/tests/sequential_op_tests.rs index 0d2ca8f6e..bc7126dfe 100644 --- a/tests/sequential_op_tests.rs +++ b/tests/sequential_op_tests.rs @@ -3,11 +3,9 @@ pub mod common; pub use chrono::offset::Utc; pub use common::{bakery_chain::*, setup::*, TestContext}; pub use rust_decimal::prelude::*; +pub use sea_orm::{entity::*, query::*, DatabaseConnection, FromQueryResult}; pub use uuid::Uuid; -#[cfg(any(feature = "sqlx-mysql", feature = "sqlx-postgres"))] -use sea_orm::{entity::*, query::*, DatabaseConnection, FromQueryResult}; - // Run the test locally: // DATABASE_URL="mysql://root:@localhost" cargo test --features sqlx-mysql,runtime-async-std --test sequential_op_tests #[sea_orm_macros::test] @@ -29,7 +27,6 @@ pub async fn test_multiple_operations() { ctx.delete().await; } -#[cfg(any(feature = "sqlx-mysql", feature = "sqlx-postgres"))] async fn seed_data(db: &DatabaseConnection) { let bakery = bakery::ActiveModel { name: Set("SeaSide Bakery".to_owned()), @@ -131,7 +128,6 @@ async fn seed_data(db: &DatabaseConnection) { .expect("could not insert order"); } -#[cfg(any(feature = "sqlx-mysql", feature = "sqlx-postgres"))] async fn find_baker_least_sales(db: &DatabaseConnection) -> Option { #[cfg(any(feature = "sqlx-postgres"))] type Type = i64; @@ -194,7 +190,6 @@ async fn find_baker_least_sales(db: &DatabaseConnection) -> Option .unwrap() } -#[cfg(any(feature = "sqlx-mysql", feature = "sqlx-postgres"))] async fn create_cake(db: &DatabaseConnection, baker: baker::Model) -> Option { let new_cake = cake::ActiveModel { name: Set("New Cake".to_owned()), @@ -230,7 +225,6 @@ async fn create_cake(db: &DatabaseConnection, baker: baker::Model) -> Option cake.into_active_model(), + } + .insert(db) + .await + .expect_err("inserting should fail due to duplicate primary key"); assert!(matches!( error.sql_err(), From 75c1e2c1f73e0076ebb0c0e008fe331139b02bd3 Mon Sep 17 00:00:00 2001 From: Chris Tsang Date: Wed, 13 Mar 2024 09:04:44 +0000 Subject: [PATCH 14/21] Changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cd4979b96..8cf589a0a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,7 +15,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Enhancements -* [sea-orm-cli] Fix `migrate generate` on empty `mod.rs` files +* [sea-orm-cli] Fix `migrate generate` on empty `mod.rs` files https://github.com/SeaQL/sea-orm/pull/2064 * `DerivePartialModel` macro attribute `entity` now supports `syn::Type` https://github.com/SeaQL/sea-orm/pull/2137 ```rust #[derive(DerivePartialModel)] From 8f406575e73a8c1ff90beeae4f534ca7f167a898 Mon Sep 17 00:00:00 2001 From: Chris Tsang Date: Fri, 15 Mar 2024 23:01:52 +0000 Subject: [PATCH 15/21] Upgrade sea-schema --- sea-orm-cli/Cargo.toml | 2 +- sea-orm-migration/Cargo.toml | 2 +- sea-orm-migration/src/manager.rs | 18 +++++++++--------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/sea-orm-cli/Cargo.toml b/sea-orm-cli/Cargo.toml index 33c475b77..c307f8312 100644 --- a/sea-orm-cli/Cargo.toml +++ b/sea-orm-cli/Cargo.toml @@ -38,7 +38,7 @@ clap = { version = "4.3", features = ["env", "derive"], optional = true } dotenvy = { version = "0.15", default-features = false, optional = true } async-std = { version = "1.9", default-features = false, features = ["attributes", "tokio1"], optional = true } sea-orm-codegen = { version = "=1.0.0-rc.1", path = "../sea-orm-codegen", default-features = false, optional = true } -sea-schema = { version = "0.15.0-rc.1" } +sea-schema = { version = "0.15.0-rc.3" } sqlx = { version = "0.7", default-features = false, features = ["mysql", "postgres"], optional = true } tracing-subscriber = { version = "0.3.17", default-features = false, features = ["env-filter", "fmt"] } tracing = { version = "0.1", default-features = false } diff --git a/sea-orm-migration/Cargo.toml b/sea-orm-migration/Cargo.toml index ece67dfd5..8f500ada7 100644 --- a/sea-orm-migration/Cargo.toml +++ b/sea-orm-migration/Cargo.toml @@ -25,7 +25,7 @@ clap = { version = "4.3", features = ["env", "derive"], optional = true } dotenvy = { version = "0.15", default-features = false, optional = true } sea-orm = { version = "1.0.0-rc.1", path = "../", default-features = false, features = ["macros"] } sea-orm-cli = { version = "1.0.0-rc.1", path = "../sea-orm-cli", default-features = false, optional = true } -sea-schema = { version = "0.15.0-rc.1" } +sea-schema = { version = "0.15.0-rc.3" } tracing = { version = "0.1", default-features = false, features = ["log"] } tracing-subscriber = { version = "0.3.17", default-features = false, features = ["env-filter", "fmt"] } futures = { version = "0.3", default-features = false, features = ["std"] } diff --git a/sea-orm-migration/src/manager.rs b/sea-orm-migration/src/manager.rs index 994204e14..14ca418ca 100644 --- a/sea-orm-migration/src/manager.rs +++ b/sea-orm-migration/src/manager.rs @@ -101,9 +101,9 @@ impl<'c> SchemaManager<'c> { T: AsRef, { let stmt = match self.conn.get_database_backend() { - DbBackend::MySql => MySql::has_table(table), - DbBackend::Postgres => Postgres::has_table(table), - DbBackend::Sqlite => Sqlite::has_table(table), + DbBackend::MySql => MySql.has_table(table), + DbBackend::Postgres => Postgres.has_table(table), + DbBackend::Sqlite => Sqlite.has_table(table), }; let builder = self.conn.get_database_backend(); @@ -122,9 +122,9 @@ impl<'c> SchemaManager<'c> { C: AsRef, { let stmt = match self.conn.get_database_backend() { - DbBackend::MySql => MySql::has_column(table, column), - DbBackend::Postgres => Postgres::has_column(table, column), - DbBackend::Sqlite => Sqlite::has_column(table, column), + DbBackend::MySql => MySql.has_column(table, column), + DbBackend::Postgres => Postgres.has_column(table, column), + DbBackend::Sqlite => Sqlite.has_column(table, column), }; let builder = self.conn.get_database_backend(); @@ -143,9 +143,9 @@ impl<'c> SchemaManager<'c> { I: AsRef, { let stmt = match self.conn.get_database_backend() { - DbBackend::MySql => MySql::has_index(table, index), - DbBackend::Postgres => Postgres::has_index(table, index), - DbBackend::Sqlite => Sqlite::has_index(table, index), + DbBackend::MySql => MySql.has_index(table, index), + DbBackend::Postgres => Postgres.has_index(table, index), + DbBackend::Sqlite => Sqlite.has_index(table, index), }; let builder = self.conn.get_database_backend(); From 4cda344811f422a468a9270a6777e4e923762478 Mon Sep 17 00:00:00 2001 From: Chris Tsang Date: Fri, 15 Mar 2024 23:09:00 +0000 Subject: [PATCH 16/21] Changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8cf589a0a..b3b80f6df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -51,6 +51,10 @@ assert_eq!( ); ``` +### Upgrades + +* Upgrade `sea-schema` to `0.15.0-rc.3` + ### House keeping * Improved Actix example to return 404 not found on unexpected inputs https://github.com/SeaQL/sea-orm/pull/2140 From 88128ee2aa03ce20ef7688ad1f26f3b5cde6c555 Mon Sep 17 00:00:00 2001 From: Chris Tsang Date: Fri, 15 Mar 2024 23:11:37 +0000 Subject: [PATCH 17/21] [cli] test --- sea-orm-migration/src/manager.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sea-orm-migration/src/manager.rs b/sea-orm-migration/src/manager.rs index 14ca418ca..06bfe2c5d 100644 --- a/sea-orm-migration/src/manager.rs +++ b/sea-orm-migration/src/manager.rs @@ -94,7 +94,7 @@ impl<'c> SchemaManager<'c> { } } -/// Schema Inspection +/// Schema Inspection. impl<'c> SchemaManager<'c> { pub async fn has_table(&self, table: T) -> Result where From 65de9f929cce7d14bba653a5a52082cf00504d21 Mon Sep 17 00:00:00 2001 From: Chris Tsang Date: Fri, 15 Mar 2024 23:31:56 +0000 Subject: [PATCH 18/21] 1.0.0-rc.2 --- CHANGELOG.md | 2 +- Cargo.toml | 4 ++-- sea-orm-cli/Cargo.toml | 4 ++-- sea-orm-codegen/Cargo.toml | 2 +- sea-orm-macros/Cargo.toml | 2 +- sea-orm-migration/Cargo.toml | 6 +++--- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b3b80f6df..809d26860 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ 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/). -## 1.0.0-rc.2 - Pending +## 1.0.0-rc.2 - 2024-03-15 ### Breaking Changes diff --git a/Cargo.toml b/Cargo.toml index 71c89136b..9905a6774 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ members = [".", "sea-orm-macros", "sea-orm-codegen"] [package] name = "sea-orm" -version = "1.0.0-rc.1" +version = "1.0.0-rc.2" authors = ["Chris Tsang "] edition = "2021" description = "🐚 An async & dynamic ORM for Rust" @@ -33,7 +33,7 @@ log = { version = "0.4", default-features = false } tracing = { version = "0.1", default-features = false, features = ["attributes", "log"] } rust_decimal = { version = "1", default-features = false, optional = true } bigdecimal = { version = "0.3", default-features = false, optional = true } -sea-orm-macros = { version = "1.0.0-rc.1", path = "sea-orm-macros", default-features = false, features = ["strum"] } +sea-orm-macros = { version = "1.0.0-rc.2", path = "sea-orm-macros", default-features = false, features = ["strum"] } sea-query = { version = "0.31.0-rc.3", default-features = false, features = ["thread-safe", "hashable-value", "backend-mysql", "backend-postgres", "backend-sqlite"] } sea-query-binder = { version = "0.6.0-rc.1", default-features = false, optional = true } strum = { version = "0.26", default-features = false } diff --git a/sea-orm-cli/Cargo.toml b/sea-orm-cli/Cargo.toml index c307f8312..5b821f342 100644 --- a/sea-orm-cli/Cargo.toml +++ b/sea-orm-cli/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "sea-orm-cli" -version = "1.0.0-rc.1" +version = "1.0.0-rc.2" authors = [ "Chris Tsang ", "Billy Chan ", @@ -37,7 +37,7 @@ required-features = ["cli", "codegen"] clap = { version = "4.3", features = ["env", "derive"], optional = true } dotenvy = { version = "0.15", default-features = false, optional = true } async-std = { version = "1.9", default-features = false, features = ["attributes", "tokio1"], optional = true } -sea-orm-codegen = { version = "=1.0.0-rc.1", path = "../sea-orm-codegen", default-features = false, optional = true } +sea-orm-codegen = { version = "=1.0.0-rc.2", path = "../sea-orm-codegen", default-features = false, optional = true } sea-schema = { version = "0.15.0-rc.3" } sqlx = { version = "0.7", default-features = false, features = ["mysql", "postgres"], optional = true } tracing-subscriber = { version = "0.3.17", default-features = false, features = ["env-filter", "fmt"] } diff --git a/sea-orm-codegen/Cargo.toml b/sea-orm-codegen/Cargo.toml index 04e396cdd..13d9c40f7 100644 --- a/sea-orm-codegen/Cargo.toml +++ b/sea-orm-codegen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sea-orm-codegen" -version = "1.0.0-rc.1" +version = "1.0.0-rc.2" authors = ["Billy Chan "] edition = "2021" description = "Code Generator for SeaORM" diff --git a/sea-orm-macros/Cargo.toml b/sea-orm-macros/Cargo.toml index 38bc99945..9794a03f9 100644 --- a/sea-orm-macros/Cargo.toml +++ b/sea-orm-macros/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sea-orm-macros" -version = "1.0.0-rc.1" +version = "1.0.0-rc.2" authors = [ "Billy Chan " ] edition = "2021" description = "Derive macros for SeaORM" diff --git a/sea-orm-migration/Cargo.toml b/sea-orm-migration/Cargo.toml index 8f500ada7..e1e7f8a20 100644 --- a/sea-orm-migration/Cargo.toml +++ b/sea-orm-migration/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "sea-orm-migration" -version = "1.0.0-rc.1" +version = "1.0.0-rc.2" authors = ["Billy Chan "] edition = "2021" description = "Migration utility for SeaORM" @@ -23,8 +23,8 @@ path = "src/lib.rs" async-trait = { version = "0.1", default-features = false } clap = { version = "4.3", features = ["env", "derive"], optional = true } dotenvy = { version = "0.15", default-features = false, optional = true } -sea-orm = { version = "1.0.0-rc.1", path = "../", default-features = false, features = ["macros"] } -sea-orm-cli = { version = "1.0.0-rc.1", path = "../sea-orm-cli", default-features = false, optional = true } +sea-orm = { version = "1.0.0-rc.2", path = "../", default-features = false, features = ["macros"] } +sea-orm-cli = { version = "1.0.0-rc.2", path = "../sea-orm-cli", default-features = false, optional = true } sea-schema = { version = "0.15.0-rc.3" } tracing = { version = "0.1", default-features = false, features = ["log"] } tracing-subscriber = { version = "0.3.17", default-features = false, features = ["env-filter", "fmt"] } From 5c8bca02cd204f8f1eaed11b323743090527dc19 Mon Sep 17 00:00:00 2001 From: Chris Tsang Date: Fri, 15 Mar 2024 23:31:57 +0000 Subject: [PATCH 19/21] update examples --- examples/actix_example/entity/Cargo.toml | 2 +- examples/actix_example/migration/Cargo.toml | 2 +- examples/actix_example/service/Cargo.toml | 2 +- examples/axum_example/entity/Cargo.toml | 2 +- examples/axum_example/migration/Cargo.toml | 2 +- examples/axum_example/service/Cargo.toml | 2 +- examples/graphql_example/entity/Cargo.toml | 2 +- examples/graphql_example/migration/Cargo.toml | 2 +- examples/graphql_example/service/Cargo.toml | 2 +- examples/jsonrpsee_example/entity/Cargo.toml | 2 +- examples/jsonrpsee_example/migration/Cargo.toml | 2 +- examples/jsonrpsee_example/service/Cargo.toml | 2 +- examples/loco_example/Cargo.toml | 2 +- examples/loco_example/migration/Cargo.toml | 2 +- examples/poem_example/entity/Cargo.toml | 2 +- examples/poem_example/migration/Cargo.toml | 2 +- examples/poem_example/service/Cargo.toml | 2 +- examples/rocket_example/entity/Cargo.toml | 2 +- examples/rocket_example/migration/Cargo.toml | 2 +- examples/rocket_example/service/Cargo.toml | 2 +- examples/rocket_okapi_example/entity/Cargo.toml | 2 +- examples/rocket_okapi_example/migration/Cargo.toml | 2 +- examples/rocket_okapi_example/service/Cargo.toml | 2 +- examples/salvo_example/entity/Cargo.toml | 2 +- examples/salvo_example/migration/Cargo.toml | 2 +- examples/salvo_example/service/Cargo.toml | 2 +- examples/seaography_example/migration/Cargo.toml | 4 ++-- examples/tonic_example/entity/Cargo.toml | 2 +- examples/tonic_example/migration/Cargo.toml | 2 +- examples/tonic_example/service/Cargo.toml | 2 +- 30 files changed, 31 insertions(+), 31 deletions(-) diff --git a/examples/actix_example/entity/Cargo.toml b/examples/actix_example/entity/Cargo.toml index 2925db0d9..e58447f06 100644 --- a/examples/actix_example/entity/Cargo.toml +++ b/examples/actix_example/entity/Cargo.toml @@ -13,4 +13,4 @@ serde = { version = "1", features = ["derive"] } [dependencies.sea-orm] path = "../../../" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm version +version = "1.0.0-rc.2" # sea-orm version diff --git a/examples/actix_example/migration/Cargo.toml b/examples/actix_example/migration/Cargo.toml index e669711d2..8b716f3e4 100644 --- a/examples/actix_example/migration/Cargo.toml +++ b/examples/actix_example/migration/Cargo.toml @@ -13,7 +13,7 @@ async-std = { version = "1", features = ["attributes", "tokio1"] } [dependencies.sea-orm-migration] path = "../../../sea-orm-migration" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm-migration version +version = "1.0.0-rc.2" # sea-orm-migration version features = [ # Enable following runtime and db backend features if you want to run migration via CLI # "runtime-actix-native-tls", diff --git a/examples/actix_example/service/Cargo.toml b/examples/actix_example/service/Cargo.toml index ecc49d5f6..bbb1e3f52 100644 --- a/examples/actix_example/service/Cargo.toml +++ b/examples/actix_example/service/Cargo.toml @@ -10,7 +10,7 @@ entity = { path = "../entity" } [dependencies.sea-orm] path = "../../../" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm version +version = "1.0.0-rc.2" # sea-orm version features = [ "debug-print", "runtime-async-std-native-tls", diff --git a/examples/axum_example/entity/Cargo.toml b/examples/axum_example/entity/Cargo.toml index 2925db0d9..e58447f06 100644 --- a/examples/axum_example/entity/Cargo.toml +++ b/examples/axum_example/entity/Cargo.toml @@ -13,4 +13,4 @@ serde = { version = "1", features = ["derive"] } [dependencies.sea-orm] path = "../../../" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm version +version = "1.0.0-rc.2" # sea-orm version diff --git a/examples/axum_example/migration/Cargo.toml b/examples/axum_example/migration/Cargo.toml index 1db307820..53456aeb0 100644 --- a/examples/axum_example/migration/Cargo.toml +++ b/examples/axum_example/migration/Cargo.toml @@ -13,7 +13,7 @@ async-std = { version = "1", features = ["attributes", "tokio1"] } [dependencies.sea-orm-migration] path = "../../../sea-orm-migration" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm-migration version +version = "1.0.0-rc.2" # sea-orm-migration version features = [ # Enable following runtime and db backend features if you want to run migration via CLI # "runtime-tokio-native-tls", diff --git a/examples/axum_example/service/Cargo.toml b/examples/axum_example/service/Cargo.toml index f48763408..725f6fd57 100644 --- a/examples/axum_example/service/Cargo.toml +++ b/examples/axum_example/service/Cargo.toml @@ -10,7 +10,7 @@ entity = { path = "../entity" } [dependencies.sea-orm] path = "../../../" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm version +version = "1.0.0-rc.2" # sea-orm version features = [ "debug-print", "runtime-tokio-native-tls", diff --git a/examples/graphql_example/entity/Cargo.toml b/examples/graphql_example/entity/Cargo.toml index 0eebe6842..ce2bf7f51 100644 --- a/examples/graphql_example/entity/Cargo.toml +++ b/examples/graphql_example/entity/Cargo.toml @@ -16,4 +16,4 @@ version = "5.0.10" [dependencies.sea-orm] path = "../../../" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm version +version = "1.0.0-rc.2" # sea-orm version diff --git a/examples/graphql_example/migration/Cargo.toml b/examples/graphql_example/migration/Cargo.toml index 7b0a39885..315db3350 100644 --- a/examples/graphql_example/migration/Cargo.toml +++ b/examples/graphql_example/migration/Cargo.toml @@ -14,7 +14,7 @@ async-std = { version = "1", features = ["attributes", "tokio1"] } [dependencies.sea-orm-migration] path = "../../../sea-orm-migration" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm-migration version +version = "1.0.0-rc.2" # sea-orm-migration version features = [ # Enable following runtime and db backend features if you want to run migration via CLI # "runtime-tokio-native-tls", diff --git a/examples/graphql_example/service/Cargo.toml b/examples/graphql_example/service/Cargo.toml index 5dfe4f2ab..9adc588ec 100644 --- a/examples/graphql_example/service/Cargo.toml +++ b/examples/graphql_example/service/Cargo.toml @@ -10,7 +10,7 @@ entity = { path = "../entity" } [dependencies.sea-orm] path = "../../../" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm version +version = "1.0.0-rc.2" # sea-orm version features = [ "debug-print", "runtime-async-std-native-tls", diff --git a/examples/jsonrpsee_example/entity/Cargo.toml b/examples/jsonrpsee_example/entity/Cargo.toml index 2925db0d9..e58447f06 100644 --- a/examples/jsonrpsee_example/entity/Cargo.toml +++ b/examples/jsonrpsee_example/entity/Cargo.toml @@ -13,4 +13,4 @@ serde = { version = "1", features = ["derive"] } [dependencies.sea-orm] path = "../../../" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm version +version = "1.0.0-rc.2" # sea-orm version diff --git a/examples/jsonrpsee_example/migration/Cargo.toml b/examples/jsonrpsee_example/migration/Cargo.toml index 3a7a0c5c1..8296a9f3b 100644 --- a/examples/jsonrpsee_example/migration/Cargo.toml +++ b/examples/jsonrpsee_example/migration/Cargo.toml @@ -13,7 +13,7 @@ async-std = { version = "1", features = ["attributes", "tokio1"] } [dependencies.sea-orm-migration] path = "../../../sea-orm-migration" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm-migration version +version = "1.0.0-rc.2" # sea-orm-migration version features = [ # Enable following runtime and db backend features if you want to run migration via CLI # "runtime-tokio-native-tls", diff --git a/examples/jsonrpsee_example/service/Cargo.toml b/examples/jsonrpsee_example/service/Cargo.toml index dee8b24c7..d84289844 100644 --- a/examples/jsonrpsee_example/service/Cargo.toml +++ b/examples/jsonrpsee_example/service/Cargo.toml @@ -10,7 +10,7 @@ entity = { path = "../entity" } [dependencies.sea-orm] path = "../../../" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm version +version = "1.0.0-rc.2" # sea-orm version features = [ "debug-print", "runtime-tokio-native-tls", diff --git a/examples/loco_example/Cargo.toml b/examples/loco_example/Cargo.toml index 36e75b301..db3b9d6ac 100644 --- a/examples/loco_example/Cargo.toml +++ b/examples/loco_example/Cargo.toml @@ -27,7 +27,7 @@ tracing-subscriber = { version = "0.3.17", features = ["env-filter", "json"] } [dependencies.sea-orm] # path = "../../" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm version +version = "1.0.0-rc.2" # sea-orm version features = [ "sqlx-sqlite", "sqlx-postgres", diff --git a/examples/loco_example/migration/Cargo.toml b/examples/loco_example/migration/Cargo.toml index 47e4ab55a..b5e3ebc89 100644 --- a/examples/loco_example/migration/Cargo.toml +++ b/examples/loco_example/migration/Cargo.toml @@ -14,7 +14,7 @@ loco-rs = { version = "0.2" } [dependencies.sea-orm-migration] # path = "../../../sea-orm-migration" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm-migration version +version = "1.0.0-rc.2" # sea-orm-migration version features = [ # Enable at least one `ASYNC_RUNTIME` and `DATABASE_DRIVER` feature if you want to run migration via CLI. # View the list of supported features at https://www.sea-ql.org/SeaORM/docs/install-and-config/database-and-async-runtime. diff --git a/examples/poem_example/entity/Cargo.toml b/examples/poem_example/entity/Cargo.toml index 2925db0d9..e58447f06 100644 --- a/examples/poem_example/entity/Cargo.toml +++ b/examples/poem_example/entity/Cargo.toml @@ -13,4 +13,4 @@ serde = { version = "1", features = ["derive"] } [dependencies.sea-orm] path = "../../../" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm version +version = "1.0.0-rc.2" # sea-orm version diff --git a/examples/poem_example/migration/Cargo.toml b/examples/poem_example/migration/Cargo.toml index 3a7a0c5c1..8296a9f3b 100644 --- a/examples/poem_example/migration/Cargo.toml +++ b/examples/poem_example/migration/Cargo.toml @@ -13,7 +13,7 @@ async-std = { version = "1", features = ["attributes", "tokio1"] } [dependencies.sea-orm-migration] path = "../../../sea-orm-migration" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm-migration version +version = "1.0.0-rc.2" # sea-orm-migration version features = [ # Enable following runtime and db backend features if you want to run migration via CLI # "runtime-tokio-native-tls", diff --git a/examples/poem_example/service/Cargo.toml b/examples/poem_example/service/Cargo.toml index 3d50aacd5..c48e440ff 100644 --- a/examples/poem_example/service/Cargo.toml +++ b/examples/poem_example/service/Cargo.toml @@ -10,7 +10,7 @@ entity = { path = "../entity" } [dependencies.sea-orm] path = "../../../" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm version +version = "1.0.0-rc.2" # sea-orm version features = [ "debug-print", "runtime-async-std-native-tls", diff --git a/examples/rocket_example/entity/Cargo.toml b/examples/rocket_example/entity/Cargo.toml index 6660bae77..eb51b7961 100644 --- a/examples/rocket_example/entity/Cargo.toml +++ b/examples/rocket_example/entity/Cargo.toml @@ -13,4 +13,4 @@ rocket = { version = "0.5.0", features = ["json"] } [dependencies.sea-orm] path = "../../../" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm version +version = "1.0.0-rc.2" # sea-orm version diff --git a/examples/rocket_example/migration/Cargo.toml b/examples/rocket_example/migration/Cargo.toml index 6e7671eb8..6cb696431 100644 --- a/examples/rocket_example/migration/Cargo.toml +++ b/examples/rocket_example/migration/Cargo.toml @@ -14,7 +14,7 @@ async-std = { version = "1", features = ["attributes", "tokio1"] } [dependencies.sea-orm-migration] path = "../../../sea-orm-migration" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm-migration version +version = "1.0.0-rc.2" # sea-orm-migration version features = [ # Enable following runtime and db backend features if you want to run migration via CLI # "runtime-tokio-native-tls", diff --git a/examples/rocket_example/service/Cargo.toml b/examples/rocket_example/service/Cargo.toml index 3d22080a0..e0cc81875 100644 --- a/examples/rocket_example/service/Cargo.toml +++ b/examples/rocket_example/service/Cargo.toml @@ -10,7 +10,7 @@ entity = { path = "../entity" } [dependencies.sea-orm] path = "../../../" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm version +version = "1.0.0-rc.2" # sea-orm version features = [ "runtime-tokio-native-tls", "sqlx-postgres", diff --git a/examples/rocket_okapi_example/entity/Cargo.toml b/examples/rocket_okapi_example/entity/Cargo.toml index 7f878f9c1..e64c1efb1 100644 --- a/examples/rocket_okapi_example/entity/Cargo.toml +++ b/examples/rocket_okapi_example/entity/Cargo.toml @@ -13,7 +13,7 @@ rocket = { version = "0.5.0", features = ["json"] } [dependencies.sea-orm] path = "../../../" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm version +version = "1.0.0-rc.2" # sea-orm version [dependencies.rocket_okapi] version = "0.8.0" diff --git a/examples/rocket_okapi_example/migration/Cargo.toml b/examples/rocket_okapi_example/migration/Cargo.toml index 6e7671eb8..6cb696431 100644 --- a/examples/rocket_okapi_example/migration/Cargo.toml +++ b/examples/rocket_okapi_example/migration/Cargo.toml @@ -14,7 +14,7 @@ async-std = { version = "1", features = ["attributes", "tokio1"] } [dependencies.sea-orm-migration] path = "../../../sea-orm-migration" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm-migration version +version = "1.0.0-rc.2" # sea-orm-migration version features = [ # Enable following runtime and db backend features if you want to run migration via CLI # "runtime-tokio-native-tls", diff --git a/examples/rocket_okapi_example/service/Cargo.toml b/examples/rocket_okapi_example/service/Cargo.toml index 0915684d7..4e2b76c12 100644 --- a/examples/rocket_okapi_example/service/Cargo.toml +++ b/examples/rocket_okapi_example/service/Cargo.toml @@ -10,7 +10,7 @@ entity = { path = "../entity" } [dependencies.sea-orm] path = "../../../" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm version +version = "1.0.0-rc.2" # sea-orm version features = [ "runtime-tokio-native-tls", # "sqlx-postgres", diff --git a/examples/salvo_example/entity/Cargo.toml b/examples/salvo_example/entity/Cargo.toml index ae62984e6..4979a138f 100644 --- a/examples/salvo_example/entity/Cargo.toml +++ b/examples/salvo_example/entity/Cargo.toml @@ -14,4 +14,4 @@ salvo = { version = "0.50" } [dependencies.sea-orm] path = "../../../" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm version +version = "1.0.0-rc.2" # sea-orm version diff --git a/examples/salvo_example/migration/Cargo.toml b/examples/salvo_example/migration/Cargo.toml index 3a7a0c5c1..8296a9f3b 100644 --- a/examples/salvo_example/migration/Cargo.toml +++ b/examples/salvo_example/migration/Cargo.toml @@ -13,7 +13,7 @@ async-std = { version = "1", features = ["attributes", "tokio1"] } [dependencies.sea-orm-migration] path = "../../../sea-orm-migration" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm-migration version +version = "1.0.0-rc.2" # sea-orm-migration version features = [ # Enable following runtime and db backend features if you want to run migration via CLI # "runtime-tokio-native-tls", diff --git a/examples/salvo_example/service/Cargo.toml b/examples/salvo_example/service/Cargo.toml index a8f99d1c2..5448d0b64 100644 --- a/examples/salvo_example/service/Cargo.toml +++ b/examples/salvo_example/service/Cargo.toml @@ -10,7 +10,7 @@ entity = { path = "../entity" } [dependencies.sea-orm] path = "../../../" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm version +version = "1.0.0-rc.2" # sea-orm version features = [ "debug-print", "runtime-tokio-native-tls", diff --git a/examples/seaography_example/migration/Cargo.toml b/examples/seaography_example/migration/Cargo.toml index 431628866..7dd0082ff 100644 --- a/examples/seaography_example/migration/Cargo.toml +++ b/examples/seaography_example/migration/Cargo.toml @@ -15,11 +15,11 @@ async-std = { version = "1", features = ["attributes", "tokio1"] } [dependencies.sea-orm] path = "../../.." # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm version +version = "1.0.0-rc.2" # sea-orm version [dependencies.sea-orm-migration] path = "../../../sea-orm-migration" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm-migration version +version = "1.0.0-rc.2" # sea-orm-migration version features = [ "runtime-async-std-native-tls", "sqlx-mysql", diff --git a/examples/tonic_example/entity/Cargo.toml b/examples/tonic_example/entity/Cargo.toml index 2925db0d9..e58447f06 100644 --- a/examples/tonic_example/entity/Cargo.toml +++ b/examples/tonic_example/entity/Cargo.toml @@ -13,4 +13,4 @@ serde = { version = "1", features = ["derive"] } [dependencies.sea-orm] path = "../../../" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm version +version = "1.0.0-rc.2" # sea-orm version diff --git a/examples/tonic_example/migration/Cargo.toml b/examples/tonic_example/migration/Cargo.toml index 472b0a3b3..e177c809d 100644 --- a/examples/tonic_example/migration/Cargo.toml +++ b/examples/tonic_example/migration/Cargo.toml @@ -13,7 +13,7 @@ async-std = { version = "1", features = ["attributes", "tokio1"] } [dependencies.sea-orm-migration] path = "../../../sea-orm-migration" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm-migration version +version = "1.0.0-rc.2" # sea-orm-migration version features = [ # Enable following runtime and db backend features if you want to run migration via CLI # "runtime-tokio-rustls", diff --git a/examples/tonic_example/service/Cargo.toml b/examples/tonic_example/service/Cargo.toml index d3633a604..63849d851 100644 --- a/examples/tonic_example/service/Cargo.toml +++ b/examples/tonic_example/service/Cargo.toml @@ -10,7 +10,7 @@ entity = { path = "../entity" } [dependencies.sea-orm] path = "../../../" # remove this line in your own project -version = "1.0.0-rc.1" # sea-orm version +version = "1.0.0-rc.2" # sea-orm version features = [ "debug-print", "runtime-tokio-rustls", From a321f0a566eade8bbfe9a105db1f6f974b662de2 Mon Sep 17 00:00:00 2001 From: Billy Chan Date: Tue, 19 Mar 2024 16:57:46 +0800 Subject: [PATCH 20/21] Upstream Changes - 3 (#2155) * Upstream Changes - 3 * refactor * revert --- sea-orm-cli/Cargo.toml | 2 +- sea-orm-cli/src/cli.rs | 3 +- sea-orm-cli/src/commands/generate.rs | 16 ++++++--- sea-orm-migration/Cargo.toml | 2 +- sea-orm-migration/src/manager.rs | 53 ++++++++++++++++++++-------- sea-orm-migration/src/migrator.rs | 9 ++--- 6 files changed, 58 insertions(+), 27 deletions(-) diff --git a/sea-orm-cli/Cargo.toml b/sea-orm-cli/Cargo.toml index 5b821f342..0cbac34ba 100644 --- a/sea-orm-cli/Cargo.toml +++ b/sea-orm-cli/Cargo.toml @@ -38,7 +38,7 @@ clap = { version = "4.3", features = ["env", "derive"], optional = true } dotenvy = { version = "0.15", default-features = false, optional = true } async-std = { version = "1.9", default-features = false, features = ["attributes", "tokio1"], optional = true } sea-orm-codegen = { version = "=1.0.0-rc.2", path = "../sea-orm-codegen", default-features = false, optional = true } -sea-schema = { version = "0.15.0-rc.3" } +sea-schema = { version = "0.15.0-rc.3", git = "https://github.com/SeaQL/sea-schema", branch = "upstream-changes-2" } sqlx = { version = "0.7", default-features = false, features = ["mysql", "postgres"], optional = true } tracing-subscriber = { version = "0.3.17", default-features = false, features = ["env-filter", "fmt"] } tracing = { version = "0.1", default-features = false } diff --git a/sea-orm-cli/src/cli.rs b/sea-orm-cli/src/cli.rs index 3bc9ae9c6..4c771da00 100644 --- a/sea-orm-cli/src/cli.rs +++ b/sea-orm-cli/src/cli.rs @@ -214,12 +214,11 @@ pub enum GenerateSubcommands { short = 's', long, env = "DATABASE_SCHEMA", - default_value = "public", long_help = "Database schema\n \ - For MySQL, this argument is ignored.\n \ - For PostgreSQL, this argument is optional with default value 'public'." )] - database_schema: String, + database_schema: Option, #[arg(short = 'u', long, env = "DATABASE_URL", help = "Database URL")] database_url: String, diff --git a/sea-orm-cli/src/commands/generate.rs b/sea-orm-cli/src/commands/generate.rs index 613a541fb..37415bd96 100644 --- a/sea-orm-cli/src/commands/generate.rs +++ b/sea-orm-cli/src/commands/generate.rs @@ -113,7 +113,8 @@ pub async fn run_generate_command( use sqlx::MySql; println!("Connecting to MySQL ..."); - let connection = connect::(max_connections, url.as_str(), None).await?; + let connection = + sqlx_connect::(max_connections, url.as_str(), None).await?; println!("Discovering schema ..."); let schema_discovery = SchemaDiscovery::new(connection, database_name); let schema = schema_discovery.discover().await?; @@ -132,7 +133,8 @@ pub async fn run_generate_command( use sqlx::Sqlite; println!("Connecting to SQLite ..."); - let connection = connect::(max_connections, url.as_str(), None).await?; + let connection = + sqlx_connect::(max_connections, url.as_str(), None).await?; println!("Discovering schema ..."); let schema_discovery = SchemaDiscovery::new(connection); let schema = schema_discovery.discover().await?; @@ -151,9 +153,13 @@ pub async fn run_generate_command( use sqlx::Postgres; println!("Connecting to Postgres ..."); - let schema = &database_schema; + let schema = database_schema + .as_ref() + .map(|s| s.as_str()) + .unwrap_or("public"); let connection = - connect::(max_connections, url.as_str(), Some(schema)).await?; + sqlx_connect::(max_connections, url.as_str(), Some(schema)) + .await?; println!("Discovering schema ..."); let schema_discovery = SchemaDiscovery::new(connection, schema); let schema = schema_discovery.discover().await?; @@ -214,7 +220,7 @@ pub async fn run_generate_command( Ok(()) } -async fn connect( +async fn sqlx_connect( max_connections: u32, url: &str, schema: Option<&str>, diff --git a/sea-orm-migration/Cargo.toml b/sea-orm-migration/Cargo.toml index e1e7f8a20..f7a84efd2 100644 --- a/sea-orm-migration/Cargo.toml +++ b/sea-orm-migration/Cargo.toml @@ -25,7 +25,7 @@ clap = { version = "4.3", features = ["env", "derive"], optional = true } dotenvy = { version = "0.15", default-features = false, optional = true } sea-orm = { version = "1.0.0-rc.2", path = "../", default-features = false, features = ["macros"] } sea-orm-cli = { version = "1.0.0-rc.2", path = "../sea-orm-cli", default-features = false, optional = true } -sea-schema = { version = "0.15.0-rc.3" } +sea-schema = { version = "0.15.0-rc.3", git = "https://github.com/SeaQL/sea-schema", branch = "upstream-changes-2" } tracing = { version = "0.1", default-features = false, features = ["log"] } tracing-subscriber = { version = "0.3.17", default-features = false, features = ["env-filter", "fmt"] } futures = { version = "0.3", default-features = false, features = ["std"] } diff --git a/sea-orm-migration/src/manager.rs b/sea-orm-migration/src/manager.rs index 06bfe2c5d..9118ccdde 100644 --- a/sea-orm-migration/src/manager.rs +++ b/sea-orm-migration/src/manager.rs @@ -11,6 +11,7 @@ use sea_schema::{mysql::MySql, postgres::Postgres, probe::SchemaProbe, sqlite::S /// Helper struct for writing migration scripts in migration file pub struct SchemaManager<'c> { conn: SchemaManagerConnection<'c>, + schema: Option, } impl<'c> SchemaManager<'c> { @@ -20,6 +21,7 @@ impl<'c> SchemaManager<'c> { { Self { conn: conn.into_schema_manager_connection(), + schema: None, } } @@ -38,6 +40,18 @@ impl<'c> SchemaManager<'c> { pub fn get_connection(&self) -> &SchemaManagerConnection<'c> { &self.conn } + + pub fn set_schema(&mut self, schema: T) -> &mut Self + where + T: Into, + { + self.schema = Some(schema.into()); + self + } + + pub fn get_schema(&self) -> &Option { + &self.schema + } } /// Schema Creation @@ -100,20 +114,7 @@ impl<'c> SchemaManager<'c> { where T: AsRef, { - let stmt = match self.conn.get_database_backend() { - DbBackend::MySql => MySql.has_table(table), - DbBackend::Postgres => Postgres.has_table(table), - DbBackend::Sqlite => Sqlite.has_table(table), - }; - - let builder = self.conn.get_database_backend(); - let res = self - .conn - .query_one(builder.build(&stmt)) - .await? - .ok_or_else(|| DbErr::Custom("Failed to check table exists".to_owned()))?; - - res.try_get("", "has_table") + has_table(&self.conn, self.schema.as_deref(), table).await } pub async fn has_column(&self, table: T, column: C) -> Result @@ -158,3 +159,27 @@ impl<'c> SchemaManager<'c> { res.try_get("", "has_index") } } + +pub(crate) async fn has_table( + conn: &C, + _schema: Option<&str>, + table: T, +) -> Result +where + C: ConnectionTrait, + T: AsRef, +{ + let stmt = match conn.get_database_backend() { + DbBackend::MySql => MySql.has_table(table), + DbBackend::Postgres => Postgres.has_table(table), + DbBackend::Sqlite => Sqlite.has_table(table), + }; + + let builder = conn.get_database_backend(); + let res = conn + .query_one(builder.build(&stmt)) + .await? + .ok_or_else(|| DbErr::Custom("Failed to check table exists".to_owned()))?; + + res.try_get("", "has_table") +} diff --git a/sea-orm-migration/src/migrator.rs b/sea-orm-migration/src/migrator.rs index 587951ed1..d58802884 100644 --- a/sea-orm-migration/src/migrator.rs +++ b/sea-orm-migration/src/migrator.rs @@ -164,10 +164,11 @@ pub trait MigratorTrait: Send { C: ConnectionTrait, { let builder = db.get_database_backend(); + let table_name = Self::migration_table_name(); let schema = Schema::new(builder); let mut stmt = schema .create_table_from_entity(seaql_migrations::Entity) - .table_name(Self::migration_table_name()); + .table_name(table_name); stmt.if_not_exists(); db.execute(builder.build(&stmt)).await.map(|_| ()) } @@ -441,9 +442,9 @@ where C: ConnectionTrait, { match db.get_database_backend() { - DbBackend::MySql => MySql::query_tables(), - DbBackend::Postgres => Postgres::query_tables(), - DbBackend::Sqlite => Sqlite::query_tables(), + DbBackend::MySql => MySql.query_tables(), + DbBackend::Postgres => Postgres.query_tables(), + DbBackend::Sqlite => Sqlite.query_tables(), } } From af7b422b9bc7cb3db05dbd4cc21f6801fa38b1d4 Mon Sep 17 00:00:00 2001 From: ForzenString <964413011@qq.com> Date: Wed, 20 Mar 2024 00:30:48 +0800 Subject: [PATCH 21/21] :art: cargo fmt --- .../duplicated_many_to_many_paths/bills.rs | 4 ++-- .../users_saved_bills.rs | 4 ++-- .../duplicated_many_to_many_paths/users_votes.rs | 4 ++-- .../src/tests_cfg/many_to_many/bills.rs | 4 ++-- .../src/tests_cfg/many_to_many/users_votes.rs | 4 ++-- .../src/tests_cfg/many_to_many_multiple/bills.rs | 4 ++-- .../many_to_many_multiple/users_votes.rs | 12 ++++++------ .../src/tests_cfg/self_referencing/bills.rs | 8 ++------ .../src/tests_cfg/self_referencing/users.rs | 16 ++++------------ sea-orm-macros/src/derives/partial_model.rs | 1 - 10 files changed, 24 insertions(+), 37 deletions(-) diff --git a/sea-orm-codegen/src/tests_cfg/duplicated_many_to_many_paths/bills.rs b/sea-orm-codegen/src/tests_cfg/duplicated_many_to_many_paths/bills.rs index a3a6911b9..baf33426e 100644 --- a/sea-orm-codegen/src/tests_cfg/duplicated_many_to_many_paths/bills.rs +++ b/sea-orm-codegen/src/tests_cfg/duplicated_many_to_many_paths/bills.rs @@ -5,7 +5,7 @@ use sea_orm::entity::prelude::*; pub struct Model { #[sea_orm(primary_key)] pub id: i32, - pub user_id: Option , + pub user_id: Option, } #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] @@ -15,7 +15,7 @@ pub enum Relation { from = "Column::UserId", to = "super::users::Column::Id", on_update = "NoAction", - on_delete = "NoAction", + on_delete = "NoAction" )] Users, #[sea_orm(has_many = "super::users_saved_bills::Entity")] diff --git a/sea-orm-codegen/src/tests_cfg/duplicated_many_to_many_paths/users_saved_bills.rs b/sea-orm-codegen/src/tests_cfg/duplicated_many_to_many_paths/users_saved_bills.rs index 4ef0281cd..575bac58f 100644 --- a/sea-orm-codegen/src/tests_cfg/duplicated_many_to_many_paths/users_saved_bills.rs +++ b/sea-orm-codegen/src/tests_cfg/duplicated_many_to_many_paths/users_saved_bills.rs @@ -16,7 +16,7 @@ pub enum Relation { from = "Column::BillId", to = "super::bills::Column::Id", on_update = "Cascade", - on_delete = "Cascade", + on_delete = "Cascade" )] Bills, #[sea_orm( @@ -24,7 +24,7 @@ pub enum Relation { from = "Column::UserId", to = "super::users::Column::Id", on_update = "Cascade", - on_delete = "Cascade", + on_delete = "Cascade" )] Users, } diff --git a/sea-orm-codegen/src/tests_cfg/duplicated_many_to_many_paths/users_votes.rs b/sea-orm-codegen/src/tests_cfg/duplicated_many_to_many_paths/users_votes.rs index a04ad7fa7..62f9cf7d0 100644 --- a/sea-orm-codegen/src/tests_cfg/duplicated_many_to_many_paths/users_votes.rs +++ b/sea-orm-codegen/src/tests_cfg/duplicated_many_to_many_paths/users_votes.rs @@ -17,7 +17,7 @@ pub enum Relation { from = "Column::BillId", to = "super::bills::Column::Id", on_update = "Cascade", - on_delete = "Cascade", + on_delete = "Cascade" )] Bills, #[sea_orm( @@ -25,7 +25,7 @@ pub enum Relation { from = "Column::UserId", to = "super::users::Column::Id", on_update = "Cascade", - on_delete = "Cascade", + on_delete = "Cascade" )] Users, } diff --git a/sea-orm-codegen/src/tests_cfg/many_to_many/bills.rs b/sea-orm-codegen/src/tests_cfg/many_to_many/bills.rs index 5a3acef9c..f2de469f0 100644 --- a/sea-orm-codegen/src/tests_cfg/many_to_many/bills.rs +++ b/sea-orm-codegen/src/tests_cfg/many_to_many/bills.rs @@ -5,7 +5,7 @@ use sea_orm::entity::prelude::*; pub struct Model { #[sea_orm(primary_key)] pub id: i32, - pub user_id: Option , + pub user_id: Option, } #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] @@ -15,7 +15,7 @@ pub enum Relation { from = "Column::UserId", to = "super::users::Column::Id", on_update = "NoAction", - on_delete = "NoAction", + on_delete = "NoAction" )] Users, #[sea_orm(has_many = "super::users_votes::Entity")] diff --git a/sea-orm-codegen/src/tests_cfg/many_to_many/users_votes.rs b/sea-orm-codegen/src/tests_cfg/many_to_many/users_votes.rs index a04ad7fa7..62f9cf7d0 100644 --- a/sea-orm-codegen/src/tests_cfg/many_to_many/users_votes.rs +++ b/sea-orm-codegen/src/tests_cfg/many_to_many/users_votes.rs @@ -17,7 +17,7 @@ pub enum Relation { from = "Column::BillId", to = "super::bills::Column::Id", on_update = "Cascade", - on_delete = "Cascade", + on_delete = "Cascade" )] Bills, #[sea_orm( @@ -25,7 +25,7 @@ pub enum Relation { from = "Column::UserId", to = "super::users::Column::Id", on_update = "Cascade", - on_delete = "Cascade", + on_delete = "Cascade" )] Users, } diff --git a/sea-orm-codegen/src/tests_cfg/many_to_many_multiple/bills.rs b/sea-orm-codegen/src/tests_cfg/many_to_many_multiple/bills.rs index 5094e5885..6874aeed0 100644 --- a/sea-orm-codegen/src/tests_cfg/many_to_many_multiple/bills.rs +++ b/sea-orm-codegen/src/tests_cfg/many_to_many_multiple/bills.rs @@ -5,7 +5,7 @@ use sea_orm::entity::prelude::*; pub struct Model { #[sea_orm(primary_key)] pub id: i32, - pub user_id: Option , + pub user_id: Option, } #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] @@ -15,7 +15,7 @@ pub enum Relation { from = "Column::UserId", to = "super::users::Column::Id", on_update = "NoAction", - on_delete = "NoAction", + on_delete = "NoAction" )] Users, } diff --git a/sea-orm-codegen/src/tests_cfg/many_to_many_multiple/users_votes.rs b/sea-orm-codegen/src/tests_cfg/many_to_many_multiple/users_votes.rs index 87187f4c0..29fb173cb 100644 --- a/sea-orm-codegen/src/tests_cfg/many_to_many_multiple/users_votes.rs +++ b/sea-orm-codegen/src/tests_cfg/many_to_many_multiple/users_votes.rs @@ -7,8 +7,8 @@ pub struct Model { pub user_id: i32, #[sea_orm(primary_key, auto_increment = false)] pub bill_id: i32, - pub user_idd: Option , - pub bill_idd: Option , + pub user_idd: Option, + pub bill_idd: Option, pub vote: bool, } @@ -17,25 +17,25 @@ pub enum Relation { #[sea_orm( belongs_to = "super::bills::Entity", from = "Column::BillIdd", - to = "super::bills::Column::Id", + to = "super::bills::Column::Id" )] Bills2, #[sea_orm( belongs_to = "super::bills::Entity", from = "Column::BillId", - to = "super::bills::Column::Id", + to = "super::bills::Column::Id" )] Bills1, #[sea_orm( belongs_to = "super::users::Entity", from = "Column::UserIdd", - to = "super::users::Column::Id", + to = "super::users::Column::Id" )] Users2, #[sea_orm( belongs_to = "super::users::Entity", from = "Column::UserId", - to = "super::users::Column::Id", + to = "super::users::Column::Id" )] Users1, } diff --git a/sea-orm-codegen/src/tests_cfg/self_referencing/bills.rs b/sea-orm-codegen/src/tests_cfg/self_referencing/bills.rs index 583655f67..22cfc4690 100644 --- a/sea-orm-codegen/src/tests_cfg/self_referencing/bills.rs +++ b/sea-orm-codegen/src/tests_cfg/self_referencing/bills.rs @@ -5,16 +5,12 @@ use sea_orm::entity::prelude::*; pub struct Model { #[sea_orm(primary_key)] pub id: i32, - pub self_id: Option , + pub self_id: Option, } #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] pub enum Relation { - #[sea_orm( - belongs_to = "Entity", - from = "Column::SelfId", - to = "Column::Id", - )] + #[sea_orm(belongs_to = "Entity", from = "Column::SelfId", to = "Column::Id")] SelfRef, } diff --git a/sea-orm-codegen/src/tests_cfg/self_referencing/users.rs b/sea-orm-codegen/src/tests_cfg/self_referencing/users.rs index b54f3e5e2..487ba9409 100644 --- a/sea-orm-codegen/src/tests_cfg/self_referencing/users.rs +++ b/sea-orm-codegen/src/tests_cfg/self_referencing/users.rs @@ -5,23 +5,15 @@ use sea_orm::entity::prelude::*; pub struct Model { #[sea_orm(primary_key)] pub id: i32, - pub self_id: Option , - pub self_idd: Option , + pub self_id: Option, + pub self_idd: Option, } #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] pub enum Relation { - #[sea_orm( - belongs_to = "Entity", - from = "Column::SelfId", - to = "Column::Id", - )] + #[sea_orm(belongs_to = "Entity", from = "Column::SelfId", to = "Column::Id")] SelfRef2, - #[sea_orm( - belongs_to = "Entity", - from = "Column::SelfIdd", - to = "Column::Id", - )] + #[sea_orm(belongs_to = "Entity", from = "Column::SelfIdd", to = "Column::Id")] SelfRef1, } diff --git a/sea-orm-macros/src/derives/partial_model.rs b/sea-orm-macros/src/derives/partial_model.rs index c9bc6ce80..ae743b126 100644 --- a/sea-orm-macros/src/derives/partial_model.rs +++ b/sea-orm-macros/src/derives/partial_model.rs @@ -106,7 +106,6 @@ impl DerivePartialModel { let field_name = field.ident.unwrap(); - let col_as = match (from_col, from_expr, flatten) { (None, None, false) => { if entity.is_none() {

f`IjS5bp%b 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≤Ll&n1e+!hBwAR%~)c_lGarg!Me++x?f>Y;W3G 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 WNFiK%&yRxmOWERYZhuC)i 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�!}%IfN#f zrgyoOW&*{@9YF=tq|%6+qVnc?*%NUfh>zdAJXmk(@-U*Wx8Y!_*^KpD@gi(^{|ZO+ z20C9WJc=kNNQwN2wKy)Uc|6?UhRbx1&q?}xs6^^uL2v;_=P;6Va>x{V(nG?0^T{4{ zX-01vV`!|^p$#ta{dDa{cHs^59w0P`>{rzB$IJjqLzFw#FqMp=&ubox7EHbKwEbyw z0aBPbZl6FHtd?|6zzxmZEz_tUz{f@CSXdT7i|>?XTp zfS6c3)03K}3aAel8n(cYBKyAEU-d8ACIdsMKA6B z)3MI7r-!nT_-&Lq*O^b8!{vw~|6Pc?W4HUhM=>3gKVqcH7{X`dz(_lpIB(Y=u2uCt zGLDIgQ*tHHZrciy(=T(uyg&5~ino@y4|wZ8W7x>}H(3IVArkXovr_S-j#gycr}#Ri zOv8K8sGc1{06as?6<2Yzfzy@oO4P*ZCS0V_hHSoAppg0+PKdO_NqG(P0D4=jRwfAi z@`mAa)L8r18E`9kQ8xeey!HBhje22nJgGztONv`-u2}Z=*s~ya*Yw@dMb6ZV7o|Z} zZ!}&W>%(N2sv@AT&l}g2i_X5rlaG7&k8fQPgV(Atrcp&^`jtYrh`oy$O!1-3+f4~oI(Alz_QnyNC!w38EJSK*t2 zv1ahWa=qV4=>GPm%BI-uPuN-I0P(r+&FsJIzT^Spr3~S}N_{7TOwHcD_inTuVq$gf z&7AGUZ5-gCueltP6qe~cW4&S|?Vs20$SRJhb6uIfOyaX6S(r$qZ5*ebQS)g&={=zl z?J|wN5!YV{P5~jQ+qRki{O3*(^6%HzWATCji=%KTAo{)_&~foK?=u93@9U0WyfhfQ z>21)`FigLYB=7%DmoBY4>*oZJ!u1!1w3F3Ct^MJtDPu7^I z4#+^Re7&ftUB2d*7jk3G_wB^>L(i_~@GrHss*8P(=Q|X_?^*;U&-9HE6Vwd-KG2uF zXj&#A*v_67o+VS0_ciCZ(cfi^Msaia=eI?diMcw!+0c9?MCYRSJRTfh`Sm)QR`{m1B6~fFC<5OX&U+q+S>GrqWRnqQCN%iw0f%&3CIhrh;-M`u(yZ#626?`sn13dG2XLv%^ShZv#h-W9Eo1)eYLawrTb_ z^^2H2{(7{Y48i<#2mM9N9;CFjYypyecHsP=h;Fmy6459zjva%X7{tx81%H&AEJvvnQ3a)J*c9N22_^yspX2XQAK zAvHOF%mna;0){E>N-AvP&Gq?HMi@XhJ84N*HbRhBE~|Rj?TghB1hw3KBE>jNRe4X- z%jM|nfz1tVYkg72O%ABHUzz)As{QInO$f%pXHI_`56h^x=0zh^ZNNdSS>6#|tFQq| zpkc?J)V_~wZ&^UEQO&0qbTjx&HEX%sx-6Le0(wGKrgZjYI!a0J^0R^WO(A@Pfyu6a zWm^`k*CN1{$*CIw8xu)2ni26DOM7J5_3*60tS17=w$v_E6Vpq2a|B zP#i!2sj*Xr2CAVkf82Us*Z^_{p<2#U_$1g8N!F9r!l!g(gXY^^a{w^efK2%l>_dNj zL}JeJuFRtSH~*op!he6G9q@gn5Oe=#_5h0Rt(rZ2|KH3W<-d;EBl53i55$)63o~yG zw_TmT@_#pb#QgJSkM{q&+2hQwW%fwu-y{j=ZP9@P8urkU;bAb#z8|guN6E{nEStE(yp`)#uD?10!sdijey z7s>1HF5fbNS3cp{*VK$&%%w4;>oc0m6_bo))3k50qru5z#7&Zx_oT)O2A>@DHbYEk9-h;UQ_0q9HBK|v{LH{{Yjp3nIEQkh z_lzvf$5wa5atigh2W6u#&r^1JTDrxifAs;Dv*hcCO^TBF?pZMA=Q!5n?g>I*t{3U9 zzf*l_&-&yvSy+jn%a;u-)=-0L3f0OiTwW z4oQ>hbR*;SN=o`w*DE2%k7mPN%S7Gi&BsbNH0JqO3wY>yW8Y6dqG>ERND(Q{cD7eo z-u;wGkoqB;DFtT-ysZ~-5Nyr~-UtF0aan?=pP4M5=xWw;o9L`&AkN6UQqHJvaz)nb zXCdW=P7}`p`W25|0sqWDq9Aqsgpnr%Zx>em`oLJ72lpJMc`6o~313xmvkH69_q~R^ z!$d~rXj~ap7+zJScIkzm0nF9P4?}PQae%0;Bk|yB>88}-8e^b+XGiNp*t@Sh>!T1@ zA@7UQPSO6UrzPD}`BXT4+KvqnDGal0-yo?Hx}5VING9g4@1dibr$L>4zjn4wLuC z@0ClVJ%HY(EM$Mna{cN%+i-;bIOhSRjBP^+K$NvmmJ3q*Y_n52YVZ;*vClK9aU%sx z_P}wI0UpLoxz$@cX8p&-0zi!}?_>OEpoC`>xGWYFT7+VJ&7cbQ-87tYSxHo6PGU*# z=lNsmW-?43h3~;d+FAA$ABl8suMoo4Bvd=1*hD(w~$Ycdk zDqt)w7iJs58X{6s?58tk#vtE?yoWS$MZPzWzpP`{vvL-4X0W$YV1cU>LDqFFccGn?>i~XrL)}g6T$TYiEx@V!H^=JZG>PvXrxTo){Yh)>3>C05dRMp zh5Ua8ilR`PvPBeyv(e^Oqb!Yx$}=^hRD@4k#u=8T#Ad=Bc;^`M*SsbNe!ZXY_Yf#! z2!KZNQ~!KDN@YW&|Nzq@nfb@^gaA#QJB+AMajM{V(d?JgVt?&;M6Y!KwtL6=aK)D)-(} zkRlNXBqCMX>w?yq7L=VzDmw(imIXyw$`UR2${M0l1xG|;1cb0kByxcSl!gQd0fGrj z5{Q8i2npXe&Yd~){mt^7DRs{I{o!An<2hpT`Mlq+*Yo*!TryGOl0sPSXJ5esvqLPU z(O%I=$rG|>G0?u>ix7bCXE2|R)e~20Q|*FtPoO3`Gw!G+wP41`pY@p03r+o?S6EBVp?0<#2Z9=-CS^jD5utuPwSBJ?Y zFe2f0l+c3&QL9-EdT`1|s|>0J2aqb%F2!aJmVe%G=nWKDd$pFR)K0)&&J1(__@yO% z)RSac+RBv-4c8f73HE&9vqjMs_MGB@LtQ?R0T$!A{NhOY^8Pkl_OgY75lTMqm3XXD z&oOZ~brPhBx{*fn<7$aJVJ_&xvUJehb0K`$RtVi%h)trLitFPVjWiX;4>4+#G3DH= zQ~C%O$c)|rCi}ImaX10Y| zB33f1cn*0@nC_6HnYweSz;*6N!PNM}ro{x)|e{+xK~ zfEHKX(5D&ea9Y1pMG2bkAYfGyd&G)m+p@=J2w{7PWZq@7d$MDif z2`Li-59gmE0U_G8ONBfaB_JjWQ;a5S4LZ?DC;7*B_XObDJ#7-a70Y_esu9%jv1GmZ z>*`Ns?zVq!J@u}`dG+wDZwy3f*wY!RGaJ>W~rn|?2KvZ0bFt55H%kMmdO1E;TL*RgcBZ|L^TSH2LYjGdhuosju@@? zC}GC;8|J6bU-s8{7FA$`rNxo^U_u5-5ULqYes>;XnR%kxSxQ56Oi{B?3@^7hNwi&f zZHPmrL$ap@9gf-c-KIVqNAw63b&ROAq=GYh;ogX4|;l4!qoYw05Z0Y965*6dw(HH)yWUPkgqlkRtp zZ6-_k$m(B$Q|rz~sg84^1b1PT&+d~{hjhv4;(9I0 z2se_sT6=dSfUG8%LYHJAozb}YNpeX;C0@M2lgcg5X4^t7p(7$;1_?|gk_fk~KmW-VF%&zDf%=(YjvG@l&UNE(8J61DRTv^7d)30PF3^LDU zV%LtnWPS>vtpdvyL}i%SH>Rr2`)cwNRjlIj_B9$3Cuy5sh!=y=1fg$}tm#DXZBzR$ z4*B$+arpf4!tt$>)%9|&xNA0~-o%tTEX+$O!|lK7u;e%ObLGuwNW@^QUKv#;X1C{y zoulQo1zvvJNUrbvQV(GnlIERAUiu0qyw))D$3krwmVLg#PNS342lf5&qlh%$y|UNS z{$)H%LWaayTgy4K@$R@a^D20#HXOpoIgO0)Ea2?Itqc1Z=K86!``;QOVTA59myeoQ z$E$-a8sX*MbC-rtM+1n&M}(ul0HRXK~+Lzo>GrmwK2oq}r=DIokw< z)qTU#5vc>fRqYH_E!|?Nr#?}?aPz(k5C=vG7xrMt=gCv>Ugd1-?1P-iBMi=gSkB|Lr2m5P*L!OcRY2&4= zph^qOb$`0mu`b5(s{8sO(6v_mv;cCQm{lC$d0_0~>NGLWIPC5SVbCM%!~(a|MRAk} z5|m(q1l+?JU;TF2JjeqT<3J_=lrKs^`66A-OrV1E0W(**FM@6*)MsJqP#8MZr7p|k z)x>E+sxeDyresnW`Q-izV!~s0gj;=*R|K8Aj*Ddy4F!IqEWtAFF&Jvj14@M5z8pW_ zaoh99@LLC8X2iHN{Rh3FqnTEP&((o&ly7GAdhizfWZn5r>|MhUulWpe&H%MeBCh)%znl4!W3#KO@hnk&z_&a{yF=%&=V9zO zvlZp7`ddDo+W8X|2x_-RBT)Nrya5^2YU-9CXDguo56s(rl0;b3#fMR-&yf_xn8qGT zS^U0#=1RUg5#a{zgHr;Z_iK#J-mk$Lvl55d z&MPB%S)e(>mH*&> z*FZh^RizQ_9=U9J>8R9S6&3S@P7R!W-mJ`+d;5)itIdS@wio-8#Lc^F+jJvbU1>7$ z@i$SniS7&YsXiW1IBe2eF?BgjU9X#9po&4NO6QW1)(G)f_@D>M`mANXTuRK(^93Yc zaGltAJRIND;{gn2a> z&sWzwa6x=01{|H~8cuhE9pZWlGx1G2hd8TXIMWib*P21l=M_hDjOtrBn<2 zNNqaz>1%$F!LSbY1PU6F%=U5D8I zT~deGvKyXXwCcaR>E~q%;%65c+7h}FMth7gbkW`0OA0A9kXqjeXKFZA->ieQeG5o{ zt|;vvZsv_Sx1nC<_wH#cT>`pDk3MGEv-CwU?u@h(J~0sfQ!zzxdiS-wi_QAut}w@6 zWmbx(cA7}|HEF~&yAtZGXn^9y<$0Ya38G#J@x7TECpgw>T@ZCO}h-oL6~**@~C)e=RG-a4@xr_^#9K@S#0^^PUlQa-|b)#mu{ z6af<=zR%)F_^ZEIG;+L08AiLFNs{JI;U+PJNimUy{MqZ|dc^PZzzpa+NGMvGvk9#L zi*L_Sk~M+MGQ%=|*tpkU_e0uQRSB&4uBzh7=;fh?#Q1&avB9`5o^izB3oin_I7Y$| zds;XPO$A(%8J((boZlBdF_gK-epxb8PTtpu8ir5!{!IsUY|IWq>Y4CR2B?v_+^2_K8tk|*kWq(hLu?)h7a zf04X?rGN3W9Z)!A`yamId1L7EkvAh=?OM4c7a*`5lhSpgH;~Yr#}h_rd+hnX=!Jnd znzC#zp2fkQoy-kF`IH*3pR2V*yg`Jl3#z?DAl9*{rRDV7nbE*lUu~q1FQ$EYs?V%} zI_ghu3={Sg-^Vb^NJ*H`NBdi?iN^8ajUf%vvB%#)g1LSb<$xY;6x2|!?!M3fwST1w zyU^*RGR(;@%89B@bSNj4k4Dcas5@{ARwC7Pblky`41U z5Hr+Q@TP^qhafkrKp9opmp$yTb!Dl}vWsggEZ{PmID>@XPvTS05exS!t?Kz>4D2Y- z3swc02Uk^;Eq^8g19}jLNWOAzQ(crp8$?)ORK>ITq4sE?_oBX8+q?BenIrmFu-42U zPgIncfuoHsEPmF-`YdAUCMlEbbiGMo9lG2=luv+OjMHsr1*)Nv6;y^$g;XM!24n(s zWxcxg5~IBAlaQsL@A=7H{8WCQl!PrD?@YGr-NFg@7-oCc=6JP?zLME)drmBBJ9z-R zm3o0;HX(KqAYKM~z5+`2f=7O(j%w%K(yM*6y)2_@o?YT;&(W2Z?)yf`iu$2O-0^(l zu+?x~8pI_5QL^-QqpXMD8uaxhtWN)ExKZHz=c9FZ8}t1e6h*=9Pg? z4rhB{-P_&qkyB55sW4br3e#lLqKy;) z_?;4|_;N6Hp#r7TS@>Ze-K(Yl!U7=fApypGHHiT%(Vb-=jt;Iww>%I_P8S${P*puk zHpn+t&8rMD11pe;Bf$jB4VNqg8YmKR18)OeW5+HJc6#j*&P(R0ll%myON60L{H^|J zk1Qj_)4@?AIwTNUrjt-x?j+uFj9D##P8zVWimFw)O`YcV)1 za<+gKPss1@4DO~pV6}5ix@uK7h$*Yu6Wg~1CypWvPq|5nSl788|6@+xo2#^LoGp$F zErQ8RMe$?IgEHp`rml;8P*=`p#tIUd!`@6~Hrl_eWSV{Gwoj!0#rCuLsw$B8{0DwQ z9<>ek_%ean)z626u&^0c7rs1EzPK1A)}(X-do}Z)3{Tm@8^P^;8t@Lh_&GPgbJMR= zXI~a1I9I>r2qrjdnW)8cZTmrRJp#9C@JP4Eq{|d#Cmvh`IfGpjIR}^*#WvSngC)^W z?BHu@VKz>5VQ5vsPo~R1rAxies7i@>M*2z+r`{Z6K1{2jp@CTLn*0tR5@*zOn1(~kF;`$>)A z@0=<^Le7!@Ei8gx_>s7~H6iRrD$>!L)3=Q02CLUc`C-;mQmB!^V*{=U7=K@7j&kz5)O>@nUoE5d!i&rty$H<(ntKH zRW6itq8uJ@GoY3gv}Yc$BAydh2H)lelqO^kWk4xy%R!6=)xTjyfTj&*lP&n?saq$0 z^#unDtaDnb!%<1GPxv-d>YFl|bNXZQelb7PAUzOeQEFaF<#vH`^8f}@=B5h5H7!aoU4WK7niGykfAJpR&9$stczq_3Y0=QL2qm{`=i;RcEKf zZYLDdp6_*x9w@kaH858e;*z%4b2p}K_v{^Nzd<}*GyGWR$iAiAiPMqSHP?7`wT4ev zDh?mZM6mKLhlUjgJxf`k!*bT_o#gy$Wxnv2pih4&ck?u|V;f?a*5byacRtM0Mq?v*U+ zxG=<{(kPbMQ;CS39`?BY@vtP94n$yC)0pf`|#~~-Fstk$zixuVDN`VmE zW{KiM{EYdEX~{Iw6@RnaMYgzXq<7M78}!9l{84K% z__*b{1FlZ3a-H#9bAx=x(UwPbPP;N(Y-%BsvD+}qH!3B&xz z4x&8xZI6kvdjJ&>{%sDep!0aIV+P4--zwFIC4x@$Y%Vq96{wLffs{5#sbAjb@McX5 ztUH*o^Tko99+_NgD|)asEl>{?=SnSLw1O*Ud>8XxTLQR%z45CKIkOsV>gYrjRAk^h z-M%Wts5oS7oU>^~4e|Jt#6qZ_UPMb2vtKh;g73cac$tF+pa0AYsKh&CIr2LSYa-P{ zSz&S9Jc53gS}jONpKL%<*d|NL^aB|dN^knNJr1pYsri*o=)MVrF6y0xxW~M-uBr$6 z83xDESD{1Cvx?4psb?z5#{O}~%9*PXAQ~_N{)}%(u4;QuR2=99}n<+pHsl)bX*XkUn--9qi3qT4=$j<4l#A;+M$c0b}?T;`Nx z*Er9i_EUct z&?wJzMC!Hn@;C)z=^r-q?wxPH&aZ9IuiMUH55!^5jjz1k0=q4%u(Si$I#qe3nv0`l(3f(((&}s<&)G+-{>UT)9Lag$j z-_PNCj@#1mai{bVz0DG7-*+ChpF^NlQ&;pUky8?rN@<`ybo#&2OJytwq1rbhs_A;XjzB zqg4~_W`upc=J8)?IuhS&I{4*d_~8JgdZr`z4q4N>29)HNTOy(Ipk;r$aSroE<{tOu zm)j$1Yu7z1-jGw1ys-2}5bjl%k^5HT!9)JG$8Y~te6?{q2UB9V#LI{h?o3OC!%dcr zqsuP!JhhA(sxdJ|(T#TW7r({a382L)zGSYJHAF8nJnd5UcG^5wck|W4q>_W44Nqbf z90w8Il72v}uxD9tme*SFDsj^^hszRl#TNr`$_G$$5K(Fs_#C5t2Q^29wO9GZB|Vny zMJ?+HWez*eS~C6RlUwC)cB`pq%vn=YDtpkL?;2d|P;n-gI^62ozQ4_3L^$t&SM8m5 z6BGLo73I>jv*uw^G|VBQomlLmhH+yFu+|w05W#Hk5dDnnobV^AZ0hak;RG70ok`OW4Nd>1I zbII5Zb9=J9++m2YtxpHFPu=a_a44BQ(6!=z{4T`OmwC~2ZxaSHr1=zg*dk*h#ZvcL znfeZ=+kM+pRdlJkB|TQ-emb4&^vL0jEa~Hw6WXD_7zmpU#LQr7I3x2gRdO2E1Pq$= zq&S)7r9{}sFdPEKuv-gVXzJqa4Yss|1@y`Oz9n0FkX43gA-DC0@$I(NG@|!xE%1z# zoo`@WZl?NptZO!xf@ws0yPy%;puIBv0EeLJ%wgLQ*+q7@c?rPIrTu$$v#IF}z~ z7g9%gGgJa*mOh-v&a*-C{K4Z3AtM2YF{%pHmmM`Ia}`)9-?3spxV_ZdnOQr($`Y<& zK^Z#RVKWEE4Mho9Z{$A-m4WK(*ABkK!=94fqYfiB5xqn>qi?NFJ_XJ;dO6Ps!uEbY}nFH61!r%GVv zgc5KcUp42V$Am%FjUVm3xXkOj?S=gO&4lUYT!^NlvgflYBY@7tJ0^Xp6^VKp1a60hufD87~p1Ul?gxx z3Q5SV%W#l&g;;l~N0}?1-W~V2+&K)P&VAIA*@Y^H5c5<3E);Bo3f|UHLmX}$u%9*P zJnJUbZOQUX%O&18cgnI0p~P8kX+wl_$qsG#$C~RF2cV|*gU1`zt1|U-#;KVJ;%EyM zgPOE;0<^bwXaDy0^Yaw&k_7nxP{cR_iWoaoq`A<c2+j&Tuh>^)-?<70@);Y)#hIi0CQddF1)j?bln`oLqTsY$T-^X`B{4!deHE18 zy_j8rp4A?HKQK}gL4QJ|&U4n1s)8m|LWxp+2hpoYb;r7z)vmpU8OP-Y4T%cp{I=%i zHFbd~y|CKY%S-Tzf`r?TL3j=_o7CsTnduM$My21mf8gXE)g_|Qo}?WBd#I}+p_*G3 zM?^Dpf;|X$-2*4zUA3&=9IYKs+1X2I)qr|u1{mr^fy=~UWM71%!)sgSPgIWT;MVx- zN!OD^wFAX8Sh;aRI2S|*#jony>efOqWhP8?Dsr+9h2ru{z;e9cR5Kg{-UpL%@6txJ z|LYhGZU~mqq>G3T54U1!;L!D!>&GFVgeN5{&?E~LXs;RRT!RGW2P%Ia^mGFs{;ysc zevASYAMG(L(`L1)LV)soWyLVk1~v2we!!m=G)eKKeomhBnpDG+LVzkusrcUa&g?++vxaFUWR0`83mJYVUxaXx4R zA}|qjinzOHiz?D!_EW_KUU76tjz0@Dh`@HpJX?0$OvHnln>H%B8_}ta$HR?HJsv+EE;>2b=GUBFMWInPqUt8PGF2p6}=+@Tm1+&|C=7yJ^dz*7%_k zftvnexhLgl$*BXXPeriRK*J1L|I(Gpa!3x#37|vVjfSfjMyIP=a(Sppr(ML0SkPgl zmBS_}hLur-x!k$uh4$hsmd6)!5+14}G!mUyrly=P(17H93TSD)lZAY{nK$Op8PG>r zN2ZEye>QZ>?9a79llt0W+dozIKM?*r_)a(G*`uw{i)qUCtS@2F${9t;vHik|N3!!@ z$`AMa?NyRc7Pj`%9p`p*Es9NG#buO`oUiE2c)D#H@$U_=>itKD5J|D|Hq*K!%l71m zuzwPGiZ2JOjbOI%M*1InA>+i+$Tg0eX=a{=Sv&&pj^@ZoHP%90o%riPwrV)~bY>aj zLb~zfuejS*6L$d?89J$*Iw2>W(w30@zM}%lIRax_jTIPL&KLO~H z@NWw>;x5i9GG(M~=^M8=3gtP`Zr_h1va!NdKs2Cpp=82mP@-lAJa5A`IqTo3ag?3X z9G(MN)RPXU`tqN{y)?FDXJuKp0*nQ8X?XvW=NO)?$qENAzVu1-{Ird*`Qh7KnmwoL z23eEkFfmNw5?$kZk9JYv&RHlGn*Rm+#S@5Wu#`7*mAo%GaQM=H8m$ogKcW?x|F398 z<-bNNxYb6#Q?z0oL@P?eTZ{jvks8)+38~bxXFqFz+rKbf(#Psz!j;wH9454aDR^mb*k{nRhkC<9%)inyF=Grt>95D<8LO7erf&daq~9ac*}ce zAG>+P14I3gTtV)So<`*^OASz-My%zS;o!)*0qnZnE{2%F5bN?2w)f6fUyA}b`fs%e zbj66Oh)5d=fI3!t>`wTLynM=)yfjHfYLYJh4$%td_t6T}hl^GqllXlWWmxiui&m5^ zy#({^p5G-}(G60|L+I|dz7z)#PW)Y>6@N zl4qho?iF>W`gA6V7pX?e$DbK`*=^&AoLS4v_3HKWUnR;wkavVGCOdPTn>jWJyxy0R32Dhi0qVZydS(C_%ZO}0oyy5zVfwjO8;BzKyOk&WkKq4I}4``ci1d!Ot< z1{3Bx^P`uoSQf%gU6tHteWN!n*<^`6W?k#WT;nt!wGy{wIW%h6fy&l}g;qKX&^s<6 z9XM@$pYG^jy29Wv6g5wj>r^2TJ5dygQK<|`6X!8w?WlZyikj=;DNfG^cld!!jcX?@ zj&h4g2DuQ5SW$WVxLI%+f~nY;{@-~O@-pXqX68u1UW7%OIXNw>qf1-6!&tzG-*PbD zSd8C4=#IK;HJzody9D{sW_EvP@vyFXJ1soO+Mm2kX|ke%`5x`U<61$SFR^VTwjS0vbYp`4{*h8 zqHq@Xv&>+a+jho9g53I*#kbqFBo*ahmx#vi3{V|?jEu8(lVye0M(|{WslCG86Qc(s z{}rd2I!2hRI?-oGgk%$*ov6RKacN4*a+2II4!@>`m>iTTXbZ{maabT z$=5Brh}{pz4Atr-T80i$kTS)2Yl}9ZUf2l>=kmR0L#P(tl-(kEl-cQX3XJ0?XXfq9 za#M5x76-3OA(Sk=1YiB0jvNVVt-+Zd8_Kt*U(`VYd?>XJ6Dh9tOQ*7C^2x2e zH&daJ;;iL2XU*w6+FXOe@9%L6(tjgP@%Vofr;z(>fFK|J4si-Q(Fc!HfbYi#jZ=W7 zDVT))|07O81aXSze@grisEIdV6HvI>Dh#;VlSkikX+Ah=LiHg~6D=Ud`((4|?Eefk z5&bfT?X{aaY!l`L7Q(X6wR$rzl^Tb;P#*(C>_B2QV$J3&XRU zvH0$a^0);nMD<~3^3bPxZ2_}8E<@4JhZGf;QU}3{n;+Ds>%M31R{B{co+(F^`6+(z ze8p>V4Y%qtvMkTj_-qn2VfP+2QSu>C6W_1HH`E&h=zpc&_~N~KgZ743sa|?Rwy@c; zIy2t`Sp^sG5rsWK!=A_m+!riIKR&>>ea9{p!O2D4n7K^%ECU^>A=b)DwHH`@MmzuZ zcsmGnliF9eUq6ceURY5~8iTuNuk?OfLG52pyp3k}280N5l`poqP)GF^!;dokyL`xU zg+!yAKH(Kyw7mhjLgSlxQKzOAj!cVGVVTo)?ia(pCk^y3i>AQ+p_u^Sl%>`M49@)-?mw1YjCy9pG%HI(u>F=-3z{d3AB7 z5Z$(+(+>MWi_}5w;lKjMwgrG zr5+7?KGs--&40`b66eu96*IC{TMgjBAXp z9eBls{6sSQ>HuxMp38?Di=ZDn!o+S$Vl?^jRi0+-2DNU+>&&E#O3M}a(+{+I--#Mq z;hKmCSLEPd4^}*X4&2OnX?Q0%ih`jAggVw6JXR8LB=Dq35Yx0nY6GKTu(}Q-%pWRf zMbwkI)<)2$2`K907WqODN|O4JIzsk|nR|Lk2Z`Fo^PN9#1`AHoV@+Sm3R-ytQD)uO z>jB)1{RsdGaEUcRstx!I@#;kP@;3-4Pv}X~F6mZ6aI$fP(wE~i6;8bkTbq(G(()WA z(rLw)AbEg${EgW)5Gg3Buz<~f{lzw9y?T2{1G34^Pz>~u(SuB^1GVo(*V=RRXm0@A3o&asRh#9=zzta! zVfV?z%7>mcY6)PKMF?XKK`a?5oZgO%o1$I&x+c*Qvv{#sRouT+EW#z8i4O)55dxCD z64HA553Al2-}=&fR@+q*GZXzSge~;aQ`L}Mrk$l2xqJS~=yOOGNRmjr&csK|R#>RB z-|m{ST?I}9X`fMkKOgz=_q~f4x0$Gs%SOS$s~mw_g`z1#RJ^~@5BVi81CPKRILtHatm$3?JTsr{ z6S2*dqBLJ*RPueIFv5BgPgo5xZBj3B*BfN#fq!g`y=*(iT9tND$gJ`as7l%xo1$-Q^?rg41<&VqN)+0k0|z!BFCy2+(HAV3;Ywd$sesK z+E1E`+MP{VQG3L%%H=Q!d}Z)Nf43FC4)r2&lv%p)#;qv2VFx@m3*#Kvi84=6O%k4Q z)&_1oXy5Vbpn+YU^d;B)9g0)#aNs7o$n+!pq?xk80uw%Iok?xsNhl$>{aeVfqgyFP z0e^Cog~$tcS5@3m+0g$ayhRga*R>|#F!CkprA!kj^HT;8)8uV7i>mda5ZygQRbJNC zStu?Zle4Flqs5iN`&zxEUBXKfRDgHS=%Y@cXVYJD4JFi~&xB3+sU zNWldlLmepw2@B(}KPnEeo0!!C4>6I6%Le~^Rqo6nbmV35M9!|$pB8>qRR{fH4)H8j zjJN~IK64n~JzOnml_1g)nA?H%0nn9EB7Sl2m-u+l|H-bfK+Oe*1bJX~H*L(h&D21% zQK^vMxkjMg01wL#q2BQR zFzStg4fV#azmIxjZnNr*n*UV2LH_;K8xYic^#(9{wrn;`1zs_2y$9FBKfHP)6R0=t zCVvR^224g~0nCKhNME`|vHv%dSA6ZRuCRvwexc;|O>W;NtSo*UdUE)sPwc+bw$IY? z^@;lPW-u_A>@uu~`a%_Rh-l7Lz&LL;5XC`So>qa?3L@=bbNVqSZ6c{~tHS7NUMA{j zx!;e&eQ#}bH8{KQ=@7+{z)7 zfIB5%QR~IIuYWtQ?UD7yY<9ggM{^jENA!ht2BG(hNuf2S?w&=Yt}a*DJ^o5e1UpcA z(Hwr$7JtbAnMz>`R}wu|G**JHJcN7Y;rWWP z1BKOv%_V&=n$HVb9uw1nGZtIqtqk&s_C)XeAz*6sBsAhhj8PLpGAIv{?a$m}et7!0 z>5}qVc3mMwb=nLyaX!cHy6X=^Z%(>mCI=PTrm6$uM_ zy$)`dQPI%>xP`5oM@@iB1xVQN{|D-g<^Ni};rH*=8%fhTC&n^=PxS_)g5dJ|JTSo& z^8cgW==nX=8>xvYWJ$?q0uz3M`hlX`SuwW55- zN@6)atX~_Nz>y^@YzG(d6&83Yqfj+r6E^<+D-l9BRu^{NX?Bv&%98T3@7FAU#@5i2 zkgMxg*wQE9@>aep88)}E^=(jVz38a;?ZM>nzwI0a-w?jA1Uw?FfIVDTP3j4~UGg@f z-hmV1BCL@)^Una!=9XhNlUygU4YT)$3+W_H>zzOXV1S^@=IZksdlTOf9T0SLbGW1L zU`I3|P9`%GFLurQs;e@~h9+94{?@HBIBov2F+mmH_G4vt$mR5>Ah><$Lg zW9vufkKQ(yVH2BF+ico74?S`nC6cqb3mdJ*YdjPDR*t^B&rt{JCSes9NtSc_M4vH@ zF}LfoWsvQrlMWIG1(LP;0|?fJgGrRtZ%?m-=}XGiiNeOuse`?-@E*xh@uSezGM_L} zFE<;7sxO&HeV66la2t-9lk!Ry58UQC&US|q;tVk1BV^YEl|g#*BbZ|@6-k-SYMky$ zIV#}JbgS#5km3D0$hcO%kDcl;*#*Ln&$nLMV_bhCKJo>3f*JZMJr1 zp<0vzBGP~V;Qu{)Ij?=3{x2+m|IuY@ykz749l%t#l9!f!dVL)>GH7jIr5#4~`PSKO zskKs)S`KA8-Eg?Jht$N(F7R^uK{R2lceh3jS|t(z)=9>;%)gwk=1OMJ#+57$XT}Q` zzos007>N|KDb}c$-Z;*$iRCiLSRz%&ns2R)@z-_OqA(ov1;Xs zfo?#%c+lR{iN<{H1#Dn(&v(hD!iGZ65cJYh1LZYz`S$ST9`iQ_iTLQanG@wLl7uMo zO{fJ`Ff#y!W@yVq$)M&#(e(Ejg&uM{gXnLx+7L0(Jzpmb?`^ z;YAdR>eFkON&Nu*n41BnjW+V?Jb=a~L7+?eA!RFv_H{%-=lk-V!fW^@Q{SRST4;@n z)@1K@`g44eW`YWd9jv>J!HBaE%wb9LHrGWDeMldiD7xB`1?fGw>~Tw=9meP~PcqI_ z)KRPk4~^0O=~6mwnJlmrCKJso&)zwVUe~~if^5a_x z{~)~8^Qn$=1JZQlJu!SjvKi;)Cx*`nTd#t+YV7+HCwNqlxL0(9l)DZdeYtgV4j3f^ z1>AitoY*GrRiy=L_W4{0U*TN7Y8tYRLjt4FqA2Q;m{oI5X8=_L6o__BX1Uf(T5gK+ zVaHmF8u#5AO%F9UpTe=*YtjOdz3{(XqPnKsDo&T*(PJBCns1q=v7LRpDwV{UaSvyD6jT7ger|&O;8^)+6pV&g{kgPM123F>MRyy$A=I(~gPrM^M2J z8R}caP}~53^yF*~(gU8H0m72jwDyQ2)L)r@amei3?~W=r2?E~Fs5PdKY0rLSEHmeV zA#a%e<)gk+yExsk&?Tq&@>yC+7rf0QUl1{uhtp1WRkDa~9*T9KM{?|F`hgS%4icCujd^!3y zH-I>_!Tg+>c~c1hPT*7l08S5amTAdR`(W3(k)qZHX>Ma1zP;KJPdD09L<{vHmQ2&1 zf)r{&Cl-bYIqA04fN-Y2$w^wZnjU+j>AKR8p(fH-7W~%+ae8 zc$H~SKKY_}*b_I`inqsSOX>6A%(czbnO#}m_Vfmf})HZ?)sKJnj{y zvaEy6+O7Bv8jhO(T*Kl0p)?#3Y$JgD-6T+8Bgy>t+vyY3|Bi-3C+7^b>;q{y$f3Ac z@YRpoyoO^LAg(~$*=?@x18F#LMhP92d3ImpP(P(TFFL3Du`VQker>B$i0Ac?J&E&S zUofu$bl~%2&u%-1q&%u@q`?v^cdY25=q7A>Mh%JjqDLE_J@|A7K5mgaR5CazovPJG z=LK2k-_T&$pcAFsbVwUet$G@#5~=v&m%T^Yj$yxVw}QAKWS?RH#|Tq(0|xyFF?-Klbj=jkNPGecB7|ye?WIJi@oFb z1$zbebMrhZZ84yqL;umbOQU#^!6Ey`r$~JkoXb;w4uQxQ^AS(`u#_U6& zUFS@P1oU05HGkt3PHC4B>{VN*JKt`9?Dc&2NC6QD>#Z`(UczaYSemY%MMfD>ZV|0t zrTLK)M*HfBaG5TOonL8-!c_o-{oQgI_z@3fzSPf?5P-b(I`{=_1VrA(&Tj6Q1r(Xq zM~@x_cRT?2DtTEAFuJ{gR!nR~h$pA`O_!%DWxAY~hYB?{4fYGAej-@LO9c^blV#|{ zdQ;OJZj`9i*@~GvVruGwp}S&claH=V15raz1;jCHsFFugmC#Z{M%3AD-hWUa=%*wX z{mXZ)-dSDNo-z6f@>M?MBi8_v_O37SgW7+=$QRI=q&fM;Lf`nfwTkiFn@?h_!B0>2 zDlQp8>+~_fVmn9(59q8}`F*Q&F5hHvedzaz3<1Oh*eR1=f@YL;U&Ilb{MX&D;f9FW zOZH_;hMm>0922G=F=g$iE%FJFjxS+G%z+u+qWL2Ta@T;DTiD9(^1N7!QDdfJsz&6p z!bwJ;J>BSV^fBw(#^J=2sT5C4uzoyiHdF93r0o~r9JrgYr8f5boiKse~_~y6Iuhw_HuTu-l`7AKb6jkkS@+|8NwJ@7Fy<0vgPIY#O%5@MM zV*b|25X0a-E+9Y`G@{Ppqk>5yMXQ*8cwR!PMn3Rx5>$YyZ{pBA&sjjdttvX3c+`lj zmd$%J2ak{ay3Ry*SoiTW&xx9E8$CcYK|IR>K7w=~TgRW$Zi7UNonP%t-enVOLsv`V zm#+}ii&lOzmCO0eV+iWtw9Vo=>1~;#e2C*@)p|IMY15#s z9?qi{#GEiU~+9C1MNRKk!*f=-g@~Dh*XKOvn9YGDmWJP zaX>`M_84lFCtYa=Yxh{igC}Zk_d#Z%dG$ADFzEwg(p)XLxf71e@d2qS`bfR!e{-?( zAADk-fA_B|&$pxV46yHr+fnKq4mxN~seL&*z%sqaVsf1$BYH1hU|{809n4&qJu^)8 zZVPIS8ByBCQc6xWgIy#{m7CI}?UGQ{7*g~JAJB3%jY&H5(U8?kkkY2aN zb=~JvojCx$!ffTRL8KCad6_Bi)%z@SVIcYI#4WM)w=o^wrBwTk)o#E|42JH|xaf&7 zk61)C!0^(}{5ziyqW5PKiz1hq?9Tv-5&r&FZ{Ycnm4%tmRd&Tl0 zbSK#S7QZ}j#9_Gi8!IVi!MXA=k!nB7EDG^Nv4<@Q0Wjk?w>)B^JVBKW$5RmTH8dW0|Q;-*tl{&@!JzYaL$6l#i#W$aCk7vCJ6f@W`*H zhq->LoW+hLA}`I2Ct-Tkw9G0wW4z(Z%-;jBN#!22R5`NPDDhmUMNUf z6Wa=&8`)>s?W-zH#MkeDCul%x2gK&u_7?q*rZNBbXXg2aePZL@*0~WSZ4esmDY|vC zNPe;wp3_%j4t>!JV9C?A!fFFS_sh%(9ycO<-WAL7QTfjTK-a#}CNaB%wcq{d5KTWb z&$ztPVRc`yw`Nuw5&W?8X?RWEf@l&bvpzqb`M3}5k5HF;=zaYd-T zaUXMcJ^IbMg9`v*-W8zsnRcAC!Rx4HGl{oLNsW=H24~=p21Z}SdL(v`LEO`})RMDI zZKcJEMO2Z3(V8kP5xA81w2B9V2hzQ#{L~cF1|TF~?>PR3@sVS-)wam;nXSgQtx%J; z#$j~@rE8_wL>Ioxn_X)mlDme89V{6}C(MqUzmsWy0?%<3gA~c68$kKNQs=3#z1iQ3 zK~CY5g?Y_l-Fj;$l>*9s>zn29Z;ZB=(E~sYdbF?l*^6DQ;N6;T*&4qF&O5KNU6ib)H2e7{tGOl_)7*FmI3_T8oDWM*uO# z?4F+d`;mEAwU~XkE0g+429iS+ z)|-h2lmj5m!du^WOE!3J`&Mk|gXLyN7eu1)Ve-Q?=LqrqPojfcLZ1RM%-w=h=4cS@ z$xdL8Xv#s8WQnBRu#W;C(})$nKwkKm($skeGcNw*mQ`2dFsIa4RiFbV7kn59;4fuh zDBj9RtpX4Y36tn>n;?;9G|03^uwib%Q&>1Hn#KY&s)I$6Ay33|1+?XQE|h1-O_~Ie zlqQZh=cajj6qtD*^=uPhA zhh64vJS_i+sxgTjhx(Z|$w!*g#$6rplGda;t84i=~LjkFf#sJGS5@;P1lrBhHf z#lYi>_zk`QMHi9k&Cm!bgd<>G>A$4);^wB7p8zWlJ_IR%N>x-4TFY;Y!ib&?6dUlb z>s&Sy4FTwMZN9UDBQs1{q|`XRs$}e&&(3pFwSCT9i4AVf zQ6;anKB>!lE9Qv-p)Qz`vuo7)qgQrmO&opOSKJ(vxpY;`)ZPYYgeZ4zK@zaL-K!ZE zR%90+ES_n}qQGLOTYpJATlONE|9{wf_o$|?eQy^Kg%%}HT0yx)q)OK*1!)Qb35iOT z)vbaqR}~cGl1eI9xg}f@B7$5BBwF_pkc6l#1y>P?5fQ>gBoHl-U_nTL5FkjnB!m!1 zAR%xj?OyL0Z{K&kySv!4&l=Btxkk^JUw&hPwuo~NL2>r2(LBxW07iQtNx9ssAN zrpex~u|&Y_o^ADC7y&Rg@QHiHe>-Be;LV=M zGoa+g9~pED^;`Ndd*xLP(nG;#{l$xxrg)e~4+>W2I)KZA-EV9j{ zp}TTCax0eQ(R&!%fU}2=;)jJrb|ZJ7+ta=sCJ7Fp zyKTp^W5KfvI72mZR>ipvB;^&_`>B>QPv*ylyK$x3oc%QF1!4qgYSPzHJ`3LLggh=f zYJ!veRV#lnaL{5JRPrA_1m6}Jeg*Qu`<|yON8j?fi766;(fI%?L*!-mE2BsM0$p6V zs$*j7dx8QQKE_E3cgExliA1xuC0hk;1ub+^8u7t%jmUfMR35cWn_Ht&l9zMtHD3X0 zR1mtDdgZih7ci^iS52D`J{!sphU%>kom|dzXI5KgV^V{Ix%)kn!o{ zgakid)asfIYs{$uSRljt_-pfTWC%VK8#N z7v_zZ_kFkluKx7T@sPENyQofZw#-b9%Jjb&R$e@Fq}w#CobF66n8YEiN?eMVr`e=y z-o|neE4<-(zYKx_Lm&y6ir0*JRR9lx=YtSpe06dRR#US7e(l82gRh|T-KKGsEjyrB zx;%#8ET^J*jr-wpW}g*w@AfpmzQNZ4dVF*D+Sdjp`-ZMo`N9|Re)#qfFN3Z1-A6o| zfVmlpvpu)fmVgViVV%=IYj`}aN4Sm%{( z%~9UnjoSq31v~btvXv}g#PTL(lsYXtfhV^c=89W5DQ5yh8y{)g6J91GTykvB3oz~< z*r*R)SJ@(~&5^>oFS=Lx7ix@7j|>&SALrbG1nFQ>Nhv=S@HL!0r&~yqwR;n%xY7BI z3p<$FbF^MNbIUx8z@6fC-MJr$So|jM3IPYe`1XD;*>ZG=T8?9bR4pT8M zn=j7b7Ds~4Lss>S_=0{Se!K*OQY=VU)k+d4lv8q+^UN}%;Ox>A+0CrVx>{cJ^DZ96ecwOP7&-Qa%XN1S{3OIyaZ^WAk;$jr4GVo)h!#W8;EEz$>t zd$L+lesGmqPTRTg+}j$9FKsk(X%tpu(=_t8X>NHtmp+=WgB-HDvdxxMzodfQO~r*i znDNZ5K{*eTSBbZ3G&A-FRPmwGu9Wp#-*=z`R)N2!wr&C}5r1BD1^7PkV<0DSFOhBq zA)&emJO_8G(s*9UX(?8`M8!cEJa2mKc@5jGgDZc6+Qvx~e8#+fKg6CPMe^Qr!vj#z`bBgc5rQ0kd7-0AK%sD?W>938>aC@E8KHoS=0+r zp(|c3Sxd(>`C2XmSquXC14f1;8`w;M=?e&0T$ugQ!6kl(6PHQ=UK%IN%>nm#>=+-U z?3PLqq1_MPk_7dswR=5tF5n7M9`k7dnSueOy{{mRwM+JorEmqgL-HnrjO&EP}3fS7DT*nh= zw^JE`Nu?@kC6EnxV#oZ)cTcnauSw-?8>c;U-jU6Xw z;fOO^YBn-^30pTlf=Y@Eqa|#I^>_Xo4Bq8rx~tP4c1CKXBQZ?FJbGp8GnyalRbCZ8 zHhv1iPhQIPs)!(lVu>0zs82&;4!Rg1rBc;a?NbaCR(%R;jY8tW2O-Qv$t!>7(@^Xp z6|<6|5=dHJsoq0U%wKE;Z-@}l7;86cr!R$QDA8+6TaD0vVZINZ*lEhCg3X@Vip{i| zJ%p$msPXTiwT{^E8a|cdTL!do>;x87SQ3zO9TSsE9kd_MxpTict6FpWl(-die1Az= zZpiQE^3R|p-m`FJaD8iCjNLw1s0*5{?r@SYIa1P;bDQeMGS{~n??2+$frvntZNZ3J z!SK}r)0BI-dXSyUu;bjCsohf7%g4&19ks9QZz5P~Tsd(`;$@Zi@E+9~ewWO^rrPL2 zv?eSs1xJ(|>@>D1{+0H`_|oM8daQv>`yE1*#IPn;RW;ogEYymVa*~J9><4C_91C*2 z%{{+lic47O<1umH*bh@JSnvl-#Y)48=g_|;k3W8SkR#=`E0W$t$qx=d;dxf`57@;Xpk`D{AeFDS z^N2#So4%#CZg9JX@oDeDh2jVzdMeM+K$NR+1bMLVeZ&|d?W47-R=%2Pqs+@ZBJ*mf zF1$C56P8R zzuHQ3I&N~5D!kjaKiWYKnexzs(O9JMhzV^6wUy5R^_sd#WdS|%eCp~Q3khdp?S+1^%plGEL zpK0P=9)j<4ka$B+6#J>VN36DJg@F2tB(vqv& zLa>8%vWIZ=>?7#Dhytj5v(7}7e_z>N54vQ@L^8gQRv=jCwmq zkQN_EA31yr?RoHM@zp8(^_H_BiB}0$ix(RlS3>b~x<8X~%Qei;g z`rC|k&INbkBWhCS&OX#u#X&^;#E>P8`<=i~r; z;w-vV5Ej!v1Lmm54OQg{QaXvSH6LV$TLKF?$pfP^!Xy{g@Ts}w zGGNb*@8|#?;6Jf!+owd4YwOjXMi6Ms8a+X^{dkpNW^c_cALx&-k1xM?RsD99&QcWO#h4ShpInN)o z71GhTZ8Mk5L$THxvlwXNnEYHs?~PzEt|_>Obe*}*+QD}R=CyR7IIu5WU4794&gx#g zscaKXxqlESuQpL?FIVsR^=kr{!+-0@zv||5fZPe%S=*Cv*DSz(mcUX_V+cBOCJ&qegN0}Q#FhBCV} z)v>is^}3yugp&3i9BO2yMFx-C%R#$qD${9J1ZBhX>LPlb|t+czBYGG7OzeCm(jG zL5K!x#7W=5`mJU&F6|Yr0+EA%Uj53!P~aM*qcFf<186_AGj)F9 zsQW>lU=@rW2Xg7njn%fmhDR+;-Hs=fmyYvV5i1CkyF;c0tt|;Z!7HI&n-QZ_A#32zLivYU8_Dg|$wr-OAd zU^x{j+p|d4&SYxJ@HUhOyd#A->9uWa@gh##G%-8O16E7$wE(fxzc6nWimxCmR<#Gz zSI0J87iH*i3%69$^P!76_XLQQp%AgUp>K~l)oSe%H@opqhhBkCO&Qw0Ht)|ef$yZF z)enb$AY-5zND%bgqFqaTH!-1g|4OC|vyN8(3TD|gi+9Ob;AE23r?+CXtbIRp-OY;c zFSBXh{T%9vFgs< z(>_pUQwO5M7Wx8)dK6s#I!%2a5MN=d6B+Pf#ekdUnxuUO#}*eNrvC(BG_CL7P$Yjg zHmA84eM0G+of?IzukrT8m#VClc_zKpHtv(-5-~#7%D>=?%^VVRFkD0Nrepj`+M=G` zpEoeGTGLAhL){;!l2Oii_)Ay1ibmMSp$TESu}jITTV}!G0^7)02v-~em zMF)u_bPOlg3+%+C=u*#W*>b8@$xnPuXVBOMKxD?#nCw!&rSy+W#&rGC_!F^x?VL@e zdDwaD5ra~U`bIXO#Y@I_FXh^``^iLs3(1(V?iv~5{LX4{)lO-giXdX+aupX0!0m7W zbINYmLjq3gV1%mzzedY%)GHU1n^RSpn2oup*yN~Yu*5l z0f_WGdROKR5Fh+pA8+0e`O~z( zydfMKO1jrN?ESm_^Csy(*!{Diu;y%@>Nz7$JUCI|zx4a=uODRbf(N&MIe zUgNj0YkTq;qNH8AIx#}5?p^@s#u>wdC72YQtUOtEdrTE}?c2)OwEJ6LaP)4vRI-;5 zTnm68ksmhAK9P-IInc)04PmM)vXdYhv+S;6O=ZECV;^ZiHevG$6Gf0V%jO~_AP7oa zB`P_eeN{E%_9WQun5mx3@YvkwSFb+yMCkrIX3yon8w4YF_1tOiN~}Ngr<1yb1Q*ng zrk~njr9;a@n6E`nkd3C4pRIw-hxjfyszn1}|5fw%O)xc7ZrJ|QP{tcx(Hqy8ULXrG zq&$%AE<{|#rv{gi;zuY2nA$DaZ@9@N*;M@W?#c1%vH{pAJX(BwY09Rv_FM+l?MtRr z^(cc>PmrU|My^gCIu*QW{QI23BdRfp@iHuuyTjzAd*`;zs958ba}cJB{6;H(cvi`y zH*LMlb(_7+%X9i0XfH1x-O_uqo3K6fBgIRBoOM=Mk7O>Z`47Dc$e8OQAY3@&`@c!m z{nkBcfam(gW2SC=#((8;`lhAMW3uFk1pI90DaBuO<9R&Phuot&o!^{`@Aa}T^q8n- zRGZCI)@nTm0bvks5dB#wt^u^+zJg{lT(KIbl>13GJe(@mGa&WRDIB6 zIqM{ukw~Xk+rqa9)Pv+`Qrenf%_*Xa&3VD8!h8H^u7G{)B!=F3s{GA|(Es&+>daRo z0w&HkIy$$8ks2`>T7b)kt>WjbX79 z@0z8!dcelcRhyEFyby{vr2r8%-Mib^HXEjuh9H>nBXG72Jnaw}*;lh=d4V_PNjJr; zLE79=KKZy<6j`XMc}k}=maM0+9k8+KnlE*iH=i)Ke6iU*^(2~b2}%kWQ)WmhvDQu6 zJl&<-{v+EISAFt58_k{j_8JQcKkUvu$x(zFlnK$^J|K7krja<@6P{>ND| zpotO?c{X6>$V)bwe6z8hmpu@XuUvFo4*Eqm-5hy&pI27{K+fc3tWNUq^2@MT&bOA{ zTa9RA*HCqR-WX(wU-)ECOj9D=jLB6(6{Bcii;31>av;J5fYh9sfW^60GuSmk@nnvy{RwD1pM7f;)~^AcBDb zpn2i2*LL0MMz`%eU#bl#XQ!Dsa@*2JHWk@fG=02y(l^LZ$8=u5jSq%km-o|Pc}=sE zOMD=Pkhkf8i`q$5;rk7!G<{SJ&wq&Kmm0HHMD|mEI=S!#dlgPAUD4BhnnqKSf5Ph=O)^Now8aJv5))2(mJn_!`xg5Qw2il{M=JHq6SSF+RhvW2fx6k>CKsUuKm^_-T!8N^c`8< zoJpj;Q_@7qe@>c^{Q;y2?$4x&1=Ed_CWM@A!cMi!pL2o%vzP7yK!D)Eyyb|@I-sTZ zG|LDs+wP?AMm~N#aV4iwl1CgQ-A=WvU!3wLX{FgvCPq~KTIe1RicZxc?*&!`h2zoJgy-VJpkNPH^>^RG;u0BU6ria7e;Or5}2{08cT?2n*MB&lWv zpJoi${THq`ezkH2z<$|R3ssC&*SzA0bv(~Rp`pn{W$_Qn%{o~9W=8+GN%^HC)pt(y zyT{Hy$d({hShl?&^22NgG8P`LI1nFOW5Yoyr%59N5J#Sh?M z#euE1Xrh%P;~IS^$0%gW^VPf6v9Y11p#}CFls+~+6t(7}H)>Qw^_Vck^zTspX$$-i zpoNzPNCzsXxFMGyk;8vWY6_O7)uBDcII`o8jV~FsjU1_29P30+kQa~8{XikFd<3wU z=an18ncaH6BA)qWmwj{<1hUt&iFwivoz621iZxq?aK#3F+3jOBW~664A7NK`p|pm6 zGJ~NQEwc&DhY4A`c~Vg$-xSlecrGJgI+BUoU${DMcGMTYtyW)84Y&m=}v%T__T9wDQPdf)r- zzLRA)#%U!7@T?*v0w8LZ`D`7d_6m~I&VMpO{t*%9KfX(>#Go~C>k-X{4P1JdKKnVM zIcH=D(9p@-0si(c3>aMc9O0S}R#8mH+NAcLGLG+S_$vsQA2wd@6&B$@6qTpte>A;I-C5I2UpQQtA!j8Qo`j%WikfSix!)1{M+*h{C_D~L0B+-cgc#v z|F&esqxED(*9K9b|B_lysoVtkIT8*0p-j11Ki=(zsF;dS21by|Vc6~3 zhY@Se)Y(w$h@Xgq6)nZqP!|b&+IHZ{AbWNEMhD*_k?`T}7}dUP3)WC0y7nfPV{UZV z=F{_(yxVq2iU)Jk;(3Ze4Jw&p{Q?YPri1N_sTZuF6j(i|cl1@Tq594X&)K_go-LJ2 z2jUTJ#SzA;gKjrsh>?@L%EN)HyXc^m$ODs&l=l3TX zLO6kj)T*AI(=NAEDVX0L)g018>JL5zASZl{JEb6mL@AEs@Z8PvIEN%(ZS`QrPWHBe z(IVMG%Hj#n^Gq~1@_e|SMqt ze2>4Za0)}|5S}&MUVN`GBo(MJMQN;SWl0#^3^38mue|7fnB7%qSUtlaG3%7E_BNxP z1M=Rtl`*|#NcUdYF!)GQS!Pqu)N;X)4{VKo#-?t#2?Nut{4&V`OfS$B`&(EwZAT=l zI3_`22#+6F%CX-rU@+yKk!Y{Vj>xB>E5lp@<)JqvewKqpqn!t(L;EqT;@DJx1|b!( zeLQ7ZP%8C;XXL`2Epqh}W_(aQE+&$RlA9Z~rTqcP3L)@9lIJ!&+yr=a@P*=zfl=O# zFxOjxeX{_vz_KFo}S);0>g4+_bv1%YK0gx(|5Hh&L+_oabGp_p; zpPM|K&FCnV7}hZhF;T3g-7LoI=E=?a*M7fx;`!R<^@#iacrHkn=v|5L-72u-guo!A zOMA1D!9YteHs28XweQTHkxqk;>YcWgmxT{Mz2TZsvbebrx8@Vyj{C^}(K>mxQ3G%N=6AW-s1Ahmk3F#k9 znrP0}dF>=_*o!fTJfH7yC4-wGo4J4|H)J}fIYbW)fzMF|+ncxeS~<6;KxKEiaI@?x zf>{33Wi8)yOmaL(!&on$!2NExMGhT@%KJj>PajSoh2MV@7tqYtCu0G!|VPR==CN!*( z+ScIG{4Fq0yrAsABJhvIN|#K+o>E^O!8v0JEPNf2-^_5r&ZUY+TR8)&zhG)njFG+z zwZ>^2!}_}6t8S63IjhpwwI;3eXP|SYN3Cya8#7?j%HnIP(pGp#^Pln8^1hedz+WOE z^F7RmHm$Pe_wnZHsu?f)!#;~zdL<(3T4F*4uca3%U9sx3H{A5$MobrP&&c8HXARRL zHAd~x#Dt)|yv0g16ks?LSOdL}OM%8l8MwAgS-09fy0mvAkzDF}m%eLA4!ZQZ={qiF z&6rM9P?y8PO0E_x$BLg7H)Bijyw}}VbCwY7o?9L2~tCxbcjc^818u%3pJrLss{mqn+LS*YO@aWmw^l9l*yqIC#yTn#81FYGQ{IW zleB&L*igEM#L&Yf$uU85t`M;{f?ac_sc)NQ<2`2bn%A^4VpE;`-?AHjf8%49-Wl%^ zrBeB-r`&f9?Wj!YGv#aeSO1YyJJlLsB<@2v6)1_6M3 zE%?q9`s&U;(<`pr1)Z(tLP&uyK)U+cPqcDuTPAh0Lxdk$kqk&j#n(i6yN&M{FE6Ek zM?GwVT?8pd8>PK*Nu$c&GMDwK666%#U&0a914Q8{p9h#MYZTAl&kf#vX;FWcs5`2u zn|#D5DhWG%cJ!(q%RfrY;1|4MN4mI%)pS`dx@kVw!%Q<@?(wx1+VCnwR&E#(|6#f{ zKYn;3#GY1f=#f0mR32L*4JMnV)f*_JeZls|uN@5{mnzGmgI37fOHlRQAM$kSJ|4UG zy3vj4wYqgMev5vbalBWHFJ;qOUu*R7mGMhYYnh(dN~cXDFcN&1a_s0m&|Y5sUN`Z> z1lm=6VP{T=ME>JT;A;H!MkF<7eAgv4;7|c1HIXAaNLWwm@J?$Q zT+!R`*XLHQN=TdH105K@&uX#z)jg8C#6iOHn292CfpSC5Nk5mzvyK7HxStG0D+>gx z?H_o3)@H*x+h3fB&(XfFbBbN6MALx36wUN=z{jS4HU7O}jWQ!rknKtm7%bS*-)ndB zFR2mK3NYPl&Ig^!89SQhHTnFZcJgdtBqFv~6d4%l5c!gHuy$2hR#GNJ9g_A6wcsIQ zd`ctDx2y!E(@Ku!#tVktbI&E@2pTI!8)_3Dib+%p&SVa9QPAU| zb{ow0Xg}LpoFt-~iPECQ`0FR;=#N9B+5E(-Z@ok?ZZ^A}0A3i*H(}0Kg8RLrgp(GF zIU(gX*v#`Ry94d)LlyT-(9o48lgmLgfSD~0^4>LkRy|2Bun501NbL2>IXuU2^-%67 zYj602we26~CL1aQdIIeyFi`*;)2%iNAk}da8SwG~PX5yNNS57%2^U|3!Lk@0H91}{ zM~@LxEx5B*OB_0zMC&diCq6ug^n9A+8_D9YdBt+bW}?6$u1H0A80CPGg{>#D^8y1# zkS7nM>Grl|T{_4)-|Gh*%C;+frVWN;04 zax~Em-yCS-Vu%rwtujX4ss1#U-NNDWs>d2M0~HJ9-ZcPm^3Y+u6qgNkzNXh{*~D8% zSNkhz7-vkEljSbZ{&VW8{9^1j%EL7XF>;Io8)!FeeNpZyo+9q|m0Kb>D*9y`vXQ7vTIv&Bg_J%`u{ z3*erFkTaV9ZCRG~Avk{_?nU zc9bzD#WVt7flLyB+>y9K$xWQFw7k2GAiN5@OT()NpfoMtfA}K+RS*YbUel~!0~1#Y z{ZsX;iBVF)4zl9f*cfy%Y=t+S0sJQJ{EAC9@nK&t0u8<#V-IrCA9 zZpbGaI9tA1XNHdo#qW|dq52J^3C$lsnqd4)njn0+aneL>eCvM3YU)i`ucY%U_@6=T zh^Gu)-5FAKYexi^wToBLW~9qOpE_lY3U$(q37-N!c2+b&4f0N!QT8m~Eph?J83Lsz z$&#r|tO&*sDjey<{b^{AaYX4(mdT@8hShrz?d_MccS@R=nxt{x4QT>|DgS5E1oYjK zCd_{~X#(+|ktT|MMVbf%d9u05-_Lt}7N@sPn&_{a02jXhx}*s*0||nlt3UlWlO~|Q zg*1`+N026l8&g$3-rh*ew*T1Ad+Aw~wz9b^bOOYz!^)TU=w-S`O#FkOd)c~0CUJ3R z{fS~4IoX@&L%~nm!XYRi9F+QY&c;B+t+} zCPVo9`Kxl-V zvZ|UV47B$`Y+p2Yo#J&R>D%FC1VnNeAM98M{mu${0`5Bdyw&Z=qXO$YuJYlp1v@3o zH7kfSH&x=6sCRX$W6J{H2sK6`33sNdND>y)EF;N25m!nxe}Ad$b8^6T_m_2AKCg*F z%yfdpYzXUEwB8H;1qWT)MsWdno=zY5KJqr|4iKiJvTYXsy_MqP^wA_5bKMKM=yr-7 z2-Q60%6o+t8kxp4JGcym8w@34uX^Ml;{oN5@cL~qB6j#fZ>#UN37J&J7!xMCog?L?ngTV*Bd~K)aN6QgOcN#^m`*fPMeQ<54V@x46F0cIyncAxfickV}=``r${qn(0Nwmjn}nV+)U?X^If2KfW7q*G$J>2s{Mz4JkjV1{+F+vDmW2}0oXX7uW1JbAd=%$lq zg0_rH$yqX0;pc2G{64OPr+*O=IUZ5|2q^*bBc-_0+G4i08GtPwv{ey$RkJhZqQXg^ zmDNKpy{fOH3E`SgjRx2W(-DOE4}-p`-VV4%Ghj-$Z-Y}hZzzEU0z;kZsnx1Z9IT{K z{ESX7Dpzja9BP6M`-f>F2PCp@uyzXtm%AD;3m(LQK- z5#6L}4I8SEy-hI)_2&p9>}~F3EkauHCR~cUs$I+o-QPzzR`?#EZk)ej6z7hOI)Bqf zZT*B@3#C|XSP4_ELcJW7{qDQqnNDMJLlvUO7H+L_Q=8-=j5`3CoMV{1CZ!&PJE z4OJ_)LVs*Kf=t71Pi}uaNIUy}Y)&kgQ>=rcGj@|daynvd6HWYTDM<&5*W10t60%hv zoe%BN{dc#}YR!cc2Gpyh+jh$SXwTd93d~kaxZQ%er0Oa)i7*U!m+{JE?AE%zr%vtz zc)+Kg`FP?3G;s_-3e&h@1Q$Te*w}RL4QOusvpk;C2S#)^CN}F~!|s_*&`l>8#V8EB zeX9%O&18FM4+a6sJpN6=!6ewgL{Fi);S+MoKcYNCUwTtEgXh+xF(>|fX@F#WIg-UQ zu;#n-@TZm18=JJbWv6{WSgPQgxAPQ!ucLAF}VuUa(