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