1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
use std::marker::PhantomData; use super::*; use backend::Backend; use query_builder::*; use result::QueryResult; use serialize::ToSql; use sql_types::HasSqlType; #[derive(Debug, Clone, Copy, DieselNumericOps)] pub struct Bound<T, U> { item: U, _marker: PhantomData<T>, } impl<T, U> Bound<T, U> { pub fn new(item: U) -> Self { Bound { item: item, _marker: PhantomData, } } } impl<T, U> Expression for Bound<T, U> { type SqlType = T; } impl<T, U, DB> QueryFragment<DB> for Bound<T, U> where DB: Backend + HasSqlType<T>, U: ToSql<T, DB>, { fn walk_ast(&self, mut pass: AstPass<DB>) -> QueryResult<()> { pass.push_bind_param(&self.item)?; Ok(()) } } impl<T: QueryId, U> QueryId for Bound<T, U> { type QueryId = Bound<T::QueryId, ()>; const HAS_STATIC_QUERY_ID: bool = T::HAS_STATIC_QUERY_ID; } impl<T, U, QS> SelectableExpression<QS> for Bound<T, U> where Bound<T, U>: AppearsOnTable<QS> {} impl<T, U, QS> AppearsOnTable<QS> for Bound<T, U> where Bound<T, U>: Expression {} impl<T, U> NonAggregate for Bound<T, U> where Bound<T, U>: Expression {}