From 00f2e125dfdfb25c32b1907c0813b5bb88c85c73 Mon Sep 17 00:00:00 2001 From: Chris Tsang Date: Sun, 9 May 2021 19:03:54 +0800 Subject: [PATCH] Redesign EntityName + entity::prelude --- examples/sqlx-mysql/src/example_cake.rs | 21 ++++++++++----------- examples/sqlx-mysql/src/example_fruit.rs | 20 ++++++++++---------- src/entity/base.rs | 8 +++++--- src/entity/column.rs | 6 +++--- src/entity/mod.rs | 2 ++ src/entity/prelude.rs | 5 +++++ src/entity/primary_key.rs | 4 ++-- src/lib.rs | 2 +- src/query/select.rs | 15 +++++++++------ src/tests_cfg/cake.rs | 21 ++++++++++----------- src/tests_cfg/fruit.rs | 20 ++++++++++---------- 11 files changed, 67 insertions(+), 57 deletions(-) create mode 100644 src/entity/prelude.rs diff --git a/examples/sqlx-mysql/src/example_cake.rs b/examples/sqlx-mysql/src/example_cake.rs index ee8cc5f4..f532770d 100644 --- a/examples/sqlx-mysql/src/example_cake.rs +++ b/examples/sqlx-mysql/src/example_cake.rs @@ -1,7 +1,4 @@ -use sea_orm::{ - ColumnTrait, ColumnType, EntityTrait, EnumIter, Iden, IdenStatic, PrimaryKeyOfModel, - ModelTrait, QueryResult, Related, RelationDef, RelationTrait, Select, TypeErr, Value, PrimaryKeyTrait -}; +use sea_orm::entity::prelude::*; #[derive(Copy, Clone, Default, Debug)] pub struct Entity; @@ -39,11 +36,7 @@ impl EntityTrait for Entity { } // TODO: implement with derive macro -impl Iden for Entity { - fn unquoted(&self, s: &mut dyn std::fmt::Write) { - write!(s, "{}", self.as_str()).unwrap(); - } -} +impl EntityName for Entity {} // TODO: implement with derive macro impl IdenStatic for Entity { @@ -52,6 +45,13 @@ impl IdenStatic for Entity { } } +// TODO: implement with derive macro +impl Iden for Entity { + fn unquoted(&self, s: &mut dyn std::fmt::Write) { + write!(s, "{}", self.as_str()).unwrap(); + } +} + // TODO: implement with derive macro impl ModelTrait for Model { type Column = Column; @@ -96,7 +96,7 @@ impl IdenStatic for Column { } impl ColumnTrait for Column { - type Entity = Entity; + type EntityName = Entity; fn def(&self) -> ColumnType { match self { @@ -106,7 +106,6 @@ impl ColumnTrait for Column { } } - // TODO: implement with derive macro impl Iden for PrimaryKey { fn unquoted(&self, s: &mut dyn std::fmt::Write) { diff --git a/examples/sqlx-mysql/src/example_fruit.rs b/examples/sqlx-mysql/src/example_fruit.rs index ac8b9557..5164e255 100644 --- a/examples/sqlx-mysql/src/example_fruit.rs +++ b/examples/sqlx-mysql/src/example_fruit.rs @@ -1,7 +1,4 @@ -use sea_orm::{ - ColumnTrait, ColumnType, EntityTrait, EnumIter, Iden, IdenStatic, PrimaryKeyOfModel, - ModelTrait, QueryResult, RelationDef, RelationTrait, TypeErr, Value, PrimaryKeyTrait -}; +use sea_orm::entity::prelude::*; #[derive(Copy, Clone, Default, Debug)] pub struct Entity; @@ -39,11 +36,7 @@ impl EntityTrait for Entity { } // TODO: implement with derive macro -impl Iden for Entity { - fn unquoted(&self, s: &mut dyn std::fmt::Write) { - write!(s, "{}", self.as_str()).unwrap(); - } -} +impl EntityName for Entity {} // TODO: implement with derive macro impl IdenStatic for Entity { @@ -52,6 +45,13 @@ impl IdenStatic for Entity { } } +// TODO: implement with derive macro +impl Iden for Entity { + fn unquoted(&self, s: &mut dyn std::fmt::Write) { + write!(s, "{}", self.as_str()).unwrap(); + } +} + // TODO: implement with derive macro impl ModelTrait for Model { type Column = Column; @@ -100,7 +100,7 @@ impl IdenStatic for Column { } impl ColumnTrait for Column { - type Entity = Entity; + type EntityName = Entity; fn def(&self) -> ColumnType { match self { diff --git a/src/entity/base.rs b/src/entity/base.rs index 2f36a515..a5db1611 100644 --- a/src/entity/base.rs +++ b/src/entity/base.rs @@ -1,6 +1,6 @@ use crate::{ - ColumnTrait, Connection, Database, ModelTrait, QueryErr, RelationBuilder, - RelationTrait, RelationType, Select, PrimaryKeyTrait + ColumnTrait, Connection, Database, ModelTrait, PrimaryKeyTrait, QueryErr, RelationBuilder, + RelationTrait, RelationType, Select, }; use async_trait::async_trait; use sea_query::{Expr, Iden, IntoIden, Value}; @@ -11,8 +11,10 @@ pub trait IdenStatic: Iden + Copy + Debug + 'static { fn as_str(&self) -> &str; } +pub trait EntityName: IdenStatic + Default {} + #[async_trait] -pub trait EntityTrait: IdenStatic + Default { +pub trait EntityTrait: EntityName { type Model: ModelTrait; type Column: ColumnTrait + Iterable; diff --git a/src/entity/column.rs b/src/entity/column.rs index b555db38..5d38befc 100644 --- a/src/entity/column.rs +++ b/src/entity/column.rs @@ -1,4 +1,4 @@ -use crate::{IdenStatic, EntityTrait}; +use crate::{EntityName, IdenStatic}; pub use sea_query::ColumnType; use sea_query::{Expr, Iden, SimpleExpr, Value}; @@ -16,12 +16,12 @@ macro_rules! bind_oper { } pub trait ColumnTrait: IdenStatic { - type Entity: EntityTrait; + type EntityName: EntityName; fn def(&self) -> ColumnType; fn as_iden(&self) -> Rc { - Rc::new(Self::Entity::default()) as Rc + Rc::new(Self::EntityName::default()) as Rc } bind_oper!(eq); diff --git a/src/entity/mod.rs b/src/entity/mod.rs index ff9ab047..06b63301 100644 --- a/src/entity/mod.rs +++ b/src/entity/mod.rs @@ -2,6 +2,7 @@ mod base; mod column; mod identity; mod model; +pub mod prelude; mod primary_key; mod relation; @@ -9,5 +10,6 @@ pub use base::*; pub use column::*; pub use identity::*; pub use model::*; +// pub use prelude::*; pub use primary_key::*; pub use relation::*; diff --git a/src/entity/prelude.rs b/src/entity/prelude.rs new file mode 100644 index 00000000..a02650c9 --- /dev/null +++ b/src/entity/prelude.rs @@ -0,0 +1,5 @@ +pub use crate::{ + ColumnTrait, ColumnType, EntityName, EntityTrait, EnumIter, Iden, IdenStatic, ModelTrait, + PrimaryKeyOfModel, PrimaryKeyTrait, QueryResult, Related, RelationDef, RelationTrait, Select, + TypeErr, Value, +}; diff --git a/src/entity/primary_key.rs b/src/entity/primary_key.rs index 744d7d45..fc9641e5 100644 --- a/src/entity/primary_key.rs +++ b/src/entity/primary_key.rs @@ -1,4 +1,4 @@ -use super::{ModelTrait, IdenStatic}; +use super::{IdenStatic, ModelTrait}; pub trait PrimaryKeyTrait: IdenStatic {} @@ -7,4 +7,4 @@ where M: ModelTrait, { fn into_column(self) -> M::Column; -} \ No newline at end of file +} diff --git a/src/lib.rs b/src/lib.rs index 38e2f423..295ad3c8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,7 +1,7 @@ mod connector; mod database; mod driver; -mod entity; +pub mod entity; mod query; pub mod tests_cfg; mod util; diff --git a/src/query/select.rs b/src/query/select.rs index fea847c1..70870109 100644 --- a/src/query/select.rs +++ b/src/query/select.rs @@ -1,4 +1,7 @@ -use crate::{EntityTrait, Identity, Iterable, PrimaryKeyOfModel, RelationDef, RelationTrait, Statement, Related}; +use crate::{ + EntityTrait, Identity, Iterable, PrimaryKeyOfModel, Related, RelationDef, RelationTrait, + Statement, +}; use core::fmt::Debug; use core::marker::PhantomData; pub use sea_query::JoinType; @@ -88,7 +91,10 @@ where } pub fn belongs_to(self, model: &R::Model) -> Self - where R: EntityTrait + Related, R::PrimaryKey: PrimaryKeyOfModel { + where + R: EntityTrait + Related, + R::PrimaryKey: PrimaryKeyOfModel, + { use crate::{ColumnTrait, ModelTrait}; if let Some(key) = R::PrimaryKey::iter().next() { @@ -249,16 +255,13 @@ mod tests { #[test] fn join_5() { - let cake_model = cake::Model { id: 12, name: "".to_owned(), }; assert_eq!( - cake_model.find_fruit() - .build(MysqlQueryBuilder) - .to_string(), + cake_model.find_fruit().build(MysqlQueryBuilder).to_string(), [ "SELECT `fruit`.`id`, `fruit`.`name`, `fruit`.`cake_id` FROM `fruit`", "INNER JOIN `cake` ON `cake`.`id` = `fruit`.`cake_id`", diff --git a/src/tests_cfg/cake.rs b/src/tests_cfg/cake.rs index 23878a0e..456074b6 100644 --- a/src/tests_cfg/cake.rs +++ b/src/tests_cfg/cake.rs @@ -1,7 +1,4 @@ -use crate::{ - ColumnTrait, ColumnType, EntityTrait, EnumIter, Iden, IdenStatic, PrimaryKeyOfModel, - ModelTrait, QueryResult, Related, RelationDef, RelationTrait, Select, TypeErr, Value, PrimaryKeyTrait -}; +use crate::entity::prelude::*; #[derive(Copy, Clone, Default, Debug)] pub struct Entity; @@ -39,11 +36,7 @@ impl EntityTrait for Entity { } // TODO: implement with derive macro -impl Iden for Entity { - fn unquoted(&self, s: &mut dyn std::fmt::Write) { - write!(s, "{}", self.as_str()).unwrap(); - } -} +impl EntityName for Entity {} // TODO: implement with derive macro impl IdenStatic for Entity { @@ -52,6 +45,13 @@ impl IdenStatic for Entity { } } +// TODO: implement with derive macro +impl Iden for Entity { + fn unquoted(&self, s: &mut dyn std::fmt::Write) { + write!(s, "{}", self.as_str()).unwrap(); + } +} + // TODO: implement with derive macro impl ModelTrait for Model { type Column = Column; @@ -96,7 +96,7 @@ impl IdenStatic for Column { } impl ColumnTrait for Column { - type Entity = Entity; + type EntityName = Entity; fn def(&self) -> ColumnType { match self { @@ -106,7 +106,6 @@ impl ColumnTrait for Column { } } - // TODO: implement with derive macro impl Iden for PrimaryKey { fn unquoted(&self, s: &mut dyn std::fmt::Write) { diff --git a/src/tests_cfg/fruit.rs b/src/tests_cfg/fruit.rs index 9d7dd0a1..e83834d2 100644 --- a/src/tests_cfg/fruit.rs +++ b/src/tests_cfg/fruit.rs @@ -1,7 +1,4 @@ -use crate::{ - ColumnTrait, ColumnType, EntityTrait, EnumIter, Iden, IdenStatic, PrimaryKeyOfModel, - ModelTrait, QueryResult, RelationDef, RelationTrait, TypeErr, Value, PrimaryKeyTrait -}; +use crate::entity::prelude::*; #[derive(Copy, Clone, Default, Debug)] pub struct Entity; @@ -39,11 +36,7 @@ impl EntityTrait for Entity { } // TODO: implement with derive macro -impl Iden for Entity { - fn unquoted(&self, s: &mut dyn std::fmt::Write) { - write!(s, "{}", self.as_str()).unwrap(); - } -} +impl EntityName for Entity {} // TODO: implement with derive macro impl IdenStatic for Entity { @@ -52,6 +45,13 @@ impl IdenStatic for Entity { } } +// TODO: implement with derive macro +impl Iden for Entity { + fn unquoted(&self, s: &mut dyn std::fmt::Write) { + write!(s, "{}", self.as_str()).unwrap(); + } +} + // TODO: implement with derive macro impl ModelTrait for Model { type Column = Column; @@ -100,7 +100,7 @@ impl IdenStatic for Column { } impl ColumnTrait for Column { - type Entity = Entity; + type EntityName = Entity; fn def(&self) -> ColumnType { match self {