ugoa commented on code in PR #14544:
URL: https://github.com/apache/datafusion/pull/14544#discussion_r1947898504


##########
docs/source/library-user-guide/query-optimizer.md:
##########
@@ -187,94 +235,101 @@ name to be used in a schema, `display_name` should be 
used.
 
 ### Utilities
 
-There are a number of utility methods provided that take care of some common 
tasks.
+There are a number of [utility methods][util] provided that take care of some 
common tasks.
 
-### ExprVisitor
+[util]: 
https://github.com/apache/datafusion/blob/main/datafusion/expr/src/utils.rs
 
-The `ExprVisitor` and `ExprVisitable` traits provide a mechanism for applying 
a visitor pattern to an expression tree.
+### Recursively walk an expression tree
 
-Here is an example that demonstrates this.
+The [TreeNode API] provides a convenient way to recursively walk an expression 
or plan tree.
 
-```rust
-fn extract_subquery_filters(expression: &Expr, extracted: &mut Vec<Expr>) -> 
Result<()> {
-    struct InSubqueryVisitor<'a> {
-        accum: &'a mut Vec<Expr>,
-    }
+For example, to find all subquery references in a logical plan, the following 
code can be used:
 
-    impl ExpressionVisitor for InSubqueryVisitor<'_> {
-        fn pre_visit(self, expr: &Expr) -> Result<Recursion<Self>> {
+```rust
+# use datafusion::prelude::*;
+# use datafusion::common::tree_node::{TreeNode, TreeNodeRecursion};
+# use datafusion::common::Result;
+// Return all subquery references in an expression
+fn extract_subquery_filters(expression: &Expr) -> Result<Vec<&Expr>> {
+    let mut extracted = vec![];
+    expression.apply(|expr| {
             if let Expr::InSubquery(_) = expr {
-                self.accum.push(expr.to_owned());
+                extracted.push(expr);
             }
-            Ok(Recursion::Continue(self))
-        }
-    }
+            Ok(TreeNodeRecursion::Continue)
+    })?;
+    Ok(extracted)
+}
+```
+
+Likewise you can use the [TreeNode API] to rewrite a `LogicalPlan` or 
`ExecutionPlan`

Review Comment:
   Hey @alamb so sorry I accidentally force pushed my branch without pulling 
down your commit first, now it seems your rewrite is gone and I couldn't 
recover if from my side. I hope you have kept a local copy, my bad..



-- 
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...@datafusion.apache.org

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


---------------------------------------------------------------------
To unsubscribe, e-mail: github-unsubscr...@datafusion.apache.org
For additional commands, e-mail: github-h...@datafusion.apache.org

Reply via email to