Struct Condition
pub struct Condition { /* private fields */ }Expand description
Represents the value of an Condition::any or Condition::all: a set of disjunctive or conjunctive conditions.
Implementations§
§impl Condition
impl Condition
pub fn add<C>(self, condition: C) -> Self
pub fn add<C>(self, condition: C) -> Self
Add a condition to the set.
If it’s an Condition::any, it will be separated from the others by an " OR " in the query. If it’s
an Condition::all, it will be separated by an " AND ".
use sea_query::{tests_cfg::*, *};
let statement = Query::select()
.column(Glyph::Id)
.from(Glyph::Table)
.cond_where(
Cond::all()
.add(Expr::col(Glyph::Aspect).eq(0).into_condition().not())
.add(Expr::col(Glyph::Id).eq(0).into_condition().not()),
)
.to_string(PostgresQueryBuilder);
assert_eq!(
statement,
r#"SELECT "id" FROM "glyph" WHERE (NOT "aspect" = 0) AND (NOT "id" = 0)"#
);pub fn add_option<C>(self, other: Option<C>) -> Self
pub fn add_option<C>(self, other: Option<C>) -> Self
Add an optional condition to the set.
Shorthand for if o.is_some() { self.add(o) }
§Examples
use sea_query::{tests_cfg::*, *};
let query = Query::select()
.column(Glyph::Image)
.from(Glyph::Table)
.cond_where(
Cond::all()
.add_option(Some(Expr::col((Glyph::Table, Glyph::Image)).like("A%")))
.add_option(None::<Expr>),
)
.to_owned();
assert_eq!(
query.to_string(MsSqlQueryBuilder),
r#"SELECT [image] FROM [glyph] WHERE [glyph].[image] LIKE 'A%'"#
);
assert_eq!(
query.to_string(MysqlQueryBuilder),
r#"SELECT `image` FROM `glyph` WHERE `glyph`.`image` LIKE 'A%'"#
);pub fn any() -> Condition
pub fn any() -> Condition
Create a condition that is true if any of the conditions is true.
§Examples
use sea_query::{*, tests_cfg::*};
let query = Query::select()
.column(Glyph::Image)
.from(Glyph::Table)
.cond_where(
Cond::any()
.add(Expr::col((Glyph::Table, Glyph::Aspect)).is_in([3, 4]))
.add(Expr::col((Glyph::Table, Glyph::Image)).like("A%"))
)
.to_owned();
assert_eq!(
query.to_string(MsSqlQueryBuilder),
r#"SELECT [image] FROM [glyph] WHERE [glyph].[aspect] IN (3, 4) OR [glyph].[image] LIKE 'A%'"#
);
assert_eq!(
query.to_string(MysqlQueryBuilder),
r#"SELECT `image` FROM `glyph` WHERE `glyph`.`aspect` IN (3, 4) OR `glyph`.`image` LIKE 'A%'"#
);pub fn all() -> Condition
pub fn all() -> Condition
Create a condition that is false if any of the conditions is false.
§Examples
use sea_query::{*, tests_cfg::*};
let query = Query::select()
.column(Glyph::Image)
.from(Glyph::Table)
.cond_where(
Cond::all()
.add(Expr::col((Glyph::Table, Glyph::Aspect)).is_in([3, 4]))
.add(Expr::col((Glyph::Table, Glyph::Image)).like("A%"))
)
.to_owned();
assert_eq!(
query.to_string(MsSqlQueryBuilder),
r#"SELECT [image] FROM [glyph] WHERE [glyph].[aspect] IN (3, 4) AND [glyph].[image] LIKE 'A%'"#
);
assert_eq!(
query.to_string(MysqlQueryBuilder),
r#"SELECT `image` FROM `glyph` WHERE `glyph`.`aspect` IN (3, 4) AND `glyph`.`image` LIKE 'A%'"#
);pub fn not(self) -> Self
pub fn not(self) -> Self
Negates a condition.
§Examples
use sea_query::{tests_cfg::*, *};
let query = Query::select()
.column(Glyph::Image)
.from(Glyph::Table)
.cond_where(
Cond::all()
.not()
.add(Expr::col((Glyph::Table, Glyph::Aspect)).is_in([3, 4]))
.add(Expr::col((Glyph::Table, Glyph::Image)).like("A%"))
)
.to_owned();
assert_eq!(
query.to_string(MsSqlQueryBuilder),
r#"SELECT [image] FROM [glyph] WHERE NOT ([glyph].[aspect] IN (3, 4) AND [glyph].[image] LIKE 'A%')"#
);
assert_eq!(
query.to_string(MysqlQueryBuilder),
r#"SELECT `image` FROM `glyph` WHERE NOT (`glyph`.`aspect` IN (3, 4) AND `glyph`.`image` LIKE 'A%')"#
);§More Examples
use sea_query::{tests_cfg::*, *};
let query = Query::select()
.column(Glyph::Id)
.cond_where(
Cond::all()
.add(
Cond::all()
.not()
.add(Expr::val(1).eq(1))
.add(Expr::val(2).eq(2)),
)
.add(Cond::any().add(Expr::val(3).eq(3)).add(Expr::val(4).eq(4))),
)
.to_owned();
assert_eq!(
query.to_string(MsSqlQueryBuilder),
r#"SELECT [id] WHERE (NOT (1 = 1 AND 2 = 2)) AND (3 = 3 OR 4 = 4)"#
);
assert_eq!(
query.to_string(MysqlQueryBuilder),
r#"SELECT `id` WHERE (NOT (1 = 1 AND 2 = 2)) AND (3 = 3 OR 4 = 4)"#
);Trait Implementations§
impl StructuralPartialEq for Condition
Auto Trait Implementations§
impl Freeze for Condition
impl RefUnwindSafe for Condition
impl Send for Condition
impl Sync for Condition
impl Unpin for Condition
impl UnwindSafe for Condition
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> ExprTrait for T
impl<T> ExprTrait for T
§fn count_distinct(self) -> Expr
fn count_distinct(self) -> Expr
Express a
COUNT function with the DISTINCT modifier. Read more§fn equals<C>(self, col: C) -> Exprwhere
C: IntoColumnRef,
fn equals<C>(self, col: C) -> Exprwhere
C: IntoColumnRef,
Express a equal expression between two table columns,
you will mainly use this to relate identical value between two table columns. Read more
§fn in_subquery(self, sel: SelectStatement) -> Expr
fn in_subquery(self, sel: SelectStatement) -> Expr
Express a
IN sub-query expression. Read more§fn in_tuples<V, I>(self, v: I) -> Exprwhere
V: IntoValueTuple,
I: IntoIterator<Item = V>,
fn in_tuples<V, I>(self, v: I) -> Exprwhere
V: IntoValueTuple,
I: IntoIterator<Item = V>,
Express a
IN sub expression. Read more§fn is_not_null(self) -> Expr
fn is_not_null(self) -> Expr
Express a
IS NOT NULL expression. Read more§fn left_shift<R>(self, right: R) -> Expr
fn left_shift<R>(self, right: R) -> Expr
Express a bitwise left shift. Read more
§fn like<L>(self, like: L) -> Exprwhere
L: IntoLikeExpr,
fn like<L>(self, like: L) -> Exprwhere
L: IntoLikeExpr,
Express a
LIKE expression. Read more§fn not_between<A, B>(self, a: A, b: B) -> Expr
fn not_between<A, B>(self, a: A, b: B) -> Expr
Express a
NOT BETWEEN expression. Read more§fn not_equals<C>(self, col: C) -> Exprwhere
C: IntoColumnRef,
fn not_equals<C>(self, col: C) -> Exprwhere
C: IntoColumnRef,
Express a not equal expression between two table columns,
you will mainly use this to relate identical value between two table columns. Read more
§fn not_in_subquery(self, sel: SelectStatement) -> Expr
fn not_in_subquery(self, sel: SelectStatement) -> Expr
Express a
NOT IN sub-query expression. Read more§fn not_like<L>(self, like: L) -> Exprwhere
L: IntoLikeExpr,
fn not_like<L>(self, like: L) -> Exprwhere
L: IntoLikeExpr,
Express a
NOT LIKE expression. Read more§fn right_shift<R>(self, right: R) -> Expr
fn right_shift<R>(self, right: R) -> Expr
Express a bitwise right shift. Read more
§impl<T> IntoCondition for T
impl<T> IntoCondition for T
fn into_condition(self) -> Condition
§impl<T> PgExpr for Twhere
T: ExprTrait,
impl<T> PgExpr for Twhere
T: ExprTrait,
§fn concatenate<T>(self, right: T) -> Expr
fn concatenate<T>(self, right: T) -> Expr
Express an postgres concatenate (
||) expression. Read more§fn matches<T>(self, expr: T) -> Expr
fn matches<T>(self, expr: T) -> Expr
Express an postgres fulltext search matches (
@@) expression. Read more§fn contains<T>(self, expr: T) -> Expr
fn contains<T>(self, expr: T) -> Expr
Express an postgres fulltext search contains (
@>) expression. Read more§fn contained<T>(self, expr: T) -> Expr
fn contained<T>(self, expr: T) -> Expr
Express an postgres fulltext search contained (
<@) expression. Read more§fn ilike<L>(self, like: L) -> Exprwhere
L: IntoLikeExpr,
fn ilike<L>(self, like: L) -> Exprwhere
L: IntoLikeExpr,
Express a
ILIKE expression. Read more§fn not_ilike<L>(self, like: L) -> Exprwhere
L: IntoLikeExpr,
fn not_ilike<L>(self, like: L) -> Exprwhere
L: IntoLikeExpr,
Express a
NOT ILIKE expression§fn get_json_field<T>(self, right: T) -> Expr
fn get_json_field<T>(self, right: T) -> Expr
Express a postgres retrieves JSON field as JSON value (
->). Read more