gluesql_core/ast_builder/expr/
between.rs

1use super::ExprNode;
2
3impl ExprNode<'_> {
4    #[must_use]
5    pub fn between<T: Into<Self>, U: Into<Self>>(self, low: T, high: U) -> Self {
6        Self::Between {
7            expr: Box::new(self),
8            negated: false,
9            low: Box::new(low.into()),
10            high: Box::new(high.into()),
11        }
12    }
13
14    #[must_use]
15    pub fn not_between<T: Into<Self>, U: Into<Self>>(self, low: T, high: U) -> Self {
16        Self::Between {
17            expr: Box::new(self),
18            negated: true,
19            low: Box::new(low.into()),
20            high: Box::new(high.into()),
21        }
22    }
23}
24
25#[cfg(test)]
26mod tests {
27    use crate::ast_builder::{col, num, test_expr, text};
28
29    #[test]
30    fn between() {
31        let actual = col("num").between(1, 10);
32        let expected = "num BETWEEN 1 AND 10";
33        test_expr(actual, expected);
34
35        let actual = col("date").between(text("2022-01-01"), "'2023-01-01'");
36        let expected = "date BETWEEN '2022-01-01' AND '2023-01-01'";
37        test_expr(actual, expected);
38
39        let actual = col("num").not_between(num(1), 10);
40        let expected = "num NOT BETWEEN 1 AND 10";
41        test_expr(actual, expected);
42
43        let actual = col("date").not_between(text("2022-01-01"), text("2023-01-01"));
44        let expected = "date NOT BETWEEN '2022-01-01' AND '2023-01-01'";
45        test_expr(actual, expected);
46    }
47}