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