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}