Skip to main content

sqlink/postgres/
query_order.rs

1use crate::error::Error;
2
3#[derive(Clone, Debug)]
4pub struct QueryOrders(Vec<QueryOrder>);
5
6impl Default for QueryOrders {
7    fn default() -> Self {
8        QueryOrders(Vec::new())
9    }
10}
11
12impl QueryOrders {
13    pub fn build(&self) -> Result<String, Error> {
14        Ok(self.0.clone().into_iter().map(|s| s.build()).collect::<Vec<String>>().join(", "))
15    }
16    pub fn push(&mut self, field: QueryOrder) {
17        self.0.push(field);
18    }
19    pub fn len(&self) -> usize {
20        self.0.len()
21    }
22}
23
24#[derive(Clone, Debug)]
25pub struct QueryOrder {
26    pub name: String, // TBD on DESC ASC NULL FIRST CASE WHEN
27}
28
29impl QueryOrder {
30    fn build(&self) -> String {
31        self.name.clone()
32    }
33}
34
35#[cfg(test)]
36mod tests {
37    use super::*;
38    #[test]
39    fn test_order_1() {
40        let field: QueryOrder = QueryOrder {
41            name: "u.id ASC".to_owned(),
42        };
43
44        assert_eq!(field.build(), "u.id ASC");
45    }
46}