Skip to main content

partiql/sql/
where_cond.rs

1use crate::sql::field::Field;
2use crate::sql::Expr;
3use crate::sql::Selector;
4use crate::value::PqlValue;
5
6#[derive(Debug, Clone, PartialEq)]
7pub enum WhereCond {
8    Eq { expr: Expr, right: PqlValue },
9    Like { expr: Expr, right: String },
10}
11
12impl Default for WhereCond {
13    fn default() -> Self {
14        Self::Eq {
15            expr: Expr::default(),
16            right: PqlValue::default(),
17        }
18    }
19}
20
21impl WhereCond {
22    pub fn get_expr(&self) -> Expr {
23        match &self {
24            Self::Eq { expr, right: _ } => expr.to_owned(),
25            Self::Like { expr, right: _ } => expr.to_owned(),
26        }
27    }
28}
29
30pub fn re_from_str(pattern: &str) -> regex::Regex {
31    let regex_pattern = match (pattern.starts_with("%"), pattern.ends_with("%")) {
32        (true, true) => {
33            format!("{}", pattern.trim_start_matches("%").trim_end_matches("%"))
34        }
35        (true, false) => format!("{}$", pattern.trim_start_matches("%")),
36        (false, true) => format!("^{}", pattern.trim_end_matches("%")),
37        (false, false) => format!("^{}$", pattern),
38    };
39    let re = regex::Regex::new(&regex_pattern).unwrap();
40    re
41}