Skip to content

Commit 66be207

Browse files
committed
Refactor from_between to avoid direct calls to make_binary_op_scalar_func
1 parent d9b4421 commit 66be207

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
@@ -338,57 +338,21 @@ pub fn from_between(
338338
low,
339339
high,
340340
} = between;
341-
if *negated {
342-
// `expr NOT BETWEEN low AND high` can be translated into (expr < low OR high < expr)
343-
let substrait_expr = producer.handle_expr(expr.as_ref(), schema)?;
344-
let substrait_low = producer.handle_expr(low.as_ref(), schema)?;
345-
let substrait_high = producer.handle_expr(high.as_ref(), schema)?;
346-
347-
let l_expr = make_binary_op_scalar_func(
348-
producer,
349-
&substrait_expr,
350-
&substrait_low,
351-
Operator::Lt,
352-
);
353-
let r_expr = make_binary_op_scalar_func(
354-
producer,
355-
&substrait_high,
356-
&substrait_expr,
357-
Operator::Lt,
358-
);
359341

360-
Ok(make_binary_op_scalar_func(
361-
producer,
362-
&l_expr,
363-
&r_expr,
364-
Operator::Or,
365-
))
342+
let expr = if *negated {
343+
// `expr NOT BETWEEN low AND high` can be translated into (expr < low OR high < expr)
344+
Expr::or(
345+
Expr::lt(*expr.clone(), *low.clone()),
346+
Expr::lt(*high.clone(), *expr.clone()),
347+
)
366348
} else {
367349
// `expr BETWEEN low AND high` can be translated into (low <= expr AND expr <= high)
368-
let substrait_expr = producer.handle_expr(expr.as_ref(), schema)?;
369-
let substrait_low = producer.handle_expr(low.as_ref(), schema)?;
370-
let substrait_high = producer.handle_expr(high.as_ref(), schema)?;
371-
372-
let l_expr = make_binary_op_scalar_func(
373-
producer,
374-
&substrait_low,
375-
&substrait_expr,
376-
Operator::LtEq,
377-
);
378-
let r_expr = make_binary_op_scalar_func(
379-
producer,
380-
&substrait_expr,
381-
&substrait_high,
382-
Operator::LtEq,
383-
);
384-
385-
Ok(make_binary_op_scalar_func(
386-
producer,
387-
&l_expr,
388-
&r_expr,
389-
Operator::And,
390-
))
391-
}
350+
Expr::and(
351+
Expr::lt_eq(*low.clone(), *expr.clone()),
352+
Expr::lt_eq(*expr.clone(), *high.clone()),
353+
)
354+
};
355+
producer.handle_expr(&expr, schema)
392356
}
393357

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

0 commit comments

Comments
 (0)