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