gluesql_core/ast_builder/expr/
like.rs1use 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}