SelectHelper

This commit is contained in:
Chris Tsang 2021-06-01 17:31:32 +08:00
parent e66cfd1ab1
commit 8a1329a7b5
7 changed files with 56 additions and 28 deletions

View File

@ -1,6 +1,6 @@
use crate::{ use crate::{
ActiveModelOf, ActiveModelTrait, ColumnTrait, Insert, ModelTrait, OneOrManyActiveModel, ActiveModelOf, ActiveModelTrait, ColumnTrait, Insert, ModelTrait, OneOrManyActiveModel,
PrimaryKeyOfModel, PrimaryKeyTrait, QueryHelper, RelationBuilder, RelationTrait, RelationType, PrimaryKeyOfModel, PrimaryKeyTrait, SelectHelper, RelationBuilder, RelationTrait, RelationType,
Select, Select,
}; };
use sea_query::{Iden, IntoValueTuple}; use sea_query::{Iden, IntoValueTuple};
@ -102,13 +102,28 @@ pub trait EntityTrait: EntityName {
C: OneOrManyActiveModel<A>, C: OneOrManyActiveModel<A>,
{ {
if C::is_one() { if C::is_one() {
Insert::new().one(models.get_one()) Self::insert_one(models.get_one())
} else if C::is_many() { } else if C::is_many() {
Insert::new().many(models.get_many()) Self::insert_many(models.get_many())
} else { } else {
unreachable!() unreachable!()
} }
} }
fn insert_one<A>(model: A) -> Insert<A>
where
A: ActiveModelTrait + ActiveModelOf<Self>,
{
Insert::new().one(model)
}
fn insert_many<A, I>(models: I) -> Insert<A>
where
A: ActiveModelTrait + ActiveModelOf<Self>,
I: IntoIterator<Item = A>
{
Insert::new().many(models)
}
} }
#[cfg(test)] #[cfg(test)]
@ -124,7 +139,13 @@ mod tests {
..Default::default() ..Default::default()
}; };
assert_eq!( assert_eq!(
cake::Entity::insert(apple) cake::Entity::insert(apple.clone())
.build(PostgresQueryBuilder)
.to_string(),
r#"INSERT INTO "cake" ("name") VALUES ('Apple Pie')"#,
);
assert_eq!(
cake::Entity::insert_one(apple)
.build(PostgresQueryBuilder) .build(PostgresQueryBuilder)
.to_string(), .to_string(),
r#"INSERT INTO "cake" ("name") VALUES ('Apple Pie')"#, r#"INSERT INTO "cake" ("name") VALUES ('Apple Pie')"#,
@ -141,8 +162,15 @@ mod tests {
name: Val::set("Orange Scone".to_owned()), name: Val::set("Orange Scone".to_owned()),
..Default::default() ..Default::default()
}; };
let fruits = vec![apple, orange];
assert_eq!( assert_eq!(
cake::Entity::insert(vec![apple, orange]) cake::Entity::insert(fruits.clone())
.build(PostgresQueryBuilder)
.to_string(),
r#"INSERT INTO "cake" ("name") VALUES ('Apple Pie'), ('Orange Scone')"#,
);
assert_eq!(
cake::Entity::insert_many(fruits)
.build(PostgresQueryBuilder) .build(PostgresQueryBuilder)
.to_string(), .to_string(),
r#"INSERT INTO "cake" ("name") VALUES ('Apple Pie'), ('Orange Scone')"#, r#"INSERT INTO "cake" ("name") VALUES ('Apple Pie'), ('Orange Scone')"#,

View File

@ -57,7 +57,7 @@ pub trait ColumnTrait: IdenStatic + Iterable {
bind_oper!(lte); bind_oper!(lte);
/// ``` /// ```
/// use sea_orm::{ColumnTrait, EntityTrait, QueryHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder}; /// use sea_orm::{ColumnTrait, EntityTrait, 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, QueryHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder}; /// use sea_orm::{ColumnTrait, EntityTrait, 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, QueryHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder}; /// use sea_orm::{ColumnTrait, EntityTrait, 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, QueryHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder}; /// use sea_orm::{ColumnTrait, EntityTrait, 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, QueryHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder}; /// use sea_orm::{ColumnTrait, EntityTrait, 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, QueryHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder}; /// use sea_orm::{ColumnTrait, EntityTrait, 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, QueryHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder}; /// use sea_orm::{ColumnTrait, EntityTrait, 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, Identity, IntoIdentity, Iterable, QueryHelper, Select}; use crate::{EntityTrait, Identity, IntoIdentity, Iterable, SelectHelper, Select};
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

@ -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, QueryHelper}; use crate::{ColumnTrait, EntityTrait, SelectHelper};
use sea_query::MysqlQueryBuilder; use sea_query::MysqlQueryBuilder;
#[test] #[test]

View File

@ -3,7 +3,7 @@ use sea_query::{Alias, Expr, IntoCondition, SelectExpr, SelectStatement, SimpleE
pub use sea_query::{Condition, JoinType, Order}; pub use sea_query::{Condition, JoinType, Order};
use std::rc::Rc; use std::rc::Rc;
pub trait QueryHelper: Sized { pub trait SelectHelper: Sized {
fn query(&mut self) -> &mut SelectStatement; fn query(&mut self) -> &mut SelectStatement;
/// Clear the selection list /// Clear the selection list
@ -14,7 +14,7 @@ pub trait QueryHelper: Sized {
/// Add a select column /// Add a select column
/// ``` /// ```
/// use sea_orm::{ColumnTrait, EntityTrait, QueryHelper, tests_cfg::cake, sea_query::PostgresQueryBuilder}; /// use sea_orm::{ColumnTrait, EntityTrait, SelectHelper, tests_cfg::cake, sea_query::PostgresQueryBuilder};
/// ///
/// assert_eq!( /// assert_eq!(
/// cake::Entity::find() /// cake::Entity::find()
@ -35,7 +35,7 @@ pub trait QueryHelper: Sized {
/// Add a select column with alias /// Add a select column with alias
/// ``` /// ```
/// use sea_orm::{ColumnTrait, EntityTrait, QueryHelper, tests_cfg::cake, sea_query::PostgresQueryBuilder}; /// use sea_orm::{ColumnTrait, EntityTrait, SelectHelper, tests_cfg::cake, sea_query::PostgresQueryBuilder};
/// ///
/// assert_eq!( /// assert_eq!(
/// cake::Entity::find() /// cake::Entity::find()
@ -59,7 +59,7 @@ pub trait QueryHelper: Sized {
/// Add an AND WHERE expression /// Add an AND WHERE expression
/// ``` /// ```
/// use sea_orm::{ColumnTrait, EntityTrait, QueryHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder}; /// use sea_orm::{ColumnTrait, EntityTrait, SelectHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder};
/// ///
/// assert_eq!( /// assert_eq!(
/// cake::Entity::find() /// cake::Entity::find()
@ -73,7 +73,7 @@ pub trait QueryHelper: Sized {
/// ///
/// Add a condition tree. /// Add a condition tree.
/// ``` /// ```
/// use sea_orm::{Condition, ColumnTrait, EntityTrait, QueryHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder}; /// use sea_orm::{Condition, ColumnTrait, EntityTrait, SelectHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder};
/// ///
/// assert_eq!( /// assert_eq!(
/// cake::Entity::find() /// cake::Entity::find()
@ -97,7 +97,7 @@ pub trait QueryHelper: Sized {
/// Add a group by column /// Add a group by column
/// ``` /// ```
/// use sea_orm::{ColumnTrait, EntityTrait, QueryHelper, tests_cfg::cake, sea_query::PostgresQueryBuilder}; /// use sea_orm::{ColumnTrait, EntityTrait, SelectHelper, tests_cfg::cake, sea_query::PostgresQueryBuilder};
/// ///
/// assert_eq!( /// assert_eq!(
/// cake::Entity::find() /// cake::Entity::find()
@ -119,7 +119,7 @@ pub trait QueryHelper: Sized {
/// Add an order_by expression /// Add an order_by expression
/// ``` /// ```
/// use sea_orm::{EntityTrait, Order, QueryHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder}; /// use sea_orm::{EntityTrait, Order, SelectHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder};
/// ///
/// assert_eq!( /// assert_eq!(
/// cake::Entity::find() /// cake::Entity::find()
@ -140,7 +140,7 @@ pub trait QueryHelper: Sized {
/// Add an order_by expression (ascending) /// Add an order_by expression (ascending)
/// ``` /// ```
/// use sea_orm::{EntityTrait, QueryHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder}; /// use sea_orm::{EntityTrait, SelectHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder};
/// ///
/// assert_eq!( /// assert_eq!(
/// cake::Entity::find() /// cake::Entity::find()
@ -161,7 +161,7 @@ pub trait QueryHelper: Sized {
/// Add an order_by expression (descending) /// Add an order_by expression (descending)
/// ``` /// ```
/// use sea_orm::{EntityTrait, QueryHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder}; /// use sea_orm::{EntityTrait, SelectHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder};
/// ///
/// assert_eq!( /// assert_eq!(
/// cake::Entity::find() /// cake::Entity::find()

View File

@ -1,5 +1,5 @@
use crate::{ use crate::{
ColumnTrait, EntityTrait, Iterable, ModelTrait, PrimaryKeyOfModel, QueryHelper, Related, ColumnTrait, EntityTrait, Iterable, ModelTrait, PrimaryKeyOfModel, SelectHelper, Related,
Select, SelectTwo, Select, SelectTwo,
}; };
pub use sea_query::JoinType; pub use sea_query::JoinType;
@ -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, QueryHelper}; use crate::{ColumnTrait, EntityTrait, SelectHelper};
use sea_query::MysqlQueryBuilder; use sea_query::MysqlQueryBuilder;
#[test] #[test]

View File

@ -1,4 +1,4 @@
use crate::{ColumnTrait, EntityTrait, Iterable, QueryHelper, Statement}; use crate::{ColumnTrait, EntityTrait, Iterable, SelectHelper, Statement};
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;
@ -28,7 +28,7 @@ pub trait IntoSimpleExpr {
fn into_simple_expr(self) -> SimpleExpr; fn into_simple_expr(self) -> SimpleExpr;
} }
impl<E> QueryHelper for Select<E> impl<E> SelectHelper for Select<E>
where where
E: EntityTrait, E: EntityTrait,
{ {
@ -37,7 +37,7 @@ where
} }
} }
impl<E, F> QueryHelper for SelectTwo<E, F> impl<E, F> SelectHelper for SelectTwo<E, F>
where where
E: EntityTrait, E: EntityTrait,
F: EntityTrait, F: EntityTrait,