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
macro_rules! simple_clause { ($no_clause:ident, $clause:ident, $sql:expr) => { simple_clause!($no_clause, $clause, $sql, backend_bounds = ); }; ($no_clause:ident, $clause:ident, $sql:expr, backend_bounds = $($backend_bounds:ident),*) => { use backend::Backend; use result::QueryResult; use super::{QueryFragment, AstPass}; #[derive(Debug, Clone, Copy, QueryId)] pub struct $no_clause; impl<DB: Backend> QueryFragment<DB> for $no_clause { fn walk_ast(&self, _: AstPass<DB>) -> QueryResult<()> { Ok(()) } } #[derive(Debug, Clone, Copy, QueryId)] pub struct $clause<Expr>(pub Expr); impl<Expr, DB> QueryFragment<DB> for $clause<Expr> where DB: Backend $(+ $backend_bounds)*, Expr: QueryFragment<DB>, { fn walk_ast(&self, mut out: AstPass<DB>) -> QueryResult<()> { out.push_sql($sql); self.0.walk_ast(out.reborrow())?; Ok(()) } } } }