impl QueryTrait for Select

This commit is contained in:
Chris Tsang 2021-06-01 18:19:29 +08:00
parent 89c743d5a7
commit c45a4bb376
7 changed files with 46 additions and 55 deletions

View File

@ -1,4 +1,4 @@
use sea_orm::{ColumnTrait, Database, EntityTrait, FromQueryResult, QueryErr, QueryHelper}; use sea_orm::{ColumnTrait, Database, EntityTrait, FromQueryResult, QueryErr, SelectHelper};
mod example_cake; mod example_cake;
mod example_cake_filling; mod example_cake_filling;

View File

@ -37,7 +37,7 @@ pub trait EntityTrait: EntityName {
} }
/// ``` /// ```
/// use sea_orm::{ColumnTrait, EntityTrait, tests_cfg::cake, sea_query::PostgresQueryBuilder}; /// use sea_orm::{ColumnTrait, EntityTrait, QueryTrait, tests_cfg::cake, sea_query::PostgresQueryBuilder};
/// ///
/// assert_eq!( /// assert_eq!(
/// cake::Entity::find() /// cake::Entity::find()
@ -52,7 +52,7 @@ pub trait EntityTrait: EntityName {
/// Find a model by primary key /// Find a model by primary key
/// ``` /// ```
/// use sea_orm::{ColumnTrait, EntityTrait, tests_cfg::cake, sea_query::PostgresQueryBuilder}; /// use sea_orm::{ColumnTrait, EntityTrait, QueryTrait, tests_cfg::cake, sea_query::PostgresQueryBuilder};
/// ///
/// assert_eq!( /// assert_eq!(
/// cake::Entity::find_by(11) /// cake::Entity::find_by(11)
@ -63,7 +63,7 @@ pub trait EntityTrait: EntityName {
/// ``` /// ```
/// Find by composite key /// Find by composite key
/// ``` /// ```
/// use sea_orm::{ColumnTrait, EntityTrait, tests_cfg::cake_filling, sea_query::PostgresQueryBuilder}; /// use sea_orm::{ColumnTrait, EntityTrait, QueryTrait, tests_cfg::cake_filling, sea_query::PostgresQueryBuilder};
/// ///
/// assert_eq!( /// assert_eq!(
/// cake_filling::Entity::find_by((2, 3)) /// cake_filling::Entity::find_by((2, 3))

View File

@ -57,7 +57,7 @@ pub trait ColumnTrait: IdenStatic + Iterable {
bind_oper!(lte); bind_oper!(lte);
/// ``` /// ```
/// use sea_orm::{ColumnTrait, EntityTrait, SelectHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder}; /// use sea_orm::{ColumnTrait, EntityTrait, QueryTrait, SelectHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder};
/// ///
/// assert_eq!( /// assert_eq!(
/// cake::Entity::find() /// cake::Entity::find()
@ -75,7 +75,7 @@ pub trait ColumnTrait: IdenStatic + Iterable {
} }
/// ``` /// ```
/// use sea_orm::{ColumnTrait, EntityTrait, SelectHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder}; /// use sea_orm::{ColumnTrait, EntityTrait, QueryTrait, SelectHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder};
/// ///
/// assert_eq!( /// assert_eq!(
/// cake::Entity::find() /// cake::Entity::find()
@ -93,7 +93,7 @@ pub trait ColumnTrait: IdenStatic + Iterable {
} }
/// ``` /// ```
/// use sea_orm::{ColumnTrait, EntityTrait, SelectHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder}; /// use sea_orm::{ColumnTrait, EntityTrait, QueryTrait, SelectHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder};
/// ///
/// assert_eq!( /// assert_eq!(
/// cake::Entity::find() /// cake::Entity::find()
@ -108,7 +108,7 @@ pub trait ColumnTrait: IdenStatic + Iterable {
} }
/// ``` /// ```
/// use sea_orm::{ColumnTrait, EntityTrait, SelectHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder}; /// use sea_orm::{ColumnTrait, EntityTrait, QueryTrait, SelectHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder};
/// ///
/// assert_eq!( /// assert_eq!(
/// cake::Entity::find() /// cake::Entity::find()
@ -123,7 +123,7 @@ pub trait ColumnTrait: IdenStatic + Iterable {
} }
/// ``` /// ```
/// use sea_orm::{ColumnTrait, EntityTrait, SelectHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder}; /// use sea_orm::{ColumnTrait, EntityTrait, QueryTrait, SelectHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder};
/// ///
/// assert_eq!( /// assert_eq!(
/// cake::Entity::find() /// cake::Entity::find()
@ -139,7 +139,7 @@ pub trait ColumnTrait: IdenStatic + Iterable {
} }
/// ``` /// ```
/// use sea_orm::{ColumnTrait, EntityTrait, SelectHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder}; /// use sea_orm::{ColumnTrait, EntityTrait, QueryTrait, SelectHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder};
/// ///
/// assert_eq!( /// assert_eq!(
/// cake::Entity::find() /// cake::Entity::find()
@ -155,7 +155,7 @@ pub trait ColumnTrait: IdenStatic + Iterable {
} }
/// ``` /// ```
/// use sea_orm::{ColumnTrait, EntityTrait, SelectHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder}; /// use sea_orm::{ColumnTrait, EntityTrait, QueryTrait, SelectHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder};
/// ///
/// assert_eq!( /// assert_eq!(
/// cake::Entity::find() /// cake::Entity::find()

View File

@ -1,4 +1,4 @@
use crate::{EntityTrait, IntoSimpleExpr, Iterable, Select, SelectTwo}; use crate::{EntityTrait, IntoSimpleExpr, Iterable, QueryTrait, Select, SelectTwo};
use core::marker::PhantomData; use core::marker::PhantomData;
pub use sea_query::JoinType; pub use sea_query::JoinType;
use sea_query::{Alias, ColumnRef, Iden, SelectExpr, SelectStatement, SimpleExpr}; use sea_query::{Alias, ColumnRef, Iden, SelectExpr, SelectStatement, SimpleExpr};
@ -71,7 +71,7 @@ where
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use crate::tests_cfg::{cake, fruit}; use crate::tests_cfg::{cake, fruit};
use crate::{ColumnTrait, EntityTrait, SelectHelper}; use crate::{ColumnTrait, EntityTrait, QueryTrait, SelectHelper};
use sea_query::MysqlQueryBuilder; use sea_query::MysqlQueryBuilder;
#[test] #[test]

View File

@ -14,7 +14,7 @@ pub trait SelectHelper: Sized {
/// Add a select column /// Add a select column
/// ``` /// ```
/// use sea_orm::{ColumnTrait, EntityTrait, SelectHelper, tests_cfg::cake, sea_query::PostgresQueryBuilder}; /// use sea_orm::{ColumnTrait, EntityTrait, QueryTrait, SelectHelper, tests_cfg::cake, sea_query::PostgresQueryBuilder};
/// ///
/// assert_eq!( /// assert_eq!(
/// cake::Entity::find() /// cake::Entity::find()
@ -35,7 +35,7 @@ pub trait SelectHelper: Sized {
/// Add a select column with alias /// Add a select column with alias
/// ``` /// ```
/// use sea_orm::{ColumnTrait, EntityTrait, SelectHelper, tests_cfg::cake, sea_query::PostgresQueryBuilder}; /// use sea_orm::{ColumnTrait, EntityTrait, QueryTrait, SelectHelper, tests_cfg::cake, sea_query::PostgresQueryBuilder};
/// ///
/// assert_eq!( /// assert_eq!(
/// cake::Entity::find() /// cake::Entity::find()
@ -59,7 +59,7 @@ pub trait SelectHelper: Sized {
/// Add an AND WHERE expression /// Add an AND WHERE expression
/// ``` /// ```
/// use sea_orm::{ColumnTrait, EntityTrait, SelectHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder}; /// use sea_orm::{ColumnTrait, EntityTrait, QueryTrait, SelectHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder};
/// ///
/// assert_eq!( /// assert_eq!(
/// cake::Entity::find() /// cake::Entity::find()
@ -73,7 +73,7 @@ pub trait SelectHelper: Sized {
/// ///
/// Add a condition tree. /// Add a condition tree.
/// ``` /// ```
/// use sea_orm::{Condition, ColumnTrait, EntityTrait, SelectHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder}; /// use sea_orm::{Condition, ColumnTrait, EntityTrait, QueryTrait, SelectHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder};
/// ///
/// assert_eq!( /// assert_eq!(
/// cake::Entity::find() /// cake::Entity::find()
@ -97,7 +97,7 @@ pub trait SelectHelper: Sized {
/// Add a group by column /// Add a group by column
/// ``` /// ```
/// use sea_orm::{ColumnTrait, EntityTrait, SelectHelper, tests_cfg::cake, sea_query::PostgresQueryBuilder}; /// use sea_orm::{ColumnTrait, EntityTrait, QueryTrait, SelectHelper, tests_cfg::cake, sea_query::PostgresQueryBuilder};
/// ///
/// assert_eq!( /// assert_eq!(
/// cake::Entity::find() /// cake::Entity::find()
@ -119,7 +119,7 @@ pub trait SelectHelper: Sized {
/// Add an order_by expression /// Add an order_by expression
/// ``` /// ```
/// use sea_orm::{EntityTrait, Order, SelectHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder}; /// use sea_orm::{EntityTrait, Order, QueryTrait, SelectHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder};
/// ///
/// assert_eq!( /// assert_eq!(
/// cake::Entity::find() /// cake::Entity::find()
@ -140,7 +140,7 @@ pub trait SelectHelper: Sized {
/// Add an order_by expression (ascending) /// Add an order_by expression (ascending)
/// ``` /// ```
/// use sea_orm::{EntityTrait, SelectHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder}; /// use sea_orm::{EntityTrait, QueryTrait, SelectHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder};
/// ///
/// assert_eq!( /// assert_eq!(
/// cake::Entity::find() /// cake::Entity::find()
@ -161,7 +161,7 @@ pub trait SelectHelper: Sized {
/// Add an order_by expression (descending) /// Add an order_by expression (descending)
/// ``` /// ```
/// use sea_orm::{EntityTrait, SelectHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder}; /// use sea_orm::{EntityTrait, QueryTrait, SelectHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder};
/// ///
/// assert_eq!( /// assert_eq!(
/// cake::Entity::find() /// cake::Entity::find()

View File

@ -71,7 +71,7 @@ where
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use crate::tests_cfg::{cake, filling, fruit}; use crate::tests_cfg::{cake, filling, fruit};
use crate::{ColumnTrait, EntityTrait, SelectHelper}; use crate::{QueryTrait, ColumnTrait, EntityTrait, SelectHelper};
use sea_query::MysqlQueryBuilder; use sea_query::MysqlQueryBuilder;
#[test] #[test]

View File

@ -1,8 +1,8 @@
use crate::{ColumnTrait, EntityTrait, Iterable, SelectHelper, Statement}; use crate::{ColumnTrait, EntityTrait, Iterable, QueryTrait, SelectHelper};
use core::fmt::Debug; use core::fmt::Debug;
use core::marker::PhantomData; use core::marker::PhantomData;
pub use sea_query::JoinType; pub use sea_query::JoinType;
use sea_query::{Iden, IntoColumnRef, IntoIden, QueryBuilder, SelectStatement, SimpleExpr}; use sea_query::{Iden, IntoColumnRef, IntoIden, SelectStatement, SimpleExpr};
use std::rc::Rc; use std::rc::Rc;
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
@ -91,44 +91,35 @@ where
} }
} }
macro_rules! select_query { impl<E> QueryTrait for Select<E>
() => {
/// Get a mutable ref to the query builder
pub fn query(&mut self) -> &mut SelectStatement {
&mut self.query
}
/// Get an immutable ref to the query builder
pub fn as_query(&self) -> &SelectStatement {
&self.query
}
/// Take ownership of the query builder
pub fn into_query(self) -> SelectStatement {
self.query
}
/// Build the query as [`Statement`]
pub fn build<B>(&self, builder: B) -> Statement
where
B: QueryBuilder,
{
self.as_query().build(builder).into()
}
};
}
impl<E> Select<E>
where where
E: EntityTrait, E: EntityTrait,
{ {
select_query!(); type QueryStatementBuilder = SelectStatement;
fn query(&mut self) -> &mut SelectStatement {
&mut self.query
}
fn as_query(&self) -> &SelectStatement {
&self.query
}
fn into_query(self) -> SelectStatement {
self.query
}
} }
impl<E, F> SelectTwo<E, F> impl<E, F> QueryTrait for SelectTwo<E, F>
where where
E: EntityTrait, E: EntityTrait,
F: EntityTrait, F: EntityTrait,
{ {
select_query!(); type QueryStatementBuilder = SelectStatement;
fn query(&mut self) -> &mut SelectStatement {
&mut self.query
}
fn as_query(&self) -> &SelectStatement {
&self.query
}
fn into_query(self) -> SelectStatement {
self.query
}
} }