Trait diesel::expression::BoxableExpression [−][src]
pub trait BoxableExpression<QS, DB> where
DB: Backend,
Self: Expression,
Self: SelectableExpression<QS>,
Self: NonAggregate,
Self: QueryFragment<DB>, { }
Expand description
Helper trait used when boxing expressions.
In Rust you cannot create a trait object with more than one trait.
This type has all of the additional traits you would want when using
Box<Expression>
as a single trait object.
This is typically used as the return type of a function. For cases where you want to dynamically construct a query, boxing the query is usually more ergonomic.
Examples
use diesel::sql_types::Bool;
enum Search {
Id(i32),
Name(String),
}
type DB = diesel::sqlite::Sqlite;
fn find_user(search: Search) -> Box<BoxableExpression<users::table, DB, SqlType = Bool>> {
match search {
Search::Id(id) => Box::new(users::id.eq(id)),
Search::Name(name) => Box::new(users::name.eq(name)),
}
}
let user_one = users::table
.filter(find_user(Search::Id(1)))
.first(&conn)?;
assert_eq!((1, String::from("Sean")), user_one);
let tess = users::table
.filter(find_user(Search::Name("Tess".into())))
.first(&conn)?;
assert_eq!((2, String::from("Tess")), tess);
Trait Implementations
Can the SQL generated by Self
be uniquely identified by its type? Read more