QueryHelper API

This commit is contained in:
Chris Tsang 2021-05-18 12:47:43 +08:00
parent bdc403c55b
commit 543f0ede94

View File

@ -1,7 +1,7 @@
use crate::{ColumnTrait, Identity, IntoSimpleExpr, RelationDef}; use crate::{ColumnTrait, Identity, IntoSimpleExpr, RelationDef};
pub use sea_query::JoinType; use sea_query::{Alias, Expr, SelectExpr, SelectStatement, SimpleExpr};
use sea_query::{Alias, Expr, Order, SelectExpr, SelectStatement, SimpleExpr}; pub use sea_query::{JoinType, Order};
use std::rc::Rc; use std::rc::Rc;
pub trait QueryHelper: Sized { pub trait QueryHelper: Sized {
@ -97,19 +97,40 @@ pub trait QueryHelper: Sized {
self self
} }
/// Add an order_by expression
/// ```
/// use sea_orm::{EntityTrait, Order, QueryHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder};
///
/// assert_eq!(
/// cake::Entity::find()
/// .order_by(cake::Column::Id, Order::Asc)
/// .order_by(cake::Column::Name, Order::Desc)
/// .build(MysqlQueryBuilder)
/// .to_string(),
/// "SELECT `cake`.`id`, `cake`.`name` FROM `cake` ORDER BY `cake`.`id` ASC, `cake`.`name` DESC"
/// );
/// ```
fn order_by<C>(mut self, col: C, ord: Order) -> Self
where
C: IntoSimpleExpr,
{
self.query().order_by_expr(col.into_simple_expr(), ord);
self
}
/// 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, QueryHelper, tests_cfg::cake, sea_query::MysqlQueryBuilder};
/// ///
/// assert_eq!( /// assert_eq!(
/// cake::Entity::find() /// cake::Entity::find()
/// .order_by(cake::Column::Id) /// .order_by_asc(cake::Column::Id)
/// .build(MysqlQueryBuilder) /// .build(MysqlQueryBuilder)
/// .to_string(), /// .to_string(),
/// "SELECT `cake`.`id`, `cake`.`name` FROM `cake` ORDER BY `cake`.`id` ASC" /// "SELECT `cake`.`id`, `cake`.`name` FROM `cake` ORDER BY `cake`.`id` ASC"
/// ); /// );
/// ``` /// ```
fn order_by<C>(mut self, col: C) -> Self fn order_by_asc<C>(mut self, col: C) -> Self
where where
C: IntoSimpleExpr, C: IntoSimpleExpr,
{ {
@ -164,8 +185,8 @@ pub trait QueryHelper: Sized {
} }
/// Join via [`RelationDef`] but in reverse direction. /// Join via [`RelationDef`] but in reverse direction.
/// Assume when there exist a relation A -> B. /// Assume when there exist a relation A to B.
/// You can reverse join B <- A. /// You can reverse join B from A.
fn join_rev(mut self, join: JoinType, rel: RelationDef) -> Self { fn join_rev(mut self, join: JoinType, rel: RelationDef) -> Self {
self.query() self.query()
.join(join, rel.from_tbl.clone(), join_condition(rel)); .join(join, rel.from_tbl.clone(), join_condition(rel));