Doc tests
This commit is contained in:
parent
add2e1ca0c
commit
4469b824e8
@ -17,16 +17,46 @@ pub trait EntityTrait: Iden + Default + Debug {
|
|||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// ```
|
||||||
|
/// use sea_orm::{ColumnTrait, EntityTrait, tests_cfg::cake, sea_query::MysqlQueryBuilder};
|
||||||
|
///
|
||||||
|
/// assert_eq!(
|
||||||
|
/// cake::Entity::find()
|
||||||
|
/// .build(MysqlQueryBuilder)
|
||||||
|
/// .to_string(),
|
||||||
|
/// "SELECT `cake`.`id`, `cake`.`name` FROM `cake`"
|
||||||
|
/// );
|
||||||
|
/// ```
|
||||||
fn find<'s>() -> Select<'s, Self> {
|
fn find<'s>() -> Select<'s, Self> {
|
||||||
Select::new(Self::default())
|
Select::new(Self::default())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// ```
|
||||||
|
/// use sea_orm::{ColumnTrait, EntityTrait, tests_cfg::cake, sea_query::MysqlQueryBuilder};
|
||||||
|
///
|
||||||
|
/// assert_eq!(
|
||||||
|
/// cake::Entity::find_one()
|
||||||
|
/// .build(MysqlQueryBuilder)
|
||||||
|
/// .to_string(),
|
||||||
|
/// "SELECT `cake`.`id`, `cake`.`name` FROM `cake` LIMIT 1"
|
||||||
|
/// );
|
||||||
|
/// ```
|
||||||
fn find_one<'s>() -> Select<'s, Self> {
|
fn find_one<'s>() -> Select<'s, Self> {
|
||||||
let mut select = Self::find();
|
let mut select = Self::find();
|
||||||
select.query().limit(1);
|
select.query().limit(1);
|
||||||
select
|
select
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// ```
|
||||||
|
/// use sea_orm::{ColumnTrait, EntityTrait, tests_cfg::cake, sea_query::MysqlQueryBuilder};
|
||||||
|
///
|
||||||
|
/// assert_eq!(
|
||||||
|
/// cake::Entity::find_one_by(11)
|
||||||
|
/// .build(MysqlQueryBuilder)
|
||||||
|
/// .to_string(),
|
||||||
|
/// "SELECT `cake`.`id`, `cake`.`name` FROM `cake` WHERE `cake`.`id` = 11 LIMIT 1"
|
||||||
|
/// );
|
||||||
|
/// ```
|
||||||
fn find_one_by<'s, V>(v: V) -> Select<'s, Self>
|
fn find_one_by<'s, V>(v: V) -> Select<'s, Self>
|
||||||
where
|
where
|
||||||
V: Into<Value>,
|
V: Into<Value>,
|
||||||
|
@ -44,24 +44,79 @@ pub trait ColumnTrait: Iden + Copy {
|
|||||||
Expr::tbl(self.entity_iden(), *self).not_between(a, b)
|
Expr::tbl(self.entity_iden(), *self).not_between(a, b)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// ```
|
||||||
|
/// use sea_orm::{ColumnTrait, EntityTrait, tests_cfg::cake, sea_query::MysqlQueryBuilder};
|
||||||
|
///
|
||||||
|
/// assert_eq!(
|
||||||
|
/// cake::Entity::find()
|
||||||
|
/// .filter(cake::Column::Name.like("cheese"))
|
||||||
|
/// .build(MysqlQueryBuilder)
|
||||||
|
/// .to_string(),
|
||||||
|
/// "SELECT `cake`.`id`, `cake`.`name` FROM `cake` WHERE `cake`.`name` LIKE 'cheese'"
|
||||||
|
/// );
|
||||||
|
/// ```
|
||||||
fn like(&'static self, s: &str) -> SimpleExpr {
|
fn like(&'static self, s: &str) -> SimpleExpr {
|
||||||
Expr::tbl(self.entity_iden(), *self).like(s)
|
Expr::tbl(self.entity_iden(), *self).like(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// ```
|
||||||
|
/// use sea_orm::{ColumnTrait, EntityTrait, tests_cfg::cake, sea_query::MysqlQueryBuilder};
|
||||||
|
///
|
||||||
|
/// assert_eq!(
|
||||||
|
/// cake::Entity::find()
|
||||||
|
/// .filter(cake::Column::Name.not_like("cheese"))
|
||||||
|
/// .build(MysqlQueryBuilder)
|
||||||
|
/// .to_string(),
|
||||||
|
/// "SELECT `cake`.`id`, `cake`.`name` FROM `cake` WHERE `cake`.`name` NOT LIKE 'cheese'"
|
||||||
|
/// );
|
||||||
|
/// ```
|
||||||
fn not_like(&'static self, s: &str) -> SimpleExpr {
|
fn not_like(&'static self, s: &str) -> SimpleExpr {
|
||||||
Expr::tbl(self.entity_iden(), *self).not_like(s)
|
Expr::tbl(self.entity_iden(), *self).not_like(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// ```
|
||||||
|
/// use sea_orm::{ColumnTrait, EntityTrait, tests_cfg::cake, sea_query::MysqlQueryBuilder};
|
||||||
|
///
|
||||||
|
/// assert_eq!(
|
||||||
|
/// cake::Entity::find()
|
||||||
|
/// .filter(cake::Column::Name.starts_with("cheese"))
|
||||||
|
/// .build(MysqlQueryBuilder)
|
||||||
|
/// .to_string(),
|
||||||
|
/// "SELECT `cake`.`id`, `cake`.`name` FROM `cake` WHERE `cake`.`name` LIKE 'cheese%'"
|
||||||
|
/// );
|
||||||
|
/// ```
|
||||||
fn starts_with(&'static self, s: &str) -> SimpleExpr {
|
fn starts_with(&'static self, s: &str) -> SimpleExpr {
|
||||||
let pattern = format!("{}%", s);
|
let pattern = format!("{}%", s);
|
||||||
Expr::tbl(self.entity_iden(), *self).like(&pattern)
|
Expr::tbl(self.entity_iden(), *self).like(&pattern)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// ```
|
||||||
|
/// use sea_orm::{ColumnTrait, EntityTrait, tests_cfg::cake, sea_query::MysqlQueryBuilder};
|
||||||
|
///
|
||||||
|
/// assert_eq!(
|
||||||
|
/// cake::Entity::find()
|
||||||
|
/// .filter(cake::Column::Name.ends_with("cheese"))
|
||||||
|
/// .build(MysqlQueryBuilder)
|
||||||
|
/// .to_string(),
|
||||||
|
/// "SELECT `cake`.`id`, `cake`.`name` FROM `cake` WHERE `cake`.`name` LIKE '%cheese'"
|
||||||
|
/// );
|
||||||
|
/// ```
|
||||||
fn ends_with(&'static self, s: &str) -> SimpleExpr {
|
fn ends_with(&'static self, s: &str) -> SimpleExpr {
|
||||||
let pattern = format!("%{}", s);
|
let pattern = format!("%{}", s);
|
||||||
Expr::tbl(self.entity_iden(), *self).like(&pattern)
|
Expr::tbl(self.entity_iden(), *self).like(&pattern)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// ```
|
||||||
|
/// use sea_orm::{ColumnTrait, EntityTrait, tests_cfg::cake, sea_query::MysqlQueryBuilder};
|
||||||
|
///
|
||||||
|
/// assert_eq!(
|
||||||
|
/// cake::Entity::find()
|
||||||
|
/// .filter(cake::Column::Name.contains("cheese"))
|
||||||
|
/// .build(MysqlQueryBuilder)
|
||||||
|
/// .to_string(),
|
||||||
|
/// "SELECT `cake`.`id`, `cake`.`name` FROM `cake` WHERE `cake`.`name` LIKE '%cheese%'"
|
||||||
|
/// );
|
||||||
|
/// ```
|
||||||
fn contains(&'static self, s: &str) -> SimpleExpr {
|
fn contains(&'static self, s: &str) -> SimpleExpr {
|
||||||
let pattern = format!("%{}%", s);
|
let pattern = format!("%{}%", s);
|
||||||
Expr::tbl(self.entity_iden(), *self).like(&pattern)
|
Expr::tbl(self.entity_iden(), *self).like(&pattern)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use crate::{EntityTrait, Identity, Iterable, RelationDef, Statement};
|
use crate::{EntityTrait, Identity, Iterable, RelationDef, RelationTrait, 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;
|
||||||
@ -54,16 +54,49 @@ where
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// ```
|
||||||
|
/// use sea_orm::{ColumnTrait, EntityTrait, tests_cfg::cake, sea_query::MysqlQueryBuilder};
|
||||||
|
///
|
||||||
|
/// assert_eq!(
|
||||||
|
/// cake::Entity::find()
|
||||||
|
/// .filter(cake::Column::Id.eq(5))
|
||||||
|
/// .build(MysqlQueryBuilder)
|
||||||
|
/// .to_string(),
|
||||||
|
/// "SELECT `cake`.`id`, `cake`.`name` FROM `cake` WHERE `cake`.`id` = 5"
|
||||||
|
/// );
|
||||||
|
/// ```
|
||||||
pub fn filter(mut self, expr: SimpleExpr) -> Self {
|
pub fn filter(mut self, expr: SimpleExpr) -> Self {
|
||||||
self.select.and_where(expr);
|
self.select.and_where(expr);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// ```
|
||||||
|
/// use sea_orm::{EntityTrait, tests_cfg::cake, sea_query::MysqlQueryBuilder};
|
||||||
|
///
|
||||||
|
/// assert_eq!(
|
||||||
|
/// cake::Entity::find()
|
||||||
|
/// .order_by(cake::Column::Id)
|
||||||
|
/// .build(MysqlQueryBuilder)
|
||||||
|
/// .to_string(),
|
||||||
|
/// "SELECT `cake`.`id`, `cake`.`name` FROM `cake` ORDER BY `cake`.`id` ASC"
|
||||||
|
/// );
|
||||||
|
/// ```
|
||||||
pub fn order_by(mut self, col: E::Column) -> Self {
|
pub fn order_by(mut self, col: E::Column) -> Self {
|
||||||
self.select.order_by((E::default(), col), Order::Asc);
|
self.select.order_by((E::default(), col), Order::Asc);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// ```
|
||||||
|
/// use sea_orm::{EntityTrait, tests_cfg::cake, sea_query::MysqlQueryBuilder};
|
||||||
|
///
|
||||||
|
/// assert_eq!(
|
||||||
|
/// cake::Entity::find()
|
||||||
|
/// .order_by_desc(cake::Column::Id)
|
||||||
|
/// .build(MysqlQueryBuilder)
|
||||||
|
/// .to_string(),
|
||||||
|
/// "SELECT `cake`.`id`, `cake`.`name` FROM `cake` ORDER BY `cake`.`id` DESC"
|
||||||
|
/// );
|
||||||
|
/// ```
|
||||||
pub fn order_by_desc(mut self, col: E::Column) -> Self {
|
pub fn order_by_desc(mut self, col: E::Column) -> Self {
|
||||||
self.select.order_by((E::default(), col), Order::Desc);
|
self.select.order_by((E::default(), col), Order::Desc);
|
||||||
self
|
self
|
||||||
@ -81,18 +114,22 @@ where
|
|||||||
self.prepare_join(JoinType::InnerJoin, E::Relation::rel_def(&rel))
|
self.prepare_join(JoinType::InnerJoin, E::Relation::rel_def(&rel))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get a mutable ref to the query builder
|
||||||
pub fn query(&mut self) -> &mut SelectStatement {
|
pub fn query(&mut self) -> &mut SelectStatement {
|
||||||
&mut self.select
|
&mut self.select
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get a immutable ref to the query builder
|
||||||
pub fn as_query(&self) -> &SelectStatement {
|
pub fn as_query(&self) -> &SelectStatement {
|
||||||
&self.select
|
&self.select
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Take ownership of the query builder
|
||||||
pub fn into_query(self) -> SelectStatement {
|
pub fn into_query(self) -> SelectStatement {
|
||||||
self.select
|
self.select
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Build the query as [`Statement`]
|
||||||
pub fn build<B>(&self, builder: B) -> Statement
|
pub fn build<B>(&self, builder: B) -> Statement
|
||||||
where
|
where
|
||||||
B: QueryBuilder,
|
B: QueryBuilder,
|
||||||
@ -108,91 +145,30 @@ mod tests {
|
|||||||
use sea_query::MysqlQueryBuilder;
|
use sea_query::MysqlQueryBuilder;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_1() {
|
fn join_1() {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
cake::Entity::find().build(MysqlQueryBuilder).to_string(),
|
cake::Entity::find()
|
||||||
"SELECT `cake`.`id`, `cake`.`name` FROM `cake`"
|
.left_join(cake::Relation::Fruit)
|
||||||
|
.build(MysqlQueryBuilder)
|
||||||
|
.to_string(),
|
||||||
|
"SELECT `cake`.`id`, `cake`.`name` FROM `cake` LEFT JOIN `fruit` ON `cake`.`id` = `fruit`.`cake_id`"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_2() {
|
fn join_2() {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
cake::Entity::find()
|
cake::Entity::find()
|
||||||
.filter(cake::Column::Id.eq(5))
|
.inner_join(cake::Relation::Fruit)
|
||||||
|
.filter(fruit::Column::Name.contains("cherry"))
|
||||||
.build(MysqlQueryBuilder)
|
.build(MysqlQueryBuilder)
|
||||||
.to_string(),
|
.to_string(),
|
||||||
"SELECT `cake`.`id`, `cake`.`name` FROM `cake` WHERE `cake`.`id` = 5"
|
[
|
||||||
);
|
"SELECT `cake`.`id`, `cake`.`name` FROM `cake`",
|
||||||
}
|
"INNER JOIN `fruit` ON `cake`.`id` = `fruit`.`cake_id`",
|
||||||
|
"WHERE `fruit`.`name` LIKE \'%cherry%\'"
|
||||||
#[test]
|
]
|
||||||
fn test_3() {
|
.join(" ")
|
||||||
assert_eq!(
|
|
||||||
cake::Entity::find()
|
|
||||||
.filter(cake::Column::Name.like("cheese"))
|
|
||||||
.build(MysqlQueryBuilder)
|
|
||||||
.to_string(),
|
|
||||||
"SELECT `cake`.`id`, `cake`.`name` FROM `cake` WHERE `cake`.`name` LIKE 'cheese'"
|
|
||||||
);
|
|
||||||
assert_eq!(
|
|
||||||
cake::Entity::find()
|
|
||||||
.filter(cake::Column::Name.starts_with("cheese"))
|
|
||||||
.build(MysqlQueryBuilder)
|
|
||||||
.to_string(),
|
|
||||||
"SELECT `cake`.`id`, `cake`.`name` FROM `cake` WHERE `cake`.`name` LIKE 'cheese%'"
|
|
||||||
);
|
|
||||||
assert_eq!(
|
|
||||||
cake::Entity::find()
|
|
||||||
.filter(cake::Column::Name.ends_with("cheese"))
|
|
||||||
.build(MysqlQueryBuilder)
|
|
||||||
.to_string(),
|
|
||||||
"SELECT `cake`.`id`, `cake`.`name` FROM `cake` WHERE `cake`.`name` LIKE '%cheese'"
|
|
||||||
);
|
|
||||||
assert_eq!(
|
|
||||||
cake::Entity::find()
|
|
||||||
.filter(cake::Column::Name.contains("cheese"))
|
|
||||||
.build(MysqlQueryBuilder)
|
|
||||||
.to_string(),
|
|
||||||
"SELECT `cake`.`id`, `cake`.`name` FROM `cake` WHERE `cake`.`name` LIKE '%cheese%'"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_4() {
|
|
||||||
assert_eq!(
|
|
||||||
cake::Entity::find_one()
|
|
||||||
.build(MysqlQueryBuilder)
|
|
||||||
.to_string(),
|
|
||||||
"SELECT `cake`.`id`, `cake`.`name` FROM `cake` LIMIT 1"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_5() {
|
|
||||||
assert_eq!(
|
|
||||||
cake::Entity::find_one_by(11)
|
|
||||||
.build(MysqlQueryBuilder)
|
|
||||||
.to_string(),
|
|
||||||
"SELECT `cake`.`id`, `cake`.`name` FROM `cake` WHERE `cake`.`id` = 11 LIMIT 1"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_6() {
|
|
||||||
assert_eq!(
|
|
||||||
cake::Entity::find()
|
|
||||||
.order_by(cake::Column::Id)
|
|
||||||
.build(MysqlQueryBuilder)
|
|
||||||
.to_string(),
|
|
||||||
"SELECT `cake`.`id`, `cake`.`name` FROM `cake` ORDER BY `cake`.`id` ASC"
|
|
||||||
);
|
|
||||||
assert_eq!(
|
|
||||||
cake::Entity::find()
|
|
||||||
.order_by_desc(cake::Column::Id)
|
|
||||||
.build(MysqlQueryBuilder)
|
|
||||||
.to_string(),
|
|
||||||
"SELECT `cake`.`id`, `cake`.`name` FROM `cake` ORDER BY `cake`.`id` DESC"
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user