-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Description
Is your feature request related to a problem or challenge?
in #10543 @peter-toth allowed the TreeNode::apply and TreeNode::visit APIs to return references
However LogicalPlan::apply_with_subqueries() and LogicalPlan::visit_with_subqueries(), that are similar to TreeNode's base APIs but provide subquery support, weren't changed as well stricter easily.
This is because in LogicalPlan::apply_expressions() and LogicalPlan::apply_subqueries() we create temporary Expr::eq, Expr::Column and LogicalPlan::Subquery objects that are not compatible with the root treenode's lifetime.
Describe the solution you'd like
Make apply_with_subqueries, visit_with_subqueries, etc have the same lifetimes
Change
datafusion/datafusion/expr/src/logical_plan/tree_node.rs
Lines 777 to 780 in c095fee
| pub fn apply_with_subqueries<F: FnMut(&Self) -> Result<TreeNodeRecursion>>( | |
| &self, | |
| mut f: F, | |
| ) -> Result<TreeNodeRecursion> { |
to be
fn apply_with_subqueries<'n, F: FnMut(&'n Self) -> Result<TreeNodeRecursion>>(
&'n self,
mut f: F,
) -> Result<TreeNodeRecursion> {Describe alternatives you've considered
@peter-toth says
If we wanted to make the LogicalPlan visitor APIs stricter we would need further changes in LogicalPlan::Join, LogicalPlan::Unnest, LogicalPlan::Extension, Expr::Exists, Expr::InSubquery, Expr::ScalarSubquery enums, but I don't think we need those stricter APIs currently...
Additional context
No response