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()
+ }
+}