Skip to content

Commit 19688f1

Browse files
committed
fix: join rewrite can handle the Equijoin clause
1 parent 924096a commit 19688f1

1 file changed

Lines changed: 37 additions & 0 deletions

File tree

sources/sql/src/rewrite/plan.rs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,43 @@ fn rewrite_plan_with_known_rewrites(
316316
});
317317
Ok(new_plan)
318318
}
319+
LogicalPlan::Join(datafusion::logical_expr::Join { on, filter, .. }) => {
320+
let mut new_expressions = vec![];
321+
if on.len() > 0 {
322+
for (left, right) in on {
323+
let left = rewrite_table_scans_in_expr(
324+
left.clone(),
325+
known_rewrites,
326+
subquery_uses_partial_path,
327+
subquery_table_scans,
328+
)?;
329+
let right = rewrite_table_scans_in_expr(
330+
right.clone(),
331+
known_rewrites,
332+
subquery_uses_partial_path,
333+
subquery_table_scans,
334+
)?;
335+
let equal_expr = Expr::BinaryExpr(BinaryExpr::new(
336+
Box::new(left),
337+
logical_expr::Operator::Eq,
338+
Box::new(right),
339+
));
340+
new_expressions.push(equal_expr);
341+
}
342+
}
343+
if let Some(filter) = filter {
344+
let new_filter = rewrite_table_scans_in_expr(
345+
filter.clone(),
346+
known_rewrites,
347+
subquery_uses_partial_path,
348+
subquery_table_scans,
349+
)?;
350+
new_expressions.push(new_filter);
351+
}
352+
353+
let new_plan = plan.with_new_exprs(new_expressions, rewritten_inputs)?;
354+
Ok(new_plan)
355+
}
319356
_ => {
320357
let mut new_expressions = vec![];
321358
for expression in plan.expressions() {

0 commit comments

Comments
 (0)