@@ -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
320284pub fn operator_to_name ( op : Operator ) -> & ' static str {
0 commit comments