1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
use models::api::search::ascdesc::AscDesc;
#[derive(Clone)]
pub struct Query {
pub select_v: Vec<String>,
pub from_v: Vec<String>,
pub where_v: Vec<String>,
pub join_v: Vec<String>,
pub order_v: Vec<String>,
pub limit: i64,
pub offset: i64,
pub format: String,
pub sort_order: AscDesc
}
impl Query {
pub fn format(&mut self) -> String {
if self.where_v.len() == 0 {
self.where_v.push(String::from("1=1"));
}
let select_string = self.select_v.join(",\n");
let from_string = self.from_v.join(",\n");
let where_string = self.where_v.join(" AND \n");
let join_string = self.join_v.join("\n");
let order_string = match self.order_v.len() {
0 => String::from(""),
_ => format!("ORDER BY {} {}",
self.order_v.join(",\n"),
self.sort_order.as_str())
};
;
let limit_string = format!("LIMIT {} OFFSET {}",
self.limit,
self.offset
);
return rt_format!(self.format,
select_string,
rt_format!(from_string, limit_string).unwrap(),
join_string,
where_string,
order_string,
limit_string
).unwrap()
}
}