You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by ja...@apache.org on 2023/06/15 16:18:37 UTC

[arrow-datafusion] branch main updated: minor: `with_new_inputs` replace `from_plan` (#6680)

This is an automated email from the ASF dual-hosted git repository.

jakevin pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-datafusion.git


The following commit(s) were added to refs/heads/main by this push:
     new 638aba6335 minor: `with_new_inputs` replace `from_plan` (#6680)
638aba6335 is described below

commit 638aba63359049aaf04ff58eb33c3a7a2ec55c29
Author: jakevin <ja...@gmail.com>
AuthorDate: Fri Jun 16 00:18:31 2023 +0800

    minor: `with_new_inputs` replace `from_plan` (#6680)
---
 datafusion/expr/src/logical_plan/builder.rs        |  6 ++----
 datafusion/optimizer/src/analyzer/type_coercion.rs | 11 ++---------
 datafusion/optimizer/src/eliminate_outer_join.rs   |  7 ++-----
 datafusion/optimizer/src/optimizer.rs              |  2 +-
 datafusion/optimizer/src/push_down_filter.rs       |  3 +--
 datafusion/optimizer/src/utils.rs                  |  4 +---
 6 files changed, 9 insertions(+), 24 deletions(-)

diff --git a/datafusion/expr/src/logical_plan/builder.rs b/datafusion/expr/src/logical_plan/builder.rs
index 99489637da..08a167ff0d 100644
--- a/datafusion/expr/src/logical_plan/builder.rs
+++ b/datafusion/expr/src/logical_plan/builder.rs
@@ -23,7 +23,7 @@ use crate::expr_rewriter::{
     rewrite_sort_cols_by_aggs,
 };
 use crate::type_coercion::binary::comparison_coercion;
-use crate::utils::{columnize_expr, compare_sort_expr, exprlist_to_fields, from_plan};
+use crate::utils::{columnize_expr, compare_sort_expr, exprlist_to_fields};
 use crate::{and, binary_expr, DmlStatement, Operator, WriteOp};
 use crate::{
     logical_plan::{
@@ -453,9 +453,7 @@ impl LogicalPlanBuilder {
                         )
                     })
                     .collect::<Result<Vec<_>>>()?;
-
-                let expr = curr_plan.expressions();
-                from_plan(&curr_plan, &expr, &new_inputs)
+                curr_plan.with_new_inputs(&new_inputs)
             }
         }
     }
diff --git a/datafusion/optimizer/src/analyzer/type_coercion.rs b/datafusion/optimizer/src/analyzer/type_coercion.rs
index 312136f4a7..31f3c119be 100644
--- a/datafusion/optimizer/src/analyzer/type_coercion.rs
+++ b/datafusion/optimizer/src/analyzer/type_coercion.rs
@@ -43,7 +43,7 @@ use datafusion_expr::utils::from_plan;
 use datafusion_expr::{
     aggregate_function, is_false, is_not_false, is_not_true, is_not_unknown, is_true,
     is_unknown, type_coercion, AggregateFunction, BuiltinScalarFunction, Expr,
-    LogicalPlan, Operator, Projection, WindowFrame, WindowFrameBound, WindowFrameUnits,
+    LogicalPlan, Operator, WindowFrame, WindowFrameBound, WindowFrameUnits,
 };
 use datafusion_expr::{ExprSchemable, Signature};
 
@@ -109,14 +109,7 @@ fn analyze_internal(
         })
         .collect::<Result<Vec<_>>>()?;
 
-    // TODO: use from_plan after fix https://github.com/apache/arrow-datafusion/issues/6613
-    match &plan {
-        LogicalPlan::Projection(_) => Ok(LogicalPlan::Projection(Projection::try_new(
-            new_expr,
-            Arc::new(new_inputs[0].clone()),
-        )?)),
-        _ => from_plan(plan, &new_expr, &new_inputs),
-    }
+    from_plan(plan, &new_expr, &new_inputs)
 }
 
 pub(crate) struct TypeCoercionRewriter {
diff --git a/datafusion/optimizer/src/eliminate_outer_join.rs b/datafusion/optimizer/src/eliminate_outer_join.rs
index 8dfdfae035..e4d57f0209 100644
--- a/datafusion/optimizer/src/eliminate_outer_join.rs
+++ b/datafusion/optimizer/src/eliminate_outer_join.rs
@@ -18,10 +18,7 @@
 //! Optimizer rule to eliminate left/right/full join to inner join if possible.
 use crate::{OptimizerConfig, OptimizerRule};
 use datafusion_common::{Column, DFSchema, Result};
-use datafusion_expr::{
-    logical_plan::{Join, JoinType, LogicalPlan},
-    utils::from_plan,
-};
+use datafusion_expr::logical_plan::{Join, JoinType, LogicalPlan};
 use datafusion_expr::{Expr, Operator};
 
 use crate::optimizer::ApplyOrder;
@@ -109,7 +106,7 @@ impl OptimizerRule for EliminateOuterJoin {
                         schema: join.schema.clone(),
                         null_equals_null: join.null_equals_null,
                     });
-                    let new_plan = from_plan(plan, &plan.expressions(), &[new_join])?;
+                    let new_plan = plan.with_new_inputs(&[new_join])?;
                     Ok(Some(new_plan))
                 }
                 _ => Ok(None),
diff --git a/datafusion/optimizer/src/optimizer.rs b/datafusion/optimizer/src/optimizer.rs
index f2e6c340d7..a933acdffd 100644
--- a/datafusion/optimizer/src/optimizer.rs
+++ b/datafusion/optimizer/src/optimizer.rs
@@ -363,7 +363,7 @@ impl Optimizer {
             })
             .collect::<Vec<_>>();
 
-        Ok(Some(plan.with_new_inputs(new_inputs.as_slice())?))
+        Ok(Some(plan.with_new_inputs(&new_inputs)?))
     }
 
     /// Use a rule to optimize the whole plan.
diff --git a/datafusion/optimizer/src/push_down_filter.rs b/datafusion/optimizer/src/push_down_filter.rs
index 175c6a118c..6492b95f36 100644
--- a/datafusion/optimizer/src/push_down_filter.rs
+++ b/datafusion/optimizer/src/push_down_filter.rs
@@ -748,8 +748,7 @@ impl OptimizerRule for PushDownFilter {
                     )?),
                     None => (*agg.input).clone(),
                 };
-                let new_agg =
-                    from_plan(&filter.input, &filter.input.expressions(), &vec![child])?;
+                let new_agg = filter.input.with_new_inputs(&vec![child])?;
                 match conjunction(keep_predicates) {
                     Some(predicate) => LogicalPlan::Filter(Filter::try_new(
                         predicate,
diff --git a/datafusion/optimizer/src/utils.rs b/datafusion/optimizer/src/utils.rs
index 50f753f8c9..bdef56f61b 100644
--- a/datafusion/optimizer/src/utils.rs
+++ b/datafusion/optimizer/src/utils.rs
@@ -22,7 +22,6 @@ use datafusion_common::{plan_err, Column, DFSchemaRef};
 use datafusion_common::{DFSchema, Result};
 use datafusion_expr::expr::BinaryExpr;
 use datafusion_expr::expr_rewriter::{replace_col, strip_outer_reference};
-use datafusion_expr::utils::from_plan;
 use datafusion_expr::{
     and,
     logical_plan::{Filter, LogicalPlan},
@@ -44,7 +43,6 @@ pub fn optimize_children(
     plan: &LogicalPlan,
     config: &dyn OptimizerConfig,
 ) -> Result<Option<LogicalPlan>> {
-    let new_exprs = plan.expressions();
     let mut new_inputs = Vec::with_capacity(plan.inputs().len());
     let mut plan_is_changed = false;
     for input in plan.inputs() {
@@ -53,7 +51,7 @@ pub fn optimize_children(
         new_inputs.push(new_input.unwrap_or_else(|| input.clone()))
     }
     if plan_is_changed {
-        Ok(Some(from_plan(plan, &new_exprs, &new_inputs)?))
+        Ok(Some(plan.with_new_inputs(&new_inputs)?))
     } else {
         Ok(None)
     }