Trait diesel::expression::BoxableExpression [] [src]

pub trait BoxableExpression<QS, DB> where
    DB: Backend,
    Self: Expression,
    Self: SelectableExpression<QS>,
    Self: NonAggregate,
    Self: QueryFragment<DB>, 
{ }

Helper trait used when boxing expressions. This exists to work around the fact that Rust will not let us use non-core types as bounds on a trait object (you could not return Box<Expression+NonAggregate>)

Examples


#[derive(Queryable)]
struct User {
    id: i32,
    name: String,
}

fn main() {
    let conn = establish_connection();
    let where_clause: Box<BoxableExpression<users::table, _, SqlType=types::Bool>>;
    let search_by_id = true;

    if search_by_id {
        where_clause = Box::new(users::id.eq(1))
    } else {
        where_clause = Box::new(users::name.eq("Tess".to_string()))
    }

    // BoxableExpression can be chained
    let where_clause = where_clause.and(Box::new(users::id.ne(10)));

    let result = users::table.filter(where_clause).load::<User>(&conn);
    assert_eq!(result, Ok(vec![User { id: 1, name: "Sean".into() }]));
}

Trait Implementations

impl<QS, ST, DB> QueryId for BoxableExpression<QS, DB, SqlType = ST>
[src]

Implementors