You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Expression column_refs does not return outer referenced columns in subqueries #15046
Calling column_refs() on a subquery expression returns no column references, even if the subquery contains outer references.
PushDownFilter optimization uses the column_refs() to compare against the columns returned from prevent_predicate_push_down_columns() on an extension node. The effect of this is that a subquery in a filter may get pushed below an extension node when it shouldn't.
To Reproduce
let outer_ref = Expr::OuterReferenceColumn(DataType::Int64,Column::new(None::<String>,"a"));let plan = LogicalPlanBuilder::empty(true).project(vec![outer_ref.clone()]).unwrap().build().unwrap();let subq = Subquery{subquery:Arc::new(plan),outer_ref_columns:vec![outer_ref],};let expr = Expr::Exists(Exists::new(subq,false));println!("{:?}", expr.column_refs());
Expected behavior
column_refs() should return the outer columns used by the subquery expression.
Additional context
The relevant code is here. It just collects Expr::Columns within self.
Activity
jatin510 commentedon Mar 6, 2025
take
fix: keep filters with correlated subqueries above extension nodes
fix: keep filters with correlated subqueries above extension nodes (a…
fix: keep filters with correlated subqueries above extension nodes (a…