-
Notifications
You must be signed in to change notification settings - Fork 2k
Open
Labels
bugSomething isn't workingSomething isn't working
Description
Describe the bug
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.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working