chain_builder/query_builder/
where_clauses.rs1use crate::{operator::Operator, QueryBuilder, Statement};
2
3pub trait WhereClauses {
4 fn where_clause(
5 &mut self,
6 column: &str,
7 operator: Operator,
8 value: serde_json::Value,
9 ) -> &mut Self;
10 fn where_eq(&mut self, column: &str, value: serde_json::Value) -> &mut Self;
11 fn where_not_eq(&mut self, column: &str, value: serde_json::Value) -> &mut Self;
12 fn where_in(&mut self, column: &str, value: Vec<serde_json::Value>) -> &mut Self;
13 fn where_not_in(&mut self, column: &str, value: Vec<serde_json::Value>) -> &mut Self;
14 fn where_null(&mut self, column: &str) -> &mut Self;
15 fn where_not_null(&mut self, column: &str) -> &mut Self;
16 fn where_exists(&mut self, column: &str) -> &mut Self;
17 fn where_not_exists(&mut self, column: &str) -> &mut Self;
18 fn where_between(&mut self, column: &str, value: [serde_json::Value; 2]) -> &mut Self;
19 fn where_not_between(&mut self, column: &str, value: [serde_json::Value; 2]) -> &mut Self;
20 fn where_like(&mut self, column: &str, value: serde_json::Value) -> &mut Self;
21 fn where_not_like(&mut self, column: &str, value: serde_json::Value) -> &mut Self;
22 fn where_subquery(&mut self, value: impl FnOnce(&mut QueryBuilder));
23 fn or(&mut self) -> &mut QueryBuilder;
24 fn where_raw(&mut self, sql: &str, val: Option<Vec<serde_json::Value>>) -> &mut Self;
25 fn where_gt(&mut self, column: &str, value: serde_json::Value) -> &mut Self;
26 fn where_gte(&mut self, column: &str, value: serde_json::Value) -> &mut Self;
27 fn where_lt(&mut self, column: &str, value: serde_json::Value) -> &mut Self;
28 fn where_lte(&mut self, column: &str, value: serde_json::Value) -> &mut Self;
29 fn where_gtlt(&mut self, column: &str, value: serde_json::Value) -> &mut Self;
30}
31
32impl WhereClauses for QueryBuilder {
33 fn where_clause(
34 &mut self,
35 column: &str,
36 operator: Operator,
37 value: serde_json::Value,
38 ) -> &mut Self {
39 self.statement
40 .push(Statement::Value(column.to_string(), operator, value));
41 self
42 }
43
44 fn where_subquery(&mut self, value: impl FnOnce(&mut QueryBuilder)) {
45 let mut query = self.clone();
46 query.statement = vec![];
47 query.raw = vec![];
48 value(&mut query);
49 self.statement.push(Statement::SubChain(Box::new(query)));
50 }
51
52 fn or(&mut self) -> &mut QueryBuilder {
53 let mut chain = self.clone();
54 chain.statement = vec![];
55 chain.raw = vec![];
56 self.statement.push(Statement::OrChain(Box::new(chain)));
57 self.statement.last_mut().unwrap().to_query_builder()
59 }
60
61 fn where_raw(&mut self, sql: &str, val: Option<Vec<serde_json::Value>>) -> &mut Self {
62 self.statement.push(Statement::Raw((sql.to_string(), val)));
63 self
64 }
65
66 fn where_eq(&mut self, column: &str, value: serde_json::Value) -> &mut Self {
67 self.where_clause(column, Operator::Equal, value)
68 }
69
70 fn where_not_eq(&mut self, column: &str, value: serde_json::Value) -> &mut Self {
71 self.where_clause(column, Operator::NotEqual, value)
72 }
73
74 fn where_in(&mut self, column: &str, value: Vec<serde_json::Value>) -> &mut Self {
75 self.where_clause(column, Operator::In, serde_json::Value::Array(value))
76 }
77
78 fn where_not_in(&mut self, column: &str, value: Vec<serde_json::Value>) -> &mut Self {
79 self.where_clause(column, Operator::NotIn, serde_json::Value::Array(value))
80 }
81
82 fn where_null(&mut self, column: &str) -> &mut Self {
83 self.where_clause(column, Operator::IsNull, serde_json::Value::Null)
84 }
85
86 fn where_not_null(&mut self, column: &str) -> &mut Self {
87 self.where_clause(column, Operator::IsNotNull, serde_json::Value::Null)
88 }
89
90 fn where_exists(&mut self, column: &str) -> &mut Self {
91 self.where_clause(column, Operator::Exists, serde_json::Value::Null)
92 }
93
94 fn where_not_exists(&mut self, column: &str) -> &mut Self {
95 self.where_clause(column, Operator::NotExists, serde_json::Value::Null)
96 }
97
98 fn where_between(&mut self, column: &str, value: [serde_json::Value; 2]) -> &mut Self {
99 self.where_clause(
100 column,
101 Operator::Between,
102 serde_json::Value::Array(vec![value[0].clone(), value[1].clone()]),
103 )
104 }
105
106 fn where_not_between(&mut self, column: &str, value: [serde_json::Value; 2]) -> &mut Self {
107 self.where_clause(
108 column,
109 Operator::NotBetween,
110 serde_json::Value::Array(vec![value[0].clone(), value[1].clone()]),
111 )
112 }
113
114 fn where_like(&mut self, column: &str, value: serde_json::Value) -> &mut Self {
115 self.where_clause(column, Operator::Like, value)
116 }
117
118 fn where_not_like(&mut self, column: &str, value: serde_json::Value) -> &mut Self {
119 self.where_clause(column, Operator::NotLike, value)
120 }
121
122 fn where_gt(&mut self, column: &str, value: serde_json::Value) -> &mut Self {
123 self.where_clause(column, Operator::GreaterThan, value)
124 }
125
126 fn where_gte(&mut self, column: &str, value: serde_json::Value) -> &mut Self {
127 self.where_clause(column, Operator::GreaterThanOrEqual, value)
128 }
129
130 fn where_lt(&mut self, column: &str, value: serde_json::Value) -> &mut Self {
131 self.where_clause(column, Operator::LessThan, value)
132 }
133
134 fn where_lte(&mut self, column: &str, value: serde_json::Value) -> &mut Self {
135 self.where_clause(column, Operator::LessThanOrEqual, value)
136 }
137
138 fn where_gtlt(&mut self, column: &str, value: serde_json::Value) -> &mut Self {
139 self.where_clause(column, Operator::GreaterORLessThan, value)
140 }
141}