diff --git a/datafusion/src/optimizer/utils.rs b/datafusion/src/optimizer/utils.rs index 6e64bf39b2e2d..5b7399923a9ef 100644 --- a/datafusion/src/optimizer/utils.rs +++ b/datafusion/src/optimizer/utils.rs @@ -111,7 +111,25 @@ pub fn optimize_children( from_plan(plan, &new_exprs, &new_inputs) } -/// Returns a new logical plan based on the original one with inputs and expressions replaced +/// Returns a new logical plan based on the original one with inputs +/// and expressions replaced. +/// +/// The exprs correspond to the same order of expressions returned by +/// `LogicalPlan::expressions`. This function is used in optimizers in +/// the following way: +/// +/// ```text +/// let new_inputs = optimize_children(..., plan, props); +/// +/// // get the plans expressions to optimize +/// let exprs = plan.expressions(); +/// +/// // potentially rewrite plan expressions +/// let rewritten_exprs = rewrite_exprs(exprs); +/// +/// // create new plan using rewritten_exprs in same position +/// let new_plan = from_plan(&plan, rewritten_exprs, new_inputs); +/// ``` pub fn from_plan( plan: &LogicalPlan, expr: &[Expr],