use crate::sqlite::schema::field::Field;
use super::expr::{
Expr,
BinOp,
};
pub fn set_field(param_name: impl Into<String>, f: &Field) -> (Field, Expr) {
(f.clone(), field_param(param_name, f))
}
pub fn field_param(param_name: impl Into<String>, f: &Field) -> Expr {
Expr::Param {
name: param_name.into(),
type_: f.type_.type_.clone(),
}
}
pub fn eq_field(param_name: impl Into<String>, f: &Field) -> Expr {
Expr::BinOp {
left: Box::new(Expr::Field(f.clone())),
op: BinOp::Equals,
right: Box::new(Expr::Param {
name: param_name.into(),
type_: f.type_.type_.clone(),
}),
}
}
pub fn gt_field(param_name: impl Into<String>, f: &Field) -> Expr {
Expr::BinOp {
left: Box::new(Expr::Field(f.clone())),
op: BinOp::GreaterThan,
right: Box::new(Expr::Param {
name: param_name.into(),
type_: f.type_.type_.clone(),
}),
}
}
pub fn gte_field(param_name: impl Into<String>, f: &Field) -> Expr {
Expr::BinOp {
left: Box::new(Expr::Field(f.clone())),
op: BinOp::GreaterThanEqualTo,
right: Box::new(Expr::Param {
name: param_name.into(),
type_: f.type_.type_.clone(),
}),
}
}
pub fn lt_field(param_name: impl Into<String>, f: &Field) -> Expr {
Expr::BinOp {
left: Box::new(Expr::Field(f.clone())),
op: BinOp::LessThan,
right: Box::new(Expr::Param {
name: param_name.into(),
type_: f.type_.type_.clone(),
}),
}
}
pub fn lte_field(param_name: impl Into<String>, f: &Field) -> Expr {
Expr::BinOp {
left: Box::new(Expr::Field(f.clone())),
op: BinOp::LessThanEqualTo,
right: Box::new(Expr::Param {
name: param_name.into(),
type_: f.type_.type_.clone(),
}),
}
}
pub fn expr_and(exprs: Vec<Expr>) -> Expr {
Expr::BinOpChain {
op: BinOp::And,
exprs: exprs,
}
}