diff --git a/src/entity/base.rs b/src/entity/base.rs index efea8713..1c3478c6 100644 --- a/src/entity/base.rs +++ b/src/entity/base.rs @@ -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, { 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(model: A) -> Insert + where + A: ActiveModelTrait + ActiveModelOf, + { + Insert::new().one(model) + } + + fn insert_many(models: I) -> Insert + where + A: ActiveModelTrait + ActiveModelOf, + I: IntoIterator + { + 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')"#, diff --git a/src/entity/column.rs b/src/entity/column.rs index b680565f..cfdb2ef6 100644 --- a/src/entity/column.rs +++ b/src/entity/column.rs @@ -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() diff --git a/src/entity/relation.rs b/src/entity/relation.rs index 6cee53a3..3377cc46 100644 --- a/src/entity/relation.rs +++ b/src/entity/relation.rs @@ -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; diff --git a/src/query/combine.rs b/src/query/combine.rs index 757fa3ee..287f96d8 100644 --- a/src/query/combine.rs +++ b/src/query/combine.rs @@ -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] diff --git a/src/query/helper.rs b/src/query/helper.rs index d973fe6e..a10168e9 100644 --- a/src/query/helper.rs +++ b/src/query/helper.rs @@ -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() diff --git a/src/query/join.rs b/src/query/join.rs index 24088a04..7f841131 100644 --- a/src/query/join.rs +++ b/src/query/join.rs @@ -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] diff --git a/src/query/select.rs b/src/query/select.rs index 54e25e77..4ee721f4 100644 --- a/src/query/select.rs +++ b/src/query/select.rs @@ -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 QueryHelper for Select +impl SelectHelper for Select where E: EntityTrait, { @@ -37,7 +37,7 @@ where } } -impl QueryHelper for SelectTwo +impl SelectHelper for SelectTwo where E: EntityTrait, F: EntityTrait,