1use super::builder::QueryBuilder;
4
5impl<M> QueryBuilder<M> {
6 pub fn select(mut self, fields: &str) -> Self {
8 if fields == "*" {
9 self.select_fields.push("*".to_string());
10 } else {
11 self.select_fields.extend(
12 fields
13 .split(',')
14 .map(|f| f.trim().to_string())
15 .collect::<Vec<String>>(),
16 );
17 }
18 self
19 }
20
21 pub fn select_distinct(mut self, fields: &str) -> Self {
23 self.distinct = true;
24 self.select(fields)
25 }
26
27 pub fn from(mut self, table: &str) -> Self {
29 self.from_tables = vec![table.to_string()];
30 self
31 }
32
33 pub fn select_count(mut self, column: &str, alias: Option<&str>) -> Self {
35 let select_expr = if let Some(alias) = alias {
36 format!("COUNT({}) AS {}", column, alias)
37 } else {
38 format!("COUNT({})", column)
39 };
40 self.select_fields.push(select_expr);
41 self
42 }
43
44 pub fn select_sum(mut self, column: &str, alias: Option<&str>) -> Self {
46 let select_expr = if let Some(alias) = alias {
47 format!("SUM({}) AS {}", column, alias)
48 } else {
49 format!("SUM({})", column)
50 };
51 self.select_fields.push(select_expr);
52 self
53 }
54
55 pub fn select_avg(mut self, column: &str, alias: Option<&str>) -> Self {
57 let select_expr = if let Some(alias) = alias {
58 format!("AVG({}) AS {}", column, alias)
59 } else {
60 format!("AVG({})", column)
61 };
62 self.select_fields.push(select_expr);
63 self
64 }
65
66 pub fn select_min(mut self, column: &str, alias: Option<&str>) -> Self {
68 let select_expr = if let Some(alias) = alias {
69 format!("MIN({}) AS {}", column, alias)
70 } else {
71 format!("MIN({})", column)
72 };
73 self.select_fields.push(select_expr);
74 self
75 }
76
77 pub fn select_max(mut self, column: &str, alias: Option<&str>) -> Self {
79 let select_expr = if let Some(alias) = alias {
80 format!("MAX({}) AS {}", column, alias)
81 } else {
82 format!("MAX({})", column)
83 };
84 self.select_fields.push(select_expr);
85 self
86 }
87
88 pub fn select_raw(mut self, expression: &str) -> Self {
90 self.select_fields.push(expression.to_string());
91 self
92 }
93}