datafusion_physical_expr/intervals/
test_utils.rs1use std::sync::Arc;
21
22use crate::expressions::{binary, BinaryExpr, Literal};
23use crate::PhysicalExpr;
24use arrow::datatypes::Schema;
25use datafusion_common::{DataFusionError, ScalarValue};
26use datafusion_expr::Operator;
27
28#[allow(clippy::too_many_arguments)]
29pub fn gen_conjunctive_numerical_expr(
33 left_col: Arc<dyn PhysicalExpr>,
34 right_col: Arc<dyn PhysicalExpr>,
35 op: (Operator, Operator, Operator, Operator),
36 a: ScalarValue,
37 b: ScalarValue,
38 c: ScalarValue,
39 d: ScalarValue,
40 bounds: (Operator, Operator),
41) -> Arc<dyn PhysicalExpr> {
42 let (op_1, op_2, op_3, op_4) = op;
43 let left_and_1 = Arc::new(BinaryExpr::new(
44 Arc::clone(&left_col),
45 op_1,
46 Arc::new(Literal::new(a)),
47 ));
48 let left_and_2 = Arc::new(BinaryExpr::new(
49 Arc::clone(&right_col),
50 op_2,
51 Arc::new(Literal::new(b)),
52 ));
53 let right_and_1 =
54 Arc::new(BinaryExpr::new(left_col, op_3, Arc::new(Literal::new(c))));
55 let right_and_2 =
56 Arc::new(BinaryExpr::new(right_col, op_4, Arc::new(Literal::new(d))));
57 let (greater_op, less_op) = bounds;
58
59 let left_expr = Arc::new(BinaryExpr::new(left_and_1, greater_op, left_and_2));
60 let right_expr = Arc::new(BinaryExpr::new(right_and_1, less_op, right_and_2));
61 Arc::new(BinaryExpr::new(left_expr, Operator::And, right_expr))
62}
63
64#[allow(clippy::too_many_arguments)]
65pub fn gen_conjunctive_temporal_expr(
69 left_col: Arc<dyn PhysicalExpr>,
70 right_col: Arc<dyn PhysicalExpr>,
71 op_1: Operator,
72 op_2: Operator,
73 op_3: Operator,
74 op_4: Operator,
75 a: ScalarValue,
76 b: ScalarValue,
77 c: ScalarValue,
78 d: ScalarValue,
79 schema: &Schema,
80) -> Result<Arc<dyn PhysicalExpr>, DataFusionError> {
81 let left_and_1 = binary(
82 Arc::clone(&left_col),
83 op_1,
84 Arc::new(Literal::new(a)),
85 schema,
86 )?;
87 let left_and_2 = binary(
88 Arc::clone(&right_col),
89 op_2,
90 Arc::new(Literal::new(b)),
91 schema,
92 )?;
93 let right_and_1 = binary(left_col, op_3, Arc::new(Literal::new(c)), schema)?;
94 let right_and_2 = binary(right_col, op_4, Arc::new(Literal::new(d)), schema)?;
95 let left_expr = Arc::new(BinaryExpr::new(left_and_1, Operator::Gt, left_and_2));
96 let right_expr = Arc::new(BinaryExpr::new(right_and_1, Operator::Lt, right_and_2));
97 Ok(Arc::new(BinaryExpr::new(
98 left_expr,
99 Operator::And,
100 right_expr,
101 )))
102}