ozankabak commented on code in PR #5322:
URL: https://github.com/apache/arrow-datafusion/pull/5322#discussion_r1119610748


##########
datafusion/core/src/physical_optimizer/pipeline_fixer.rs:
##########
@@ -182,13 +289,46 @@ fn apply_subrules_and_check_finiteness_requirements(
     physical_optimizer_subrules: &Vec<Box<PipelineFixerSubrule>>,
 ) -> Result<Option<PipelineStatePropagator>> {
     for sub_rule in physical_optimizer_subrules {
-        if let Some(value) = sub_rule(&input).transpose()? {
+        if let Some(value) = sub_rule(input.clone()).transpose()? {
             input = value;
         }
     }
     check_finiteness_requirements(input)
 }

Review Comment:
   I tried it, but this creates an ownership problem in the closure (since 
`sub_rule` does not take a reference as its argument). We can make this work if 
we change the sub-rule return type so that it always returns an 
`PipelineStatePropagator` (by returning the argument unchanged when nothing is 
modified), and not an `Option`. Maybe we can explore this in a refactor PR. 
BTW, we came across a similar issue in some use cases involving 
`tranform_up`/`transform_down`. Maybe we can consider all of those in that PR.
   
   Will keep this in mind, thanks for pointing it out.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscr...@arrow.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to