Skip to main content

ngb_sqlbuilder/
column.rs

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