chain_builder/query_builder/
common.rs1use crate::{Common, QueryBuilder};
2
3pub trait QueryCommon {
4 fn limit(&mut self, limit: usize) -> &mut QueryBuilder;
5 fn offset(&mut self, offset: usize) -> &mut QueryBuilder;
6 fn group_by(&mut self, column: Vec<&str>) -> &mut QueryBuilder;
7 fn group_by_raw(&mut self, sql: &str, val: Option<Vec<serde_json::Value>>)
8 -> &mut QueryBuilder;
9 fn order_by(&mut self, column: &str, order: &str) -> &mut QueryBuilder;
10 fn order_by_raw(&mut self, sql: &str, val: Option<Vec<serde_json::Value>>)
11 -> &mut QueryBuilder;
12}
13
14impl QueryCommon for QueryBuilder {
15 fn limit(&mut self, limit: usize) -> &mut QueryBuilder {
16 self.query_common.push(Common::Limit(limit));
17 self
18 }
19
20 fn offset(&mut self, offset: usize) -> &mut QueryBuilder {
21 self.query_common.push(Common::Offset(offset));
22 self
23 }
24
25 fn group_by(&mut self, column: Vec<&str>) -> &mut QueryBuilder {
26 self.query_common.push(Common::GroupBy(
27 column.iter().map(|s| s.to_string()).collect(),
28 ));
29 self
30 }
31
32 fn group_by_raw(
33 &mut self,
34 sql: &str,
35 val: Option<Vec<serde_json::Value>>,
36 ) -> &mut QueryBuilder {
37 self.query_common
38 .push(Common::GroupByRaw(sql.to_string(), val));
39 self
40 }
41
42 fn order_by(&mut self, column: &str, order: &str) -> &mut QueryBuilder {
43 const ALLOWED: [&str; 2] = ["ASC", "DESC"];
44 let mut order = order.to_uppercase();
45 if !ALLOWED.contains(&order.as_str()) {
46 println!("order must be either ASC or DESC");
48 order = "ASC".to_string();
49 }
50 self.query_common
51 .push(Common::OrderBy(column.to_string(), order.to_string()));
52 self
53 }
54
55 fn order_by_raw(
56 &mut self,
57 sql: &str,
58 val: Option<Vec<serde_json::Value>>,
59 ) -> &mut QueryBuilder {
60 self.query_common
61 .push(Common::OrderByRaw(sql.to_string(), val));
62 self
63 }
64}