houqp commented on a change in pull request #796: URL: https://github.com/apache/arrow-datafusion/pull/796#discussion_r680467346
########## File path: datafusion/src/sql/planner.rs ########## @@ -372,25 +373,91 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> { // extract join keys extract_join_keys(&expr, &mut keys, &mut filter); + let mut cols = HashSet::new(); + exprlist_to_columns(&filter, &mut cols)?; + let (left_keys, right_keys): (Vec<Column>, Vec<Column>) = keys.into_iter().unzip(); - // return the logical plan representing the join - let join = LogicalPlanBuilder::from(left).join( - right, - join_type, - (left_keys, right_keys), - )?; + // return the logical plan representing the join if filter.is_empty() { + let join = LogicalPlanBuilder::from(left).join( + &right, + join_type, + (left_keys, right_keys), + )?; join.build() } else if join_type == JoinType::Inner { + let join = LogicalPlanBuilder::from(left).join( + &right, + join_type, + (left_keys, right_keys), + )?; join.filter( filter .iter() .skip(1) .fold(filter[0].clone(), |acc, e| acc.and(e.clone())), )? .build() + } + // Left join with all non-equijoin expressions from the right Review comment: I am curious for left join, is it valid to have the non-equijoin filter expression filter on columns from the left side as well? -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: github-unsubscr...@arrow.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org