@@ -5,7 +5,7 @@ use datafusion::{
55 logical_expr:: {
66 expr:: {
77 AggregateFunction , AggregateFunctionParams , Alias , Exists , InList , InSubquery ,
8- PlannedReplaceSelectItem , ScalarFunction , Sort , Unnest , WildcardOptions ,
8+ PlannedReplaceSelectItem , ScalarFunction , SetComparison , Sort , Unnest , WildcardOptions ,
99 WindowFunction , WindowFunctionParams ,
1010 } ,
1111 Between , BinaryExpr , Case , Cast , Expr , GroupingSet , Like , Limit , LogicalPlan , Subquery ,
@@ -563,6 +563,27 @@ fn rewrite_table_scans_in_expr(
563563 Ok ( Expr :: Unnest ( Unnest :: new ( expr) ) )
564564 }
565565 Expr :: ScalarVariable ( _, _) | Expr :: Literal ( _, _) | Expr :: Placeholder ( _) => Ok ( expr) ,
566+ Expr :: SetComparison ( sc) => {
567+ let expr = rewrite_table_scans_in_expr ( * sc. expr , known_rewrites) ?;
568+ let subquery_plan = rewrite_table_scans ( & sc. subquery . subquery , known_rewrites) ?;
569+ let outer_ref_columns = sc
570+ . subquery
571+ . outer_ref_columns
572+ . into_iter ( )
573+ . map ( |e| rewrite_table_scans_in_expr ( e, known_rewrites) )
574+ . collect :: < Result < Vec < Expr > > > ( ) ?;
575+ let subquery = Subquery {
576+ subquery : Arc :: new ( subquery_plan) ,
577+ outer_ref_columns,
578+ spans : Spans :: new ( ) ,
579+ } ;
580+ Ok ( Expr :: SetComparison ( SetComparison :: new (
581+ Box :: new ( expr) ,
582+ subquery,
583+ sc. op ,
584+ sc. quantifier ,
585+ ) ) )
586+ }
566587 }
567588}
568589
0 commit comments