diff --git a/src/entity/base.rs b/src/entity/base.rs index 1c3478c6..6926b753 100644 --- a/src/entity/base.rs +++ b/src/entity/base.rs @@ -1,7 +1,7 @@ use crate::{ ActiveModelOf, ActiveModelTrait, ColumnTrait, Insert, ModelTrait, OneOrManyActiveModel, - PrimaryKeyOfModel, PrimaryKeyTrait, SelectHelper, RelationBuilder, RelationTrait, RelationType, - Select, + PrimaryKeyOfModel, PrimaryKeyTrait, RelationBuilder, RelationTrait, RelationType, Select, + SelectHelper, }; use sea_query::{Iden, IntoValueTuple}; use std::fmt::Debug; @@ -120,7 +120,7 @@ pub trait EntityTrait: EntityName { fn insert_many(models: I) -> Insert where A: ActiveModelTrait + ActiveModelOf, - I: IntoIterator + I: IntoIterator, { Insert::new().many(models) } @@ -129,7 +129,7 @@ pub trait EntityTrait: EntityName { #[cfg(test)] mod tests { use crate::tests_cfg::cake; - use crate::{EntityTrait, Val}; + use crate::{EntityTrait, QueryTrait, Val}; use sea_query::PostgresQueryBuilder; #[test] diff --git a/src/entity/relation.rs b/src/entity/relation.rs index 3377cc46..b0c587c3 100644 --- a/src/entity/relation.rs +++ b/src/entity/relation.rs @@ -1,4 +1,4 @@ -use crate::{EntityTrait, Identity, IntoIdentity, Iterable, SelectHelper, Select}; +use crate::{EntityTrait, Identity, IntoIdentity, Iterable, Select, SelectHelper}; use core::marker::PhantomData; use sea_query::{Iden, IntoIden, JoinType}; use std::fmt::Debug; diff --git a/src/lib.rs b/src/lib.rs index c11817bc..b44ee556 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,7 +2,6 @@ mod connector; mod database; mod driver; pub mod entity; -mod operation; mod query; pub mod tests_cfg; mod util; @@ -11,7 +10,6 @@ pub use connector::*; pub use database::*; pub use driver::*; pub use entity::*; -pub use operation::*; pub use query::*; pub use sea_orm_macros::{ diff --git a/src/query/insert.rs b/src/query/insert.rs index 9242422e..48208f92 100644 --- a/src/query/insert.rs +++ b/src/query/insert.rs @@ -1,6 +1,6 @@ -use crate::{ActiveModelOf, ActiveModelTrait, EntityTrait, Iterable, Statement}; +use crate::{ActiveModelOf, ActiveModelTrait, EntityTrait, Iterable, QueryTrait}; use core::marker::PhantomData; -use sea_query::{InsertStatement, IntoIden, QueryBuilder}; +use sea_query::{InsertStatement, IntoIden}; #[derive(Clone, Debug)] pub struct Insert @@ -65,35 +65,31 @@ where } self } +} - /// Get a mutable ref to the query builder - pub fn query(&mut self) -> &mut InsertStatement { +impl QueryTrait for Insert +where + A: ActiveModelTrait, +{ + type QueryStatementBuilder = InsertStatement; + + fn query(&mut self) -> &mut InsertStatement { &mut self.query } - /// Get an immutable ref to the query builder - pub fn as_query(&self) -> &InsertStatement { + fn as_query(&self) -> &InsertStatement { &self.query } - /// Take ownership of the query builder - pub fn into_query(self) -> InsertStatement { + fn into_query(self) -> InsertStatement { self.query } - - /// Build the query as [`Statement`] - pub fn build(&self, builder: B) -> Statement - where - B: QueryBuilder, - { - self.as_query().build(builder).into() - } } #[cfg(test)] mod tests { use crate::tests_cfg::cake; - use crate::{Insert, Val}; + use crate::{Insert, QueryTrait, Val}; use sea_query::PostgresQueryBuilder; #[test] diff --git a/src/query/join.rs b/src/query/join.rs index 7f841131..cbbc65bc 100644 --- a/src/query/join.rs +++ b/src/query/join.rs @@ -1,6 +1,6 @@ use crate::{ - ColumnTrait, EntityTrait, Iterable, ModelTrait, PrimaryKeyOfModel, SelectHelper, Related, - Select, SelectTwo, + ColumnTrait, EntityTrait, Iterable, ModelTrait, PrimaryKeyOfModel, Related, Select, + SelectHelper, SelectTwo, }; pub use sea_query::JoinType; diff --git a/src/query/mod.rs b/src/query/mod.rs index e9657ab9..87e624c7 100644 --- a/src/query/mod.rs +++ b/src/query/mod.rs @@ -6,6 +6,7 @@ mod join; mod json; mod result; mod select; +mod traits; // pub use combine::*; pub use helper::*; @@ -15,3 +16,4 @@ pub use join::*; pub use json::*; pub use result::*; pub use select::*; +pub use traits::*; diff --git a/src/query/traits.rs b/src/query/traits.rs new file mode 100644 index 00000000..73b00311 --- /dev/null +++ b/src/query/traits.rs @@ -0,0 +1,23 @@ +use crate::Statement; +use sea_query::{QueryBuilder, QueryStatementBuilder}; + +pub trait QueryTrait { + type QueryStatementBuilder: QueryStatementBuilder; + + /// Get a mutable ref to the query builder + fn query(&mut self) -> &mut Self::QueryStatementBuilder; + + /// Get an immutable ref to the query builder + fn as_query(&self) -> &Self::QueryStatementBuilder; + + /// Take ownership of the query builder + fn into_query(self) -> Self::QueryStatementBuilder; + + /// Build the query as [`Statement`] + fn build(&self, builder: B) -> Statement + where + B: QueryBuilder, + { + self.as_query().build(builder).into() + } +}