Skip to content

Commit a8c01af

Browse files
committed
Refactor from_between to avoid direct calls to make_binary_op_scalar_func
1 parent 8074519 commit a8c01af

1 file changed

Lines changed: 12 additions & 48 deletions

File tree

datafusion/substrait/src/logical_plan/producer/expr/scalar_function.rs

Lines changed: 12 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -264,57 +264,21 @@ pub fn from_between(
264264
low,
265265
high,
266266
} = between;
267-
if *negated {
268-
// `expr NOT BETWEEN low AND high` can be translated into (expr < low OR high < expr)
269-
let substrait_expr = producer.handle_expr(expr.as_ref(), schema)?;
270-
let substrait_low = producer.handle_expr(low.as_ref(), schema)?;
271-
let substrait_high = producer.handle_expr(high.as_ref(), schema)?;
272-
273-
let l_expr = make_binary_op_scalar_func(
274-
producer,
275-
&substrait_expr,
276-
&substrait_low,
277-
Operator::Lt,
278-
);
279-
let r_expr = make_binary_op_scalar_func(
280-
producer,
281-
&substrait_high,
282-
&substrait_expr,
283-
Operator::Lt,
284-
);
285267

286-
Ok(make_binary_op_scalar_func(
287-
producer,
288-
&l_expr,
289-
&r_expr,
290-
Operator::Or,
291-
))
268+
let expr = if *negated {
269+
// `expr NOT BETWEEN low AND high` can be translated into (expr < low OR high < expr)
270+
Expr::or(
271+
Expr::lt(*expr.clone(), *low.clone()),
272+
Expr::lt(*high.clone(), *expr.clone()),
273+
)
292274
} else {
293275
// `expr BETWEEN low AND high` can be translated into (low <= expr AND expr <= high)
294-
let substrait_expr = producer.handle_expr(expr.as_ref(), schema)?;
295-
let substrait_low = producer.handle_expr(low.as_ref(), schema)?;
296-
let substrait_high = producer.handle_expr(high.as_ref(), schema)?;
297-
298-
let l_expr = make_binary_op_scalar_func(
299-
producer,
300-
&substrait_low,
301-
&substrait_expr,
302-
Operator::LtEq,
303-
);
304-
let r_expr = make_binary_op_scalar_func(
305-
producer,
306-
&substrait_expr,
307-
&substrait_high,
308-
Operator::LtEq,
309-
);
310-
311-
Ok(make_binary_op_scalar_func(
312-
producer,
313-
&l_expr,
314-
&r_expr,
315-
Operator::And,
316-
))
317-
}
276+
Expr::and(
277+
Expr::lt_eq(*low.clone(), *expr.clone()),
278+
Expr::lt_eq(*expr.clone(), *high.clone()),
279+
)
280+
};
281+
producer.handle_expr(&expr, schema)
318282
}
319283

320284
pub fn operator_to_name(op: Operator) -> &'static str {

0 commit comments

Comments
 (0)