SelectHelper
This commit is contained in:
parent
e66cfd1ab1
commit
8a1329a7b5
@ -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')"#,
|
||||
|
@ -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()
|
||||
|
@ -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;
|
||||
|
@ -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]
|
||||
|
@ -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()
|
||||
|
@ -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]
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user