pub enum SimpleExpr {
Show 14 variants Column(ColumnRef), Tuple(Vec<SimpleExpr, Global>), Unary(UnOper, Box<SimpleExpr, Global>), FunctionCall(FunctionCall), Binary(Box<SimpleExpr, Global>, BinOper, Box<SimpleExpr, Global>), SubQuery(Option<SubQueryOper>, Box<SubQueryStatement, Global>), Value(Value), Values(Vec<Value, Global>), Custom(String), CustomWithExpr(String, Vec<SimpleExpr, Global>), Keyword(Keyword), AsEnum(Arc<dyn Iden, Global>, Box<SimpleExpr, Global>), Case(Box<CaseStatement, Global>), 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§

§

impl SimpleExpr

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"#
);

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

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))"#
);

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

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))"#
);

pub fn eq<V>(self, v: V) -> SimpleExprwhere 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'"#
);

pub fn ne<V>(self, v: V) -> SimpleExprwhere 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'"#
);

pub fn equals<T>(self, right: T) -> SimpleExprwhere T: Into<SimpleExpr>,

👎Deprecated since 0.28.0: Please use the [SimpleExpr::eq]

pub fn not_equals<T>(self, right: T) -> SimpleExprwhere T: Into<SimpleExpr>,

👎Deprecated since 0.28.0: Please use the [SimpleExpr::ne]

pub fn add<T>(self, right: T) -> SimpleExprwhere 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""#
);

pub fn mul<T>(self, right: T) -> SimpleExprwhere 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""#
);

pub fn div<T>(self, right: T) -> SimpleExprwhere 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""#
);

pub fn sub<T>(self, right: T) -> SimpleExprwhere 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""#
);

pub fn cast_as<T>(self, type_name: T) -> SimpleExprwhere 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)"#
);

pub fn binary<O, T>(self, op: O, right: T) -> SimpleExprwhere 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""#
);

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

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%'"#
);

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

Express a NOT LIKE expression

Trait Implementations§

§

impl Clone for SimpleExpr

§

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
§

impl Debug for SimpleExpr

§

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

Formats the value using the given formatter. Read more
§

impl From<ColumnRef> for SimpleExpr

§

fn from(col: ColumnRef) -> SimpleExpr

Converts to this type from the input type.
§

impl From<Expr> for SimpleExpr

§

fn from(src: Expr) -> SimpleExpr

Convert into SimpleExpr

§

impl From<FunctionCall> for SimpleExpr

§

fn from(func: FunctionCall) -> SimpleExpr

Converts to this type from the input type.
§

impl From<Keyword> for SimpleExpr

§

fn from(k: Keyword) -> SimpleExpr

Converts to this type from the input type.
§

impl From<SimpleExpr> for ConditionExpression

§

fn from(condition: SimpleExpr) -> ConditionExpression

Converts to this type from the input type.
§

impl<T> From<T> for SimpleExprwhere T: Into<Value>,

§

fn from(v: T) -> SimpleExpr

Converts to this type from the input type.
§

impl Into<SimpleExpr> for CaseStatement

§

fn into(self) -> SimpleExpr

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

impl IntoCondition for SimpleExpr

source§

impl IntoSimpleExpr for SimpleExpr

source§

fn into_simple_expr(self) -> SimpleExpr

Method to perform the conversion
§

impl PgExpr for SimpleExpr

§

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

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

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

§

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

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

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

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

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

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

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

Express a LIKE expression. Read more
§

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

Express a NOT ILIKE expression
§

impl SqliteExpr for SimpleExpr

§

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

Express an sqlite MATCH operator. Read more
§

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

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

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

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

Auto Trait Implementations§

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere 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> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere 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.

§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> ToOwned for Twhere 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 Twhere 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 Twhere 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.
§

impl<V, T> VZip<V> for Twhere V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more