good_ormning/pg/query/
helpers.rs1use crate::pg::schema::field::Field;
2use super::expr::{
3 Expr,
4 BinOp,
5};
6
7pub fn set_field(param_name: impl Into<String>, f: &Field) -> (Field, Expr) {
10 (f.clone(), field_param(param_name, f))
11}
12
13pub fn field_param(param_name: impl Into<String>, f: &Field) -> Expr {
15 Expr::Param {
16 name: param_name.into(),
17 type_: f.type_.type_.clone(),
18 }
19}
20
21pub fn eq_field(param_name: impl Into<String>, f: &Field) -> Expr {
24 Expr::BinOp {
25 left: Box::new(Expr::Field(f.clone())),
26 op: BinOp::Equals,
27 right: Box::new(Expr::Param {
28 name: param_name.into(),
29 type_: f.type_.type_.clone(),
30 }),
31 }
32}
33
34pub fn gt_field(param_name: impl Into<String>, f: &Field) -> Expr {
37 Expr::BinOp {
38 left: Box::new(Expr::Field(f.clone())),
39 op: BinOp::GreaterThan,
40 right: Box::new(Expr::Param {
41 name: param_name.into(),
42 type_: f.type_.type_.clone(),
43 }),
44 }
45}
46
47pub fn gte_field(param_name: impl Into<String>, f: &Field) -> Expr {
50 Expr::BinOp {
51 left: Box::new(Expr::Field(f.clone())),
52 op: BinOp::GreaterThanEqualTo,
53 right: Box::new(Expr::Param {
54 name: param_name.into(),
55 type_: f.type_.type_.clone(),
56 }),
57 }
58}
59
60pub fn lt_field(param_name: impl Into<String>, f: &Field) -> Expr {
63 Expr::BinOp {
64 left: Box::new(Expr::Field(f.clone())),
65 op: BinOp::LessThan,
66 right: Box::new(Expr::Param {
67 name: param_name.into(),
68 type_: f.type_.type_.clone(),
69 }),
70 }
71}
72
73pub fn lte_field(param_name: impl Into<String>, f: &Field) -> Expr {
76 Expr::BinOp {
77 left: Box::new(Expr::Field(f.clone())),
78 op: BinOp::LessThanEqualTo,
79 right: Box::new(Expr::Param {
80 name: param_name.into(),
81 type_: f.type_.type_.clone(),
82 }),
83 }
84}
85
86pub fn expr_and(exprs: Vec<Expr>) -> Expr {
88 Expr::BinOpChain {
89 op: BinOp::And,
90 exprs: exprs,
91 }
92}
93
94pub fn expr_or(exprs: Vec<Expr>) -> Expr {
96 Expr::BinOpChain {
97 op: BinOp::Or,
98 exprs: exprs,
99 }
100}