Enum sea_query::expr::SimpleExpr

source ·
pub enum SimpleExpr {
Show 14 variants Column(ColumnRef), Tuple(Vec<SimpleExpr>), Unary(UnOper, Box<SimpleExpr>), FunctionCall(FunctionCall), Binary(Box<SimpleExpr>, BinOper, Box<SimpleExpr>), SubQuery(Option<SubQueryOper>, Box<SubQueryStatement>), Value(Value), Values(Vec<Value>), Custom(String), CustomWithExpr(String, Vec<SimpleExpr>), Keyword(Keyword), AsEnum(DynIden, Box<SimpleExpr>), Case(Box<CaseStatement>), Constant(Value),
}
Expand description

Represents a Simple Expression in SQL.

SimpleExpr is a node in the expression tree and can represent identifiers, function calls, various operators and sub-queries.

Variants§

Implementations§

source§

impl SimpleExpr

source

pub fn not(self) -> SimpleExpr

Negates an expression with NOT.

Examples
use sea_query::{tests_cfg::*, *};

let query = Query::select()
    .column(Char::SizeW)
    .from(Char::Table)
    .and_where(Expr::col(Char::SizeW).eq(1).not())
    .to_owned();

assert_eq!(
    query.to_string(MysqlQueryBuilder),
    r#"SELECT `size_w` FROM `character` WHERE NOT `size_w` = 1"#
);
assert_eq!(
    query.to_string(PostgresQueryBuilder),
    r#"SELECT "size_w" FROM "character" WHERE NOT "size_w" = 1"#
);
assert_eq!(
    query.to_string(SqliteQueryBuilder),
    r#"SELECT "size_w" FROM "character" WHERE NOT "size_w" = 1"#
);
source

pub fn and(self, right: SimpleExpr) -> Self

Express a logical AND operation.

Examples
use sea_query::{*, tests_cfg::*};

let query = Query::select()
    .columns([Char::Character, Char::SizeW, Char::SizeH])
    .from(Char::Table)
    .cond_where(any![
        Expr::col(Char::SizeW).eq(1).and(Expr::col(Char::SizeH).eq(2)),
        Expr::col(Char::SizeW).eq(3).and(Expr::col(Char::SizeH).eq(4)),
    ])
    .to_owned();

assert_eq!(
    query.to_string(MysqlQueryBuilder),
    r#"SELECT `character`, `size_w`, `size_h` FROM `character` WHERE (`size_w` = 1 AND `size_h` = 2) OR (`size_w` = 3 AND `size_h` = 4)"#
);
assert_eq!(
    query.to_string(PostgresQueryBuilder),
    r#"SELECT "character", "size_w", "size_h" FROM "character" WHERE ("size_w" = 1 AND "size_h" = 2) OR ("size_w" = 3 AND "size_h" = 4)"#
);
assert_eq!(
    query.to_string(SqliteQueryBuilder),
    r#"SELECT "character", "size_w", "size_h" FROM "character" WHERE ("size_w" = 1 AND "size_h" = 2) OR ("size_w" = 3 AND "size_h" = 4)"#
);
source

pub fn or(self, right: SimpleExpr) -> Self

Express a logical OR operation.

Examples
use sea_query::{*, tests_cfg::*};

let query = Query::select()
    .columns([Char::Character, Char::SizeW, Char::SizeH])
    .from(Char::Table)
    .and_where(Expr::col(Char::SizeW).eq(1).or(Expr::col(Char::SizeH).eq(2)))
    .and_where(Expr::col(Char::SizeW).eq(3).or(Expr::col(Char::SizeH).eq(4)))
    .to_owned();

assert_eq!(
    query.to_string(MysqlQueryBuilder),
    r#"SELECT `character`, `size_w`, `size_h` FROM `character` WHERE (`size_w` = 1 OR `size_h` = 2) AND (`size_w` = 3 OR `size_h` = 4)"#
);
assert_eq!(
    query.to_string(PostgresQueryBuilder),
    r#"SELECT "character", "size_w", "size_h" FROM "character" WHERE ("size_w" = 1 OR "size_h" = 2) AND ("size_w" = 3 OR "size_h" = 4)"#
);
assert_eq!(
    query.to_string(SqliteQueryBuilder),
    r#"SELECT "character", "size_w", "size_h" FROM "character" WHERE ("size_w" = 1 OR "size_h" = 2) AND ("size_w" = 3 OR "size_h" = 4)"#
);
source

pub fn eq<V>(self, v: V) -> SimpleExpr
where V: Into<SimpleExpr>,

Express an equal (=) expression.

Examples
use sea_query::{tests_cfg::*, *};

let query = Query::select()
    .columns([Char::Character, Char::SizeW, Char::SizeH])
    .from(Char::Table)
    .and_where(Expr::value("What!").eq("Nothing"))
    .to_owned();

assert_eq!(
    query.to_string(MysqlQueryBuilder),
    r#"SELECT `character`, `size_w`, `size_h` FROM `character` WHERE 'What!' = 'Nothing'"#
);
assert_eq!(
    query.to_string(PostgresQueryBuilder),
    r#"SELECT "character", "size_w", "size_h" FROM "character" WHERE 'What!' = 'Nothing'"#
);
assert_eq!(
    query.to_string(SqliteQueryBuilder),
    r#"SELECT "character", "size_w", "size_h" FROM "character" WHERE 'What!' = 'Nothing'"#
);
source

pub fn ne<V>(self, v: V) -> SimpleExpr
where V: Into<SimpleExpr>,

Express a not equal (<>) expression.

Examples
use sea_query::{tests_cfg::*, *};

let query = Query::select()
    .columns([Char::Character, Char::SizeW, Char::SizeH])
    .from(Char::Table)
    .and_where(Expr::value("Morning").ne("Good"))
    .to_owned();

assert_eq!(
    query.to_string(MysqlQueryBuilder),
    r#"SELECT `character`, `size_w`, `size_h` FROM `character` WHERE 'Morning' <> 'Good'"#
);
assert_eq!(
    query.to_string(PostgresQueryBuilder),
    r#"SELECT "character", "size_w", "size_h" FROM "character" WHERE 'Morning' <> 'Good'"#
);
assert_eq!(
    query.to_string(SqliteQueryBuilder),
    r#"SELECT "character", "size_w", "size_h" FROM "character" WHERE 'Morning' <> 'Good'"#
);
source

pub fn add<T>(self, right: T) -> Self
where T: Into<SimpleExpr>,

Perform addition with another SimpleExpr.

Examples
use sea_query::{tests_cfg::*, *};

let query = Query::select()
    .expr(
        Expr::col(Char::SizeW)
            .max()
            .add(Expr::col(Char::SizeH).max()),
    )
    .from(Char::Table)
    .to_owned();

assert_eq!(
    query.to_string(MysqlQueryBuilder),
    r#"SELECT MAX(`size_w`) + MAX(`size_h`) FROM `character`"#
);
assert_eq!(
    query.to_string(PostgresQueryBuilder),
    r#"SELECT MAX("size_w") + MAX("size_h") FROM "character""#
);
assert_eq!(
    query.to_string(SqliteQueryBuilder),
    r#"SELECT MAX("size_w") + MAX("size_h") FROM "character""#
);
source

pub fn mul<T>(self, right: T) -> Self
where T: Into<SimpleExpr>,

Perform multiplication with another SimpleExpr.

Examples
use sea_query::{tests_cfg::*, *};

let query = Query::select()
    .expr(
        Expr::col(Char::SizeW)
            .max()
            .mul(Expr::col(Char::SizeH).max()),
    )
    .from(Char::Table)
    .to_owned();

assert_eq!(
    query.to_string(MysqlQueryBuilder),
    r#"SELECT MAX(`size_w`) * MAX(`size_h`) FROM `character`"#
);
assert_eq!(
    query.to_string(PostgresQueryBuilder),
    r#"SELECT MAX("size_w") * MAX("size_h") FROM "character""#
);
assert_eq!(
    query.to_string(SqliteQueryBuilder),
    r#"SELECT MAX("size_w") * MAX("size_h") FROM "character""#
);
source

pub fn div<T>(self, right: T) -> Self
where T: Into<SimpleExpr>,

Perform division with another SimpleExpr.

Examples
use sea_query::{tests_cfg::*, *};

let query = Query::select()
    .expr(
        Expr::col(Char::SizeW)
            .max()
            .div(Expr::col(Char::SizeH).max()),
    )
    .from(Char::Table)
    .to_owned();

assert_eq!(
    query.to_string(MysqlQueryBuilder),
    r#"SELECT MAX(`size_w`) / MAX(`size_h`) FROM `character`"#
);
assert_eq!(
    query.to_string(PostgresQueryBuilder),
    r#"SELECT MAX("size_w") / MAX("size_h") FROM "character""#
);
assert_eq!(
    query.to_string(SqliteQueryBuilder),
    r#"SELECT MAX("size_w") / MAX("size_h") FROM "character""#
);
source

pub fn sub<T>(self, right: T) -> Self
where T: Into<SimpleExpr>,

Perform subtraction with another SimpleExpr.

Examples
use sea_query::{tests_cfg::*, *};

let query = Query::select()
    .expr(
        Expr::col(Char::SizeW)
            .max()
            .sub(Expr::col(Char::SizeW).min()),
    )
    .from(Char::Table)
    .to_owned();

assert_eq!(
    query.to_string(MysqlQueryBuilder),
    r#"SELECT MAX(`size_w`) - MIN(`size_w`) FROM `character`"#
);
assert_eq!(
    query.to_string(PostgresQueryBuilder),
    r#"SELECT MAX("size_w") - MIN("size_w") FROM "character""#
);
assert_eq!(
    query.to_string(SqliteQueryBuilder),
    r#"SELECT MAX("size_w") - MIN("size_w") FROM "character""#
);
source

pub fn cast_as<T>(self, type_name: T) -> Self
where T: IntoIden,

Express a CAST AS expression.

Examples
use sea_query::{tests_cfg::*, *};

let query = Query::select()
    .expr(Expr::value("1").cast_as(Alias::new("integer")))
    .to_owned();

assert_eq!(
    query.to_string(MysqlQueryBuilder),
    r#"SELECT CAST('1' AS integer)"#
);
assert_eq!(
    query.to_string(PostgresQueryBuilder),
    r#"SELECT CAST('1' AS integer)"#
);
assert_eq!(
    query.to_string(SqliteQueryBuilder),
    r#"SELECT CAST('1' AS integer)"#
);
source

pub fn binary<O, T>(self, op: O, right: T) -> Self
where O: Into<BinOper>, T: Into<SimpleExpr>,

Create any binary operation

Examples
use sea_query::{*, tests_cfg::*};

let query = Query::select()
    .columns([Char::Character, Char::SizeW, Char::SizeH])
    .from(Char::Table)
    .cond_where(all![
        Expr::value(10).binary(BinOper::SmallerThan, Expr::col(Char::SizeW)),
        Expr::value(20).binary(BinOper::GreaterThan, Expr::col(Char::SizeH))
    ])
    .to_owned();
assert_eq!(
    query.to_string(MysqlQueryBuilder),
    r#"SELECT `character`, `size_w`, `size_h` FROM `character` WHERE 10 < `size_w` AND 20 > `size_h`"#
);
assert_eq!(
    query.to_string(PostgresQueryBuilder),
    r#"SELECT "character", "size_w", "size_h" FROM "character" WHERE 10 < "size_w" AND 20 > "size_h""#
);
assert_eq!(
    query.to_string(SqliteQueryBuilder),
    r#"SELECT "character", "size_w", "size_h" FROM "character" WHERE 10 < "size_w" AND 20 > "size_h""#
);
source

pub fn like<L: IntoLikeExpr>(self, like: L) -> Self

Express a LIKE expression.

Examples
use sea_query::{*, tests_cfg::*};

let query = Query::select()
    .columns([Char::Character, Char::SizeW, Char::SizeH])
    .from(Char::Table)
    .and_where(Expr::col((Char::Table, Char::FontId)).cast_as(Alias::new("TEXT")).like("a%"))
    .to_owned();

assert_eq!(
    query.to_string(MysqlQueryBuilder),
    r#"SELECT `character`, `size_w`, `size_h` FROM `character` WHERE CAST(`character`.`font_id` AS TEXT) LIKE 'a%'"#
);
assert_eq!(
    query.to_string(PostgresQueryBuilder),
    r#"SELECT "character", "size_w", "size_h" FROM "character" WHERE CAST("character"."font_id" AS TEXT) LIKE 'a%'"#
);
assert_eq!(
    query.to_string(SqliteQueryBuilder),
    r#"SELECT "character", "size_w", "size_h" FROM "character" WHERE CAST("character"."font_id" AS TEXT) LIKE 'a%'"#
);
source

pub fn not_like<L: IntoLikeExpr>(self, like: L) -> Self

Express a NOT LIKE expression

Trait Implementations§

source§

impl Clone for SimpleExpr

source§

fn clone(&self) -> SimpleExpr

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for SimpleExpr

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<ColumnRef> for SimpleExpr

source§

fn from(col: ColumnRef) -> Self

Converts to this type from the input type.
source§

impl From<Expr> for SimpleExpr

source§

fn from(src: Expr) -> Self

Convert into SimpleExpr

source§

impl From<FunctionCall> for SimpleExpr

source§

fn from(func: FunctionCall) -> Self

Converts to this type from the input type.
source§

impl From<Keyword> for SimpleExpr

source§

fn from(k: Keyword) -> Self

Converts to this type from the input type.
source§

impl From<SimpleExpr> for ConditionExpression

source§

fn from(condition: SimpleExpr) -> Self

Converts to this type from the input type.
source§

impl<T> From<T> for SimpleExpr
where T: Into<Value>,

source§

fn from(v: T) -> Self

Converts to this type from the input type.
source§

impl Into<SimpleExpr> for CaseStatement

source§

fn into(self) -> SimpleExpr

Converts this type into the (usually inferred) input type.
source§

impl IntoCondition for SimpleExpr

source§

impl PartialEq for SimpleExpr

source§

fn eq(&self, other: &SimpleExpr) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PgExpr for SimpleExpr

Available on crate feature backend-postgres only.
source§

fn concatenate<T>(self, right: T) -> SimpleExpr
where T: Into<SimpleExpr>,

Express an postgres concatenate (||) expression. Read more
source§

fn concat<T>(self, right: T) -> SimpleExpr
where T: Into<SimpleExpr>,

source§

fn matches<T>(self, expr: T) -> SimpleExpr
where T: Into<SimpleExpr>,

Express an postgres fulltext search matches (@@) expression. Read more
source§

fn contains<T>(self, expr: T) -> SimpleExpr
where T: Into<SimpleExpr>,

Express an postgres fulltext search contains (@>) expression. Read more
source§

fn contained<T>(self, expr: T) -> SimpleExpr
where T: Into<SimpleExpr>,

Express an postgres fulltext search contained (<@) expression. Read more
source§

fn ilike<L>(self, like: L) -> SimpleExpr
where L: IntoLikeExpr,

Express a ILIKE expression. Read more
source§

fn not_ilike<L>(self, like: L) -> SimpleExpr
where L: IntoLikeExpr,

Express a NOT ILIKE expression
source§

fn get_json_field<T>(self, right: T) -> SimpleExpr
where T: Into<SimpleExpr>,

Express a postgres retrieves JSON field as JSON value (->). Read more
source§

fn cast_json_field<T>(self, right: T) -> SimpleExpr
where T: Into<SimpleExpr>,

Express a postgres retrieves JSON field and casts it to an appropriate SQL type (->>). Read more
source§

impl SqliteExpr for SimpleExpr

Available on crate feature backend-sqlite only.
source§

fn glob<T>(self, right: T) -> SimpleExpr
where T: Into<SimpleExpr>,

Express an sqlite GLOB operator. Read more
source§

fn matches<T>(self, right: T) -> SimpleExpr
where T: Into<SimpleExpr>,

Express an sqlite MATCH operator. Read more
source§

fn get_json_field<T>(self, right: T) -> SimpleExpr
where T: Into<SimpleExpr>,

Express an sqlite retrieves JSON field as JSON value (->). Read more
source§

fn cast_json_field<T>(self, right: T) -> SimpleExpr
where T: Into<SimpleExpr>,

Express an sqlite retrieves JSON field and casts it to an appropriate SQL type (->>). Read more
source§

impl StructuralPartialEq for SimpleExpr

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.