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

View File

@ -57,7 +57,7 @@ pub trait ColumnTrait: IdenStatic + Iterable {
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!(
/// 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!(
/// 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!(
/// 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!(
/// 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!(
/// 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!(
/// 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!(
/// 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 sea_query::{Iden, IntoIden, JoinType};
use std::fmt::Debug;

View File

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

View File

@ -3,7 +3,7 @@ use sea_query::{Alias, Expr, IntoCondition, SelectExpr, SelectStatement, SimpleE
pub use sea_query::{Condition, JoinType, Order};
use std::rc::Rc;
pub trait QueryHelper: Sized {
pub trait SelectHelper: Sized {
fn query(&mut self) -> &mut SelectStatement;
/// Clear the selection list
@ -14,7 +14,7 @@ pub trait QueryHelper: Sized {
/// 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!(
/// cake::Entity::find()
@ -35,7 +35,7 @@ pub trait QueryHelper: Sized {
/// 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!(
/// cake::Entity::find()
@ -59,7 +59,7 @@ pub trait QueryHelper: Sized {
/// 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!(
/// cake::Entity::find()
@ -73,7 +73,7 @@ pub trait QueryHelper: Sized {
///
/// 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!(
/// cake::Entity::find()
@ -97,7 +97,7 @@ pub trait QueryHelper: Sized {
/// 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!(
/// cake::Entity::find()
@ -119,7 +119,7 @@ pub trait QueryHelper: Sized {
/// 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!(
/// cake::Entity::find()
@ -140,7 +140,7 @@ pub trait QueryHelper: Sized {
/// 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!(
/// cake::Entity::find()
@ -161,7 +161,7 @@ pub trait QueryHelper: Sized {
/// 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!(
/// cake::Entity::find()

View File

@ -1,5 +1,5 @@
use crate::{
ColumnTrait, EntityTrait, Iterable, ModelTrait, PrimaryKeyOfModel, QueryHelper, Related,
ColumnTrait, EntityTrait, Iterable, ModelTrait, PrimaryKeyOfModel, SelectHelper, Related,
Select, SelectTwo,
};
pub use sea_query::JoinType;
@ -71,7 +71,7 @@ where
#[cfg(test)]
mod tests {
use crate::tests_cfg::{cake, filling, fruit};
use crate::{ColumnTrait, EntityTrait, QueryHelper};
use crate::{ColumnTrait, EntityTrait, SelectHelper};
use sea_query::MysqlQueryBuilder;
#[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::marker::PhantomData;
pub use sea_query::JoinType;
@ -28,7 +28,7 @@ pub trait IntoSimpleExpr {
fn into_simple_expr(self) -> SimpleExpr;
}
impl<E> QueryHelper for Select<E>
impl<E> SelectHelper for Select<E>
where
E: EntityTrait,
{
@ -37,7 +37,7 @@ where
}
}
impl<E, F> QueryHelper for SelectTwo<E, F>
impl<E, F> SelectHelper for SelectTwo<E, F>
where
E: EntityTrait,
F: EntityTrait,