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