Is your feature request related to a problem or challenge? Please describe what you are trying to do.
Related to #4627, the current representation of LogicalPlan contains Arc<LogicalPlan> at various points, whilst this does reduce the cost of copying a LogicalPlan tree, it:
- Complicates rewrites by necessitating clones
- Results in double-boxing -
e.g. Vec<Arc<LogicalPlan>>
- Permits cycles and all the excitement that would entail
- Marginal overhead from additional atomics
- Unidiomatic is perhaps too strong, but it is strange for a tree datastructure to have shared ownership
Describe the solution you'd like
I would like to remove the Arc, replacing with Box where necessary. Methods that currently take Arc<LogicalPlan> should be updated to take LogicalPlan.
Describe alternatives you've considered
Additional context
This likely wants to wait until we are cloning LogicalPlan less frequently
Is your feature request related to a problem or challenge? Please describe what you are trying to do.
Related to #4627, the current representation of
LogicalPlancontainsArc<LogicalPlan>at various points, whilst this does reduce the cost of copying aLogicalPlantree, it:e.g. Vec<Arc<LogicalPlan>>Describe the solution you'd like
I would like to remove the
Arc, replacing withBoxwhere necessary. Methods that currently takeArc<LogicalPlan>should be updated to takeLogicalPlan.Describe alternatives you've considered
Additional context
This likely wants to wait until we are cloning
LogicalPlanless frequently