gluesql_core/ast_builder/expr/
like.rs

1use super::ExprNode;
2
3impl ExprNode<'_> {
4    #[must_use]
5    pub fn like<T: Into<Self>>(self, pattern: T) -> Self {
6        Self::Like {
7            expr: Box::new(self),
8            negated: false,
9            pattern: Box::new(pattern.into()),
10        }
11    }
12
13    #[must_use]
14    pub fn ilike<T: Into<Self>>(self, pattern: T) -> Self {
15        Self::ILike {
16            expr: Box::new(self),
17            negated: false,
18            pattern: Box::new(pattern.into()),
19        }
20    }
21
22    #[must_use]
23    pub fn not_like<T: Into<Self>>(self, pattern: T) -> Self {
24        Self::Like {
25            expr: Box::new(self),
26            negated: true,
27            pattern: Box::new(pattern.into()),
28        }
29    }
30
31    #[must_use]
32    pub fn not_ilike<T: Into<Self>>(self, pattern: T) -> Self {
33        Self::ILike {
34            expr: Box::new(self),
35            negated: true,
36            pattern: Box::new(pattern.into()),
37        }
38    }
39}
40
41#[cfg(test)]
42mod tests {
43    use crate::ast_builder::{col, test_expr, text};
44
45    #[test]
46    fn like_ilike() {
47        let actual = col("name").like(text("a%"));
48        let expected = "name LIKE 'a%'";
49        test_expr(actual, expected);
50
51        let actual = col("name").ilike(text("a%"));
52        let expected = "name ILIKE 'a%'";
53        test_expr(actual, expected);
54
55        let actual = col("name").not_like(text("a%"));
56        let expected = "name NOT LIKE 'a%'";
57        test_expr(actual, expected);
58
59        let actual = col("name").not_ilike(text("a%"));
60        let expected = "name NOT ILIKE 'a%'";
61        test_expr(actual, expected);
62    }
63}