gluesql-core 0.20.0

GlueSQL - Open source SQL database engine fully written in Rust with pure functional execution layer, easily swappable storage and web assembly support!
Documentation
use super::ExprNode;

impl ExprNode<'_> {
    #[must_use]
    pub fn regex<T: Into<Self>>(self, pattern: T) -> Self {
        Self::Regex {
            expr: Box::new(self),
            negated: false,
            pattern: Box::new(pattern.into()),
            case_sensitive: true,
        }
    }

    #[must_use]
    pub fn iregex<T: Into<Self>>(self, pattern: T) -> Self {
        Self::Regex {
            expr: Box::new(self),
            negated: false,
            pattern: Box::new(pattern.into()),
            case_sensitive: false,
        }
    }

    #[must_use]
    pub fn not_regex<T: Into<Self>>(self, pattern: T) -> Self {
        Self::Regex {
            expr: Box::new(self),
            negated: true,
            pattern: Box::new(pattern.into()),
            case_sensitive: true,
        }
    }

    #[must_use]
    pub fn not_iregex<T: Into<Self>>(self, pattern: T) -> Self {
        Self::Regex {
            expr: Box::new(self),
            negated: true,
            pattern: Box::new(pattern.into()),
            case_sensitive: false,
        }
    }
}

#[cfg(test)]
mod tests {
    use crate::query_builder::{col, test_expr, text};

    #[test]
    fn regex() {
        test_expr(col("name").regex(text("a")), "name ~ 'a'");
        test_expr(col("name").iregex(text("a")), "name ~* 'a'");
        test_expr(col("name").not_regex(text("a")), "name !~ 'a'");
        test_expr(col("name").not_iregex(text("a")), "name !~* 'a'");
    }
}