diff --git a/core/translate/planner.rs b/core/translate/planner.rs index 9e494aca0..6ab00435e 100644 --- a/core/translate/planner.rs +++ b/core/translate/planner.rs @@ -43,9 +43,11 @@ pub fn prepare_select_plan<'a>(schema: &Schema, select: ast::Select) -> Result

break_predicate_at_and_boundaries(expr, vec![]), + ast::JoinConstraint::On(expr) => { + let mut predicates = vec![]; + break_predicate_at_and_boundaries(expr, &mut predicates); + predicates + } ast::JoinConstraint::Using(_) => todo!("USING joins not supported yet"), }); @@ -341,19 +347,14 @@ fn parse_join( )) } -fn break_predicate_at_and_boundaries( - predicate: ast::Expr, - mut predicates: Vec, -) -> Vec { +fn break_predicate_at_and_boundaries(predicate: ast::Expr, out_predicates: &mut Vec) { match predicate { ast::Expr::Binary(left, ast::Operator::And, right) => { - let ps = break_predicate_at_and_boundaries(*left, predicates); - let ps = break_predicate_at_and_boundaries(*right, ps); - ps + break_predicate_at_and_boundaries(*left, out_predicates); + break_predicate_at_and_boundaries(*right, out_predicates); } _ => { - predicates.push(predicate); - predicates + out_predicates.push(predicate); } } }