pub trait ExpressionMethods: Sized + Expression {
Show 14 methods
// Provided methods
fn eq<T>(
self,
other: T,
) -> Grouped<Eq<Self, <T as AsExpression<Self::SqlType>>::Expression>>
where Self::SqlType: SqlType,
T: AsExpression<Self::SqlType> { ... }
fn ne<T>(
self,
other: T,
) -> Grouped<NotEq<Self, <T as AsExpression<Self::SqlType>>::Expression>>
where Self::SqlType: SqlType,
T: AsExpression<Self::SqlType> { ... }
fn eq_any<T>(
self,
values: T,
) -> Grouped<In<Self, <T as AsInExpression<Self::SqlType>>::InExpression>>
where Self::SqlType: SqlType,
T: AsInExpression<Self::SqlType> { ... }
fn ne_all<T>(
self,
values: T,
) -> Grouped<NotIn<Self, <T as AsInExpression<Self::SqlType>>::InExpression>>
where Self::SqlType: SqlType,
T: AsInExpression<Self::SqlType> { ... }
fn is_null(self) -> Grouped<IsNull<Self>> { ... }
fn is_not_null(self) -> Grouped<IsNotNull<Self>> { ... }
fn gt<T>(
self,
other: T,
) -> Grouped<Gt<Self, <T as AsExpression<Self::SqlType>>::Expression>>
where Self::SqlType: SqlType,
T: AsExpression<Self::SqlType> { ... }
fn ge<T>(
self,
other: T,
) -> Grouped<GtEq<Self, <T as AsExpression<Self::SqlType>>::Expression>>
where Self::SqlType: SqlType,
T: AsExpression<Self::SqlType> { ... }
fn lt<T>(
self,
other: T,
) -> Grouped<Lt<Self, <T as AsExpression<Self::SqlType>>::Expression>>
where Self::SqlType: SqlType,
T: AsExpression<Self::SqlType> { ... }
fn le<T>(
self,
other: T,
) -> Grouped<LtEq<Self, <T as AsExpression<Self::SqlType>>::Expression>>
where Self::SqlType: SqlType,
T: AsExpression<Self::SqlType> { ... }
fn between<T, U>(
self,
lower: T,
upper: U,
) -> Grouped<Between<Self, And<<T as AsExpression<Self::SqlType>>::Expression, <U as AsExpression<Self::SqlType>>::Expression>>>
where Self::SqlType: SqlType,
T: AsExpression<Self::SqlType>,
U: AsExpression<Self::SqlType> { ... }
fn not_between<T, U>(
self,
lower: T,
upper: U,
) -> Grouped<NotBetween<Self, And<<T as AsExpression<Self::SqlType>>::Expression, <U as AsExpression<Self::SqlType>>::Expression>>>
where Self::SqlType: SqlType,
T: AsExpression<Self::SqlType>,
U: AsExpression<Self::SqlType> { ... }
fn desc(self) -> Desc<Self> { ... }
fn asc(self) -> Asc<Self> { ... }
}Expand description
Methods present on all expressions, except tuples
Provided Methods§
Sourcefn eq<T>(
self,
other: T,
) -> Grouped<Eq<Self, <T as AsExpression<Self::SqlType>>::Expression>>
fn eq<T>( self, other: T, ) -> Grouped<Eq<Self, <T as AsExpression<Self::SqlType>>::Expression>>
Creates a SQL = expression.
Note that this function follows SQL semantics around None/null values,
so eq(None) will never match. Use is_null instead.
To get behavior that is more like the Rust = operator you can also use the
sqlite-specific is
or the
postgres-specific is_not_distinct_from
.
§Example
let data = users.select(id).filter(name.eq("Sean"));
assert_eq!(Ok(1), data.first(connection));Matching against None follows SQL semantics:
let data = animals
.select(species)
.filter(name.eq::<Option<String>>(None))
.first::<String>(connection);
assert_eq!(Err(diesel::NotFound), data);
let data = animals
.select(species)
.filter(name.is_null())
.first::<String>(connection)?;
assert_eq!("spider", data);Sourcefn ne<T>(
self,
other: T,
) -> Grouped<NotEq<Self, <T as AsExpression<Self::SqlType>>::Expression>>
fn ne<T>( self, other: T, ) -> Grouped<NotEq<Self, <T as AsExpression<Self::SqlType>>::Expression>>
Creates a SQL != expression.
§Example
let data = users.select(id).filter(name.ne("Sean"));
assert_eq!(Ok(2), data.first(connection));Sourcefn eq_any<T>(
self,
values: T,
) -> Grouped<In<Self, <T as AsInExpression<Self::SqlType>>::InExpression>>
fn eq_any<T>( self, values: T, ) -> Grouped<In<Self, <T as AsInExpression<Self::SqlType>>::InExpression>>
Creates a SQL IN statement.
Queries using this method will not typically be
placed in the prepared statement cache. However,
in cases when a subquery is passed to the method, that
query will use the cache (assuming the subquery
itself is safe to cache).
On PostgreSQL, this method automatically performs a = ANY()
query.
§Example
let data = users::table.select(users::id).filter(users::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::table.select(users::id).filter(users::name.eq_any(Vec::<String>::new()));
assert_eq!(Ok(vec![]), data.load::<i32>(connection));
// Calling `eq_any` with a subquery is the same as using
// `WHERE {column} IN {subquery}`.
let subquery = users::table.filter(users::name.eq("Sean")).select(users::id).into_boxed();
let data = posts::table.select(posts::id).filter(posts::user_id.eq_any(subquery));
assert_eq!(Ok(vec![1, 2]), data.load::<i32>(connection));
Sourcefn ne_all<T>(
self,
values: T,
) -> Grouped<NotIn<Self, <T as AsInExpression<Self::SqlType>>::InExpression>>
fn ne_all<T>( self, values: T, ) -> Grouped<NotIn<Self, <T as AsInExpression<Self::SqlType>>::InExpression>>
Creates a SQL NOT IN statement.
Queries using this method will not be
placed in the prepared statement cache. On PostgreSQL, this
method automatically performs a != ALL() query.
§Example
let data = users.select(id).filter(name.ne_all(vec!["Sean", "Jim"]));
assert_eq!(Ok(vec![2]), data.load(connection));
let data = users.select(id).filter(name.ne_all(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_all(Vec::<String>::new()));
assert_eq!(Ok(vec![1, 2, 3]), data.load(connection));Sourcefn is_null(self) -> Grouped<IsNull<Self>>
fn is_null(self) -> Grouped<IsNull<Self>>
Creates a SQL IS NULL expression.
§Example
let data = animals
.select(species)
.filter(name.is_null())
.first::<String>(connection)?;
assert_eq!("spider", data);Sourcefn is_not_null(self) -> Grouped<IsNotNull<Self>>
fn is_not_null(self) -> Grouped<IsNotNull<Self>>
Creates a SQL IS NOT NULL expression.
§Example
let data = animals
.select(species)
.filter(name.is_not_null())
.first::<String>(connection)?;
assert_eq!("dog", data);Sourcefn gt<T>(
self,
other: T,
) -> Grouped<Gt<Self, <T as AsExpression<Self::SqlType>>::Expression>>
fn gt<T>( self, other: T, ) -> Grouped<Gt<Self, <T as AsExpression<Self::SqlType>>::Expression>>
Creates a SQL > expression.
§Example
let data = users
.select(name)
.filter(id.gt(1))
.first::<String>(connection)?;
assert_eq!("Tess", data);Sourcefn ge<T>(
self,
other: T,
) -> Grouped<GtEq<Self, <T as AsExpression<Self::SqlType>>::Expression>>
fn ge<T>( self, other: T, ) -> Grouped<GtEq<Self, <T as AsExpression<Self::SqlType>>::Expression>>
Creates a SQL >= expression.
§Example
let data = users
.select(name)
.filter(id.ge(2))
.first::<String>(connection)?;
assert_eq!("Tess", data);Sourcefn lt<T>(
self,
other: T,
) -> Grouped<Lt<Self, <T as AsExpression<Self::SqlType>>::Expression>>
fn lt<T>( self, other: T, ) -> Grouped<Lt<Self, <T as AsExpression<Self::SqlType>>::Expression>>
Creates a SQL < expression.
§Example
let data = users
.select(name)
.filter(id.lt(2))
.first::<String>(connection)?;
assert_eq!("Sean", data);Sourcefn le<T>(
self,
other: T,
) -> Grouped<LtEq<Self, <T as AsExpression<Self::SqlType>>::Expression>>
fn le<T>( self, other: T, ) -> Grouped<LtEq<Self, <T as AsExpression<Self::SqlType>>::Expression>>
Creates a SQL <= expression.
§Example
let data = users
.select(name)
.filter(id.le(2))
.first::<String>(connection)?;
assert_eq!("Sean", data);Sourcefn between<T, U>(
self,
lower: T,
upper: U,
) -> Grouped<Between<Self, And<<T as AsExpression<Self::SqlType>>::Expression, <U as AsExpression<Self::SqlType>>::Expression>>>
fn between<T, U>( self, lower: T, upper: U, ) -> Grouped<Between<Self, And<<T as AsExpression<Self::SqlType>>::Expression, <U as AsExpression<Self::SqlType>>::Expression>>>
Creates a SQL BETWEEN expression using the given lower and upper
bounds.
§Example
let data = animals
.select(species)
.filter(legs.between(2, 6))
.first(connection);
assert_eq!(Ok("dog".to_string()), data);Sourcefn not_between<T, U>(
self,
lower: T,
upper: U,
) -> Grouped<NotBetween<Self, And<<T as AsExpression<Self::SqlType>>::Expression, <U as AsExpression<Self::SqlType>>::Expression>>>
fn not_between<T, U>( self, lower: T, upper: U, ) -> Grouped<NotBetween<Self, And<<T as AsExpression<Self::SqlType>>::Expression, <U as AsExpression<Self::SqlType>>::Expression>>>
Creates a SQL NOT BETWEEN expression using the given lower and upper
bounds.
§Example
let data = animals
.select(species)
.filter(legs.not_between(2, 6))
.first::<String>(connection)?;
assert_eq!("spider", data);Sourcefn desc(self) -> Desc<Self>
fn desc(self) -> Desc<Self>
Creates a SQL DESC expression, representing this expression in
descending order.
§Example
let names = users
.select(name)
.order(name.desc())
.load::<String>(connection)?;
assert_eq!(vec!["Tess", "Sean"], names);Sourcefn asc(self) -> Asc<Self>
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<dyn BoxableExpression<users, DB, SqlType = NotSelectable>> =
if order == "name" {
Box::new(name.desc())
} else {
Box::new(id.asc())
};Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.