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}