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


##########
datafusion/physical-expr/src/rewrite.rs:
##########
@@ -113,6 +113,21 @@ pub trait TreeNodeRewritable: Clone {
         Ok(new_node)
     }
 
+    fn mutable_transform_up<F>(self, op: &mut F) -> Result<Self>
+    where
+        F: FnMut(Self) -> Result<Option<Self>>,
+    {
+        let after_op_children =
+            self.map_children(|node| node.mutable_transform_up(op))?;
+
+        let after_op_children_clone = after_op_children.clone();
+        let new_node = match op(after_op_children)? {
+            Some(value) => value,
+            None => after_op_children_clone,
+        };
+        Ok(new_node)
+    }
+

Review Comment:
   I think you can leverage the `transform_using()` (Visitor pattern) to 
achieve the same effects instead of adding another` mutable_transform()` 
method. 
   I think the Visitor pattern is more straightforward and easy to understand 
if we want to collect some infos and modify the plan/structs during the 
traversal process.



-- 
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