1#[macro_export]
2macro_rules! operator_allowed {
8 ($tpe:ty, $op:ident, $fn_name:ident) => {
9 impl<Rhs> ::std::ops::$op<Rhs> for $tpe
10 where
11 Rhs: $crate::expression::AsExpression<
12 <<$tpe as $crate::Expression>::SqlType as $crate::sql_types::ops::$op>::Rhs,
13 >,
14 {
15 type Output = $crate::internal::table_macro::ops::$op<Self, Rhs::Expression>;
16
17 fn $fn_name(self, __diesel_internal_rhs: Rhs) -> Self::Output {
18 $crate::internal::table_macro::ops::$op::new(
19 self,
20 __diesel_internal_rhs.as_expression(),
21 )
22 }
23 }
24 };
25}
26
27#[macro_export]
28macro_rules! numeric_expr {
33 ($tpe:ty) => {
34 $crate::operator_allowed!($tpe, Add, add);
35 $crate::operator_allowed!($tpe, Sub, sub);
36 $crate::operator_allowed!($tpe, Div, div);
37 $crate::operator_allowed!($tpe, Mul, mul);
38 };
39}
40
41#[macro_export]
42#[doc(hidden)]
43macro_rules! __diesel_generate_ops_impls_if_numeric {
44 ($column_name:ident, Nullable<$($inner:tt)::*>) => { $crate::__diesel_generate_ops_impls_if_numeric!($column_name, $($inner)::*); };
45
46 ($column_name:ident, Unsigned<$($inner:tt)::*>) => { $crate::__diesel_generate_ops_impls_if_numeric!($column_name, $($inner)::*); };
47
48 ($column_name:ident, SmallInt) => { $crate::numeric_expr!($column_name); };
49 ($column_name:ident, Int2) => { $crate::numeric_expr!($column_name); };
50 ($column_name:ident, Smallint) => { $crate::numeric_expr!($column_name); };
51 ($column_name:ident, SmallSerial) => { $crate::numeric_expr!($column_name); };
52
53 ($column_name:ident, Integer) => { $crate::numeric_expr!($column_name); };
54 ($column_name:ident, Int4) => { $crate::numeric_expr!($column_name); };
55 ($column_name:ident, Serial) => { $crate::numeric_expr!($column_name); };
56
57 ($column_name:ident, BigInt) => { $crate::numeric_expr!($column_name); };
58 ($column_name:ident, Int8) => { $crate::numeric_expr!($column_name); };
59 ($column_name:ident, Bigint) => { $crate::numeric_expr!($column_name); };
60 ($column_name:ident, BigSerial) => { $crate::numeric_expr!($column_name); };
61
62 ($column_name:ident, Float) => { $crate::numeric_expr!($column_name); };
63 ($column_name:ident, Float4) => { $crate::numeric_expr!($column_name); };
64
65 ($column_name:ident, Double) => { $crate::numeric_expr!($column_name); };
66 ($column_name:ident, Float8) => { $crate::numeric_expr!($column_name); };
67
68 ($column_name:ident, Numeric) => { $crate::numeric_expr!($column_name); };
69
70 ($column_name:ident, $non_numeric_type:ty) => {};
71}
72
73#[macro_export]
74#[doc(hidden)]
75macro_rules! date_time_expr {
76 ($tpe:ty) => {
77 $crate::operator_allowed!($tpe, Add, add);
78 $crate::operator_allowed!($tpe, Sub, sub);
79 };
80}
81
82#[macro_export]
83#[doc(hidden)]
84macro_rules! __diesel_generate_ops_impls_if_date_time {
85 ($column_name:ident, Nullable<$($inner:tt)::*>) => { $crate::__diesel_generate_ops_impls_if_date_time!($column_name, $($inner)::*); };
86 ($column_name:ident, Time) => { $crate::date_time_expr!($column_name); };
87 ($column_name:ident, Date) => { $crate::date_time_expr!($column_name); };
88 ($column_name:ident, Timestamp) => { $crate::date_time_expr!($column_name); };
89 ($column_name:ident, Timestamptz) => { $crate::date_time_expr!($column_name); };
90 ($column_name:ident, $non_date_time_type:ty) => {};
91}
92
93#[macro_export(local_inner_macros)]
94#[doc(hidden)]
95macro_rules! network_expr {
96 ($tpe:ty) => {
97 operator_allowed!($tpe, Add, add);
98 operator_allowed!($tpe, Sub, sub);
99 };
100}
101
102#[macro_export(local_inner_macros)]
103#[doc(hidden)]
104macro_rules! __diesel_generate_ops_impls_if_network {
105 ($column_name:ident, Nullable<$($inner:tt)::*>) => { __diesel_generate_ops_impls_if_network!($column_name, $($inner)::*); };
106 ($column_name:ident, Cidr) => { network_expr!($column_name); };
107 ($column_name:ident, Inet) => { network_expr!($column_name); };
108 ($column_name:ident, $non_network_type:ty) => {};
109}