Trait diesel::expression::expression_methods::global_expression_methods::ExpressionMethods
[−]
[src]
pub trait ExpressionMethods: Expression + Sized { fn aliased(self, alias: &str) -> Aliased<Self> { ... } fn eq<T: AsExpression<Self::SqlType>>(self,
other: T)
-> Eq<Self, T::Expression> { ... } fn ne<T: AsExpression<Self::SqlType>>(self,
other: T)
-> NotEq<Self, T::Expression> { ... } fn eq_any<T>(self, values: T) -> In<Self, T::InExpression> where T: AsInExpression<Self::SqlType> { ... } fn ne_any<T>(self, values: T) -> NotIn<Self, T::InExpression> where T: AsInExpression<Self::SqlType> { ... } fn is_null(self) -> IsNull<Self> { ... } fn is_not_null(self) -> IsNotNull<Self> { ... } fn gt<T: AsExpression<Self::SqlType>>(self,
other: T)
-> Gt<Self, T::Expression> { ... } fn ge<T: AsExpression<Self::SqlType>>(self,
other: T)
-> GtEq<Self, T::Expression> { ... } fn lt<T: AsExpression<Self::SqlType>>(self,
other: T)
-> Lt<Self, T::Expression> { ... } fn le<T: AsExpression<Self::SqlType>>(self,
other: T)
-> LtEq<Self, T::Expression> { ... } fn between<T: AsExpression<Self::SqlType>>(self,
other: Range<T>)
-> Between<Self, And<T::Expression, T::Expression>> { ... } fn not_between<T: AsExpression<Self::SqlType>>(self,
other: Range<T>)
-> NotBetween<Self, And<T::Expression, T::Expression>> { ... } fn desc(self) -> Desc<Self> { ... } fn asc(self) -> Asc<Self> { ... } fn nullable(self) -> Nullable<Self> { ... } }
Provided Methods
fn aliased(self, alias: &str) -> Aliased<Self>
Alias an expression for use alongside
with
.
While you will need to give it a name to alias as, you should not need to reference the alias elsewhere. You can pass the returned expression anywhere you want to reference the alias.
Example
let query = plain_to_tsquery(search_text).aliased("q"); let rank = ts_rank(query, indexed_search_column).aliased("rank"); crates.with(query).with(rank) .filter(query.matches(indexed_search_column)) .order(rank.desc())
fn eq<T: AsExpression<Self::SqlType>>(self, other: T) -> Eq<Self, T::Expression>
Creates a SQL =
expression.
Example
let data = users.select(id).filter(name.eq("Sean")); assert_eq!(Ok(1), data.first(&connection));
fn ne<T: AsExpression<Self::SqlType>>(self,
other: T)
-> NotEq<Self, T::Expression>
other: T)
-> NotEq<Self, T::Expression>
Creates a SQL !=
expression.
Example
let data = users.select(id).filter(name.ne("Sean")); assert_eq!(Ok(2), data.first(&connection));
fn eq_any<T>(self, values: T) -> In<Self, T::InExpression> where T: AsInExpression<Self::SqlType>
Creates a SQL IN
statement. Queries using this method will not be
placed in the prepared statement cache. On PostgreSQL, you should use
eq(any())
instead. This method may change in the future to
automatically perform = ANY
on PostgreSQL.
Example
let data = users.select(id).filter(name.eq_any(vec!["Sean", "Jim"])); assert_eq!(Ok(vec![1, 3]), data.load(&connection)); // Calling `eq_any` with an empty array is the same as doing `WHERE 1=0` let data = users.select(id).filter(name.eq_any(Vec::<String>::new())); assert_eq!(Ok(vec![]), data.load::<i32>(&connection));
fn ne_any<T>(self, values: T) -> NotIn<Self, T::InExpression> where T: AsInExpression<Self::SqlType>
Creates a SQL NOT IN
statement. Queries using this method will not be
placed in the prepared statement cache. On PostgreSQL, you should use
ne(any())
instead. This method may change in the future to
automatically perform != ANY
on PostgreSQL.
Example
let data = users.select(id).filter(name.ne_any(vec!["Sean", "Jim"])); assert_eq!(Ok(vec![2]), data.load(&connection)); let data = users.select(id).filter(name.ne_any(vec!["Tess"])); assert_eq!(Ok(vec![1, 3]), data.load(&connection)); // Calling `ne_any` with an empty array is the same as doing `WHERE 1=1` let data = users.select(id).filter(name.ne_any(Vec::<String>::new())); assert_eq!(Ok(vec![1, 2, 3]), data.load(&connection));
fn is_null(self) -> IsNull<Self>
Creates a SQL IS NULL
expression.
fn is_not_null(self) -> IsNotNull<Self>
Creates a SQL IS NOT NULL
expression.
fn gt<T: AsExpression<Self::SqlType>>(self, other: T) -> Gt<Self, T::Expression>
Creates a SQL >
expression.
Example
let data = users.select(name).filter(id.gt(1)); assert_eq!(Ok("Tess".to_string()), data.first(&connection));
fn ge<T: AsExpression<Self::SqlType>>(self,
other: T)
-> GtEq<Self, T::Expression>
other: T)
-> GtEq<Self, T::Expression>
Creates a SQL >=
expression.
Example
let data = users.select(name).filter(id.ge(2)); assert_eq!(Ok("Tess".to_string()), data.first(&connection));
fn lt<T: AsExpression<Self::SqlType>>(self, other: T) -> Lt<Self, T::Expression>
Creates a SQL <
expression.
Example
let data = users.select(name).filter(id.lt(2)); assert_eq!(Ok("Sean".to_string()), data.first(&connection));
fn le<T: AsExpression<Self::SqlType>>(self,
other: T)
-> LtEq<Self, T::Expression>
other: T)
-> LtEq<Self, T::Expression>
Creates a SQL <=
expression.
Example
let data = users.select(name).filter(id.le(2)); assert_eq!(Ok("Sean".to_string()), data.first(&connection));
fn between<T: AsExpression<Self::SqlType>>(self,
other: Range<T>)
-> Between<Self, And<T::Expression, T::Expression>>
other: Range<T>)
-> Between<Self, And<T::Expression, T::Expression>>
Creates a SQL BETWEEN
expression using the given range.
fn not_between<T: AsExpression<Self::SqlType>>(self,
other: Range<T>)
-> NotBetween<Self, And<T::Expression, T::Expression>>
other: Range<T>)
-> NotBetween<Self, And<T::Expression, T::Expression>>
Creates a SQL NOT BETWEEN
expression using the given range.
fn desc(self) -> Desc<Self>
Creates a SQL DESC
expression, representing this expression in
descending order.
fn asc(self) -> Asc<Self>
Creates a SQL ASC
expression, representing this expression in
ascending order.
This is the same as leaving the direction unspecified. It is useful if you need to provide an unknown ordering, and need to box the return value of a function.
Example
let ordering: Box<BoxableExpression<users, DB, SqlType=(), SqlTypeForSelect=()>> = if order == "name" { Box::new(name.desc()) } else { Box::new(id.asc()) };
fn nullable(self) -> Nullable<Self>
Converts this potentially non-null expression into one which is treated as nullable. This method has no impact on the generated SQL, and is only used to allow certain comparisons that would otherwise fail to compile.
Example
table! { users { id -> Integer, name -> VarChar, } } table! { posts { id -> Integer, user_id -> Integer, author_name -> Nullable<VarChar>, } } fn main() { use self::users::dsl::*; use self::posts::dsl::{posts, author_name}; let connection = establish_connection(); let data = users.inner_join(posts) .filter(name.nullable().eq(author_name)) .select(name) .load::<String>(&connection); println!("{:?}", data); }
Implementors
impl<T: Expression> ExpressionMethods for T