QueryTrait

This commit is contained in:
Chris Tsang 2021-06-01 18:08:18 +08:00
parent ba1eef1671
commit 89c743d5a7
7 changed files with 45 additions and 26 deletions

View File

@ -1,7 +1,7 @@
use crate::{ use crate::{
ActiveModelOf, ActiveModelTrait, ColumnTrait, Insert, ModelTrait, OneOrManyActiveModel, ActiveModelOf, ActiveModelTrait, ColumnTrait, Insert, ModelTrait, OneOrManyActiveModel,
PrimaryKeyOfModel, PrimaryKeyTrait, SelectHelper, RelationBuilder, RelationTrait, RelationType, PrimaryKeyOfModel, PrimaryKeyTrait, RelationBuilder, RelationTrait, RelationType, Select,
Select, SelectHelper,
}; };
use sea_query::{Iden, IntoValueTuple}; use sea_query::{Iden, IntoValueTuple};
use std::fmt::Debug; use std::fmt::Debug;
@ -120,7 +120,7 @@ pub trait EntityTrait: EntityName {
fn insert_many<A, I>(models: I) -> Insert<A> fn insert_many<A, I>(models: I) -> Insert<A>
where where
A: ActiveModelTrait + ActiveModelOf<Self>, A: ActiveModelTrait + ActiveModelOf<Self>,
I: IntoIterator<Item = A> I: IntoIterator<Item = A>,
{ {
Insert::new().many(models) Insert::new().many(models)
} }
@ -129,7 +129,7 @@ pub trait EntityTrait: EntityName {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use crate::tests_cfg::cake; use crate::tests_cfg::cake;
use crate::{EntityTrait, Val}; use crate::{EntityTrait, QueryTrait, Val};
use sea_query::PostgresQueryBuilder; use sea_query::PostgresQueryBuilder;
#[test] #[test]

View File

@ -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 core::marker::PhantomData;
use sea_query::{Iden, IntoIden, JoinType}; use sea_query::{Iden, IntoIden, JoinType};
use std::fmt::Debug; use std::fmt::Debug;

View File

@ -2,7 +2,6 @@ mod connector;
mod database; mod database;
mod driver; mod driver;
pub mod entity; pub mod entity;
mod operation;
mod query; mod query;
pub mod tests_cfg; pub mod tests_cfg;
mod util; mod util;
@ -11,7 +10,6 @@ pub use connector::*;
pub use database::*; pub use database::*;
pub use driver::*; pub use driver::*;
pub use entity::*; pub use entity::*;
pub use operation::*;
pub use query::*; pub use query::*;
pub use sea_orm_macros::{ pub use sea_orm_macros::{

View File

@ -1,6 +1,6 @@
use crate::{ActiveModelOf, ActiveModelTrait, EntityTrait, Iterable, Statement}; use crate::{ActiveModelOf, ActiveModelTrait, EntityTrait, Iterable, QueryTrait};
use core::marker::PhantomData; use core::marker::PhantomData;
use sea_query::{InsertStatement, IntoIden, QueryBuilder}; use sea_query::{InsertStatement, IntoIden};
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub struct Insert<A> pub struct Insert<A>
@ -65,35 +65,31 @@ where
} }
self self
} }
}
/// Get a mutable ref to the query builder impl<A> QueryTrait for Insert<A>
pub fn query(&mut self) -> &mut InsertStatement { where
A: ActiveModelTrait,
{
type QueryStatementBuilder = InsertStatement;
fn query(&mut self) -> &mut InsertStatement {
&mut self.query &mut self.query
} }
/// Get an immutable ref to the query builder fn as_query(&self) -> &InsertStatement {
pub fn as_query(&self) -> &InsertStatement {
&self.query &self.query
} }
/// Take ownership of the query builder fn into_query(self) -> InsertStatement {
pub fn into_query(self) -> InsertStatement {
self.query self.query
} }
/// Build the query as [`Statement`]
pub fn build<B>(&self, builder: B) -> Statement
where
B: QueryBuilder,
{
self.as_query().build(builder).into()
}
} }
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use crate::tests_cfg::cake; use crate::tests_cfg::cake;
use crate::{Insert, Val}; use crate::{Insert, QueryTrait, Val};
use sea_query::PostgresQueryBuilder; use sea_query::PostgresQueryBuilder;
#[test] #[test]

View File

@ -1,6 +1,6 @@
use crate::{ use crate::{
ColumnTrait, EntityTrait, Iterable, ModelTrait, PrimaryKeyOfModel, SelectHelper, Related, ColumnTrait, EntityTrait, Iterable, ModelTrait, PrimaryKeyOfModel, Related, Select,
Select, SelectTwo, SelectHelper, SelectTwo,
}; };
pub use sea_query::JoinType; pub use sea_query::JoinType;

View File

@ -6,6 +6,7 @@ mod join;
mod json; mod json;
mod result; mod result;
mod select; mod select;
mod traits;
// pub use combine::*; // pub use combine::*;
pub use helper::*; pub use helper::*;
@ -15,3 +16,4 @@ pub use join::*;
pub use json::*; pub use json::*;
pub use result::*; pub use result::*;
pub use select::*; pub use select::*;
pub use traits::*;

23
src/query/traits.rs Normal file
View File

@ -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<B>(&self, builder: B) -> Statement
where
B: QueryBuilder,
{
self.as_query().build(builder).into()
}
}