From 542c10dc97c8759018a8a1ae88eb89de7226ed5f Mon Sep 17 00:00:00 2001 From: Omer Banay Date: Tue, 12 Sep 2023 15:46:44 +0300 Subject: [PATCH] Add test eliminate_cross_not_possible_nested_inner_join_with_filter --- .../optimizer/src/eliminate_cross_join.rs | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/datafusion/optimizer/src/eliminate_cross_join.rs b/datafusion/optimizer/src/eliminate_cross_join.rs index c1623483fed62..06f031398ac05 100644 --- a/datafusion/optimizer/src/eliminate_cross_join.rs +++ b/datafusion/optimizer/src/eliminate_cross_join.rs @@ -376,6 +376,12 @@ mod tests { assert_eq!(plan.schema(), optimized_plan.schema()) } + fn assert_optimization_rule_fails(plan: &LogicalPlan) { + let rule = EliminateCrossJoin::new(); + let optimized_plan = rule.try_optimize(plan, &OptimizerContext::new()).unwrap(); + assert!(optimized_plan.is_none()); + } + #[test] fn eliminate_cross_with_simple_and() -> Result<()> { let t1 = test_table_scan_with_name("t1")?; @@ -544,6 +550,30 @@ mod tests { Ok(()) } + #[test] + /// See https://github.com/apache/arrow-datafusion/issues/7530 + fn eliminate_cross_not_possible_nested_inner_join_with_filter() -> Result<()> { + let t1 = test_table_scan_with_name("t1")?; + let t2 = test_table_scan_with_name("t2")?; + let t3 = test_table_scan_with_name("t3")?; + + // could not eliminate to inner join with filter + let plan = LogicalPlanBuilder::from(t1) + .join( + t3, + JoinType::Inner, + (vec!["t1.a"], vec!["t2.a"]), + Some(col("t1.a").not_eq(col("t2.a"))), + )? + .join(t2, JoinType::Inner, (vec!["t1.a"], vec!["t3.a"]), None)? + .filter(col("t1.a").lt(lit(15u32)))? + .build()?; + + assert_optimization_rule_fails(&plan); + + Ok(()) + } + #[test] /// ```txt /// filter: a.id = b.id and a.id = c.id