@@ -220,6 +220,51 @@ async fn test_hashjoin_parent_filter_pushdown() {
220220 - DataSourceExec: file_groups={1 group: [[test.parquet]]}, projection=[d, e, f], file_type=test, pushdown_supported=true, predicate=e@1 = ba
221221 "
222222 ) ;
223+
224+ // Test left join - filters should NOT be pushed down
225+ let join = Arc :: new (
226+ HashJoinExec :: try_new (
227+ TestScanBuilder :: new ( Arc :: clone ( & build_side_schema) )
228+ . with_support ( true )
229+ . build ( ) ,
230+ TestScanBuilder :: new ( Arc :: clone ( & probe_side_schema) )
231+ . with_support ( true )
232+ . build ( ) ,
233+ vec ! [ (
234+ col( "a" , & build_side_schema) . unwrap( ) ,
235+ col( "d" , & probe_side_schema) . unwrap( ) ,
236+ ) ] ,
237+ None ,
238+ & JoinType :: Left ,
239+ None ,
240+ PartitionMode :: Partitioned ,
241+ datafusion_common:: NullEquality :: NullEqualsNothing ,
242+ )
243+ . unwrap ( ) ,
244+ ) ;
245+
246+ let join_schema = join. schema ( ) ;
247+ let filter = col_lit_predicate ( "a" , "aa" , & join_schema) ;
248+ let plan = Arc :: new ( FilterExec :: try_new ( filter, join) . unwrap ( ) ) ;
249+
250+ // Test that filters are NOT pushed down for left join
251+ insta:: assert_snapshot!(
252+ OptimizationTest :: new( plan, FilterPushdown :: new( ) , true ) ,
253+ @r"
254+ OptimizationTest:
255+ input:
256+ - FilterExec: a@0 = aa
257+ - HashJoinExec: mode=Partitioned, join_type=Left, on=[(a@0, d@0)]
258+ - DataSourceExec: file_groups={1 group: [[test.parquet]]}, projection=[a, b, c], file_type=test, pushdown_supported=true
259+ - DataSourceExec: file_groups={1 group: [[test.parquet]]}, projection=[d, e, f], file_type=test, pushdown_supported=true
260+ output:
261+ Ok:
262+ - FilterExec: a@0 = aa
263+ - HashJoinExec: mode=Partitioned, join_type=Left, on=[(a@0, d@0)]
264+ - DataSourceExec: file_groups={1 group: [[test.parquet]]}, projection=[a, b, c], file_type=test, pushdown_supported=true, predicate=true
265+ - DataSourceExec: file_groups={1 group: [[test.parquet]]}, projection=[d, e, f], file_type=test, pushdown_supported=true, predicate=true
266+ "
267+ ) ;
223268}
224269
225270#[ test]
0 commit comments