diff --git a/docs/source/library-user-guide/upgrading/54.0.0.md b/docs/source/library-user-guide/upgrading/54.0.0.md index 0c3bf20a91ed5..a710daa35dc96 100644 --- a/docs/source/library-user-guide/upgrading/54.0.0.md +++ b/docs/source/library-user-guide/upgrading/54.0.0.md @@ -171,7 +171,9 @@ where string types are preferred (`UNION`, `CASE THEN/ELSE`, `NVL2`). ### `ExecutionPlan::apply_expressions` is now a required method -`apply_expressions` has been added as a **required** method on the `ExecutionPlan` trait (no default implementation). The same applies to the `FileSource` and `DataSource` traits. Any custom implementation of these traits must now implement `apply_expressions`. +`apply_expressions` is now **required** on the `ExecutionPlan`, `FileSource`, +and `DataSource` traits. It visits every `PhysicalExpr` owned by the node so +callers can analyze or rewrite them (e.g. to discover dynamic filters). **Who is affected:** @@ -180,7 +182,7 @@ where string types are preferred (`UNION`, `CASE THEN/ELSE`, `NVL2`). **Migration guide:** -Add `apply_expressions` to your implementation. Call `f` on each top-level `PhysicalExpr` your node owns, using `visit_sibling` to correctly propagate `TreeNodeRecursion`: +Call `f` on each top-level `PhysicalExpr` your node owns, using `visit_sibling` to propagate `TreeNodeRecursion` when iterating: **Node with no expressions:** @@ -219,7 +221,7 @@ fn apply_expressions( } ``` -**Node whose only expressions are in `output_ordering()` (e.g. a synthetic test node with no owned expression fields):** +**Node whose expressions live in `output_ordering()`:** ```rust,ignore fn apply_expressions(