@@ -24,6 +24,24 @@ macro_rules! infix_predicate_body {
2424 type SqlType = $return_type;
2525 }
2626
27+ impl <T , U , QS > $crate:: expression:: SelectableExpression <QS > for $name<T , U > where
28+ T : $crate:: expression:: SelectableExpression <QS >,
29+ U : $crate:: expression:: SelectableExpression <QS >,
30+ {
31+ }
32+
33+ impl <T , U > $crate:: expression:: NonAggregate for $name<T , U > where
34+ T : $crate:: expression:: NonAggregate ,
35+ U : $crate:: expression:: NonAggregate ,
36+ {
37+ }
38+ }
39+ }
40+
41+ #[ macro_export]
42+ #[ doc( hidden) ]
43+ macro_rules! global_infix_predicate_to_sql {
44+ ( $name: ident, $operator: expr) => {
2745 impl <T , U , DB > $crate:: query_builder:: QueryFragment <DB > for $name<T , U > where
2846 DB : $crate:: backend:: Backend ,
2947 T : $crate:: query_builder:: QueryFragment <DB >,
@@ -35,17 +53,41 @@ macro_rules! infix_predicate_body {
3553 self . right. to_sql( out)
3654 }
3755 }
56+ }
57+ }
3858
39- impl <T , U , QS > $crate:: expression:: SelectableExpression <QS > for $name<T , U > where
40- T : $crate:: expression:: SelectableExpression <QS >,
41- U : $crate:: expression:: SelectableExpression <QS >,
59+ #[ macro_export]
60+ #[ doc( hidden) ]
61+ macro_rules! backend_specific_infix_predicate_to_sql {
62+ ( $name: ident, $operator: expr, $backend: ty) => {
63+ impl <T , U > $crate:: query_builder:: QueryFragment <$backend> for $name<T , U > where
64+ T : $crate:: query_builder:: QueryFragment <$backend>,
65+ U : $crate:: query_builder:: QueryFragment <$backend>,
4266 {
67+ fn to_sql( & self , out: & mut <$backend as $crate:: backend:: Backend >:: QueryBuilder )
68+ -> $crate:: query_builder:: BuildQueryResult
69+ {
70+ use $crate:: query_builder:: QueryBuilder ;
71+ try!( self . left. to_sql( out) ) ;
72+ out. push_sql( $operator) ;
73+ self . right. to_sql( out)
74+ }
4375 }
4476
45- impl <T , U > $crate:: expression:: NonAggregate for $name<T , U > where
46- T : $crate:: expression:: NonAggregate ,
47- U : $crate:: expression:: NonAggregate ,
77+ impl <T , U > $crate:: query_builder:: QueryFragment <$crate:: backend:: Debug >
78+ for $name<T , U > where
79+ T : $crate:: query_builder:: QueryFragment <$crate:: backend:: Debug >,
80+ U : $crate:: query_builder:: QueryFragment <$crate:: backend:: Debug >,
4881 {
82+ fn to_sql(
83+ & self ,
84+ out: & mut <$crate:: backend:: Debug as $crate:: backend:: Backend >:: QueryBuilder ,
85+ ) -> $crate:: query_builder:: BuildQueryResult {
86+ use $crate:: query_builder:: QueryBuilder ;
87+ try!( self . left. to_sql( out) ) ;
88+ out. push_sql( $operator) ;
89+ self . right. to_sql( out)
90+ }
4991 }
5092 }
5193}
@@ -70,6 +112,16 @@ macro_rules! infix_predicate {
70112 } ;
71113
72114 ( $name: ident, $operator: expr, $return_type: ty) => {
115+ global_infix_predicate_to_sql!( $name, $operator) ;
116+ infix_predicate_body!( $name, $operator, $return_type) ;
117+ } ;
118+
119+ ( $name: ident, $operator: expr, backend: $backend: ty) => {
120+ infix_predicate!( $name, $operator, $backend, $crate:: types:: Bool ) ;
121+ } ;
122+
123+ ( $name: ident, $operator: expr, $backend: ty, $return_type: ty) => {
124+ backend_specific_infix_predicate_to_sql!( $name, $operator, $backend) ;
73125 infix_predicate_body!( $name, $operator, $return_type) ;
74126 } ;
75127}
@@ -139,7 +191,6 @@ macro_rules! postfix_expression {
139191infix_predicate ! ( And , " AND " ) ;
140192infix_predicate ! ( Between , " BETWEEN " ) ;
141193infix_predicate ! ( Eq , " = " ) ;
142- infix_predicate ! ( IsNotDistinctFrom , " IS NOT DISTINCT FROM " ) ;
143194infix_predicate ! ( Gt , " > " ) ;
144195infix_predicate ! ( GtEq , " >= " ) ;
145196infix_predicate ! ( Like , " LIKE " ) ;
0 commit comments