Skip to main content

ngb_sqlbuilder/
column.rs

1use crate::{Clause, Column, Condition, SqlClause};
2use tokio_postgres::types::ToSql;
3
4impl<'q> Clause<'q, Column> {
5    pub fn alias(mut self, value: &str) -> Self {
6        if self.sql.contains(" as ") {
7            return self;
8        }
9        self.sql.push_str(" as \"");
10        self.sql.push_str(value);
11        self.sql.push('"');
12        self
13    }
14    pub fn eq<T: ToSql + Sync + 'q>(self, value: &'q T) -> Clause<'q, Condition> {
15        self.op("=", value)
16    }
17    pub fn neq<T: ToSql + Sync + 'q>(self, value: &'q T) -> Clause<'q, Condition> {
18        self.op("!=", value)
19    }
20    pub fn lt<T: ToSql + Sync + 'q>(self, value: &'q T) -> Clause<'q, Condition> {
21        self.op("<", value)
22    }
23    pub fn gt<T: ToSql + Sync + 'q>(self, value: &'q T) -> Clause<'q, Condition> {
24        self.op(">", value)
25    }
26    pub fn lte<T: ToSql + Sync + 'q>(self, value: &'q T) -> Clause<'q, Condition> {
27        self.op("<=", value)
28    }
29    pub fn gte<T: ToSql + Sync + 'q>(self, value: &'q T) -> Clause<'q, Condition> {
30        self.op(">=", value)
31    }
32    pub fn like<T: ToSql + Sync + 'q>(self, value: &'q T) -> Clause<'q, Condition> {
33        self.op("like", value)
34    }
35    pub fn ilike<T: ToSql + Sync + 'q>(self, value: &'q T) -> Clause<'q, Condition> {
36        self.op("ilike", value)
37    }
38    pub fn between<T: ToSql + Sync + 'q>(self, low: &'q T, high: &'q T) -> Clause<'q, Condition> {
39        let (mut sql, mut params) = self.unwrap();
40        sql.push_str(" between $ and $");
41        params.push(low);
42        params.push(high);
43        Clause::<Condition>::new(sql, params)
44    }
45    pub fn op<T: ToSql + Sync + 'q>(self, op: &str, value: &'q T) -> Clause<'q, Condition> {
46        let (mut sql, mut params) = self.unwrap();
47        sql.push_str(&format!(" {op} $"));
48        params.push(value);
49        Clause::<Condition>::new(sql, params)
50    }
51    pub fn eq_true(self) -> Clause<'q, Condition> {
52        self.into()
53    }
54    pub fn not(self) -> Clause<'q, Condition> {
55        Clause::new(format!("not {}", &self.sql), self.params)
56    }
57    pub fn null(self) -> Clause<'q, Condition> {
58        Clause::new(format!("{} is null", &self.sql), self.params)
59    }
60    pub fn not_null(self) -> Clause<'q, Condition> {
61        Clause::new(format!("{} is not null", &self.sql), self.params)
62    }
63}