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

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


The following commit(s) were added to refs/heads/main by this push:
     new c23a4e02bf Remove `ScalarFunctionDefinition::Name` (#10277)
c23a4e02bf is described below

commit c23a4e02bf06b8acef6a87c9de11d01acd330e1e
Author: 张林伟 <[email protected]>
AuthorDate: Wed May 1 02:14:45 2024 +0800

    Remove `ScalarFunctionDefinition::Name` (#10277)
    
    * Remove ScalarFunctionDefinition::Name
    
    * Revert test case change
---
 datafusion/core/src/datasource/listing/helpers.rs          |  5 +----
 datafusion/core/src/physical_planner.rs                    |  9 ++-------
 datafusion/expr/src/expr.rs                                | 14 --------------
 datafusion/expr/src/expr_schema.rs                         |  3 ---
 datafusion/expr/src/tree_node.rs                           |  3 ---
 datafusion/functions/src/math/log.rs                       |  9 ++++-----
 datafusion/functions/src/math/power.rs                     |  9 ++++-----
 datafusion/optimizer/src/analyzer/type_coercion.rs         |  3 ---
 datafusion/optimizer/src/push_down_filter.rs               |  1 -
 .../optimizer/src/simplify_expressions/expr_simplifier.rs  |  1 -
 datafusion/physical-expr/src/planner.rs                    |  3 ---
 datafusion/physical-expr/src/scalar_function.rs            |  7 +------
 datafusion/proto/src/logical_plan/to_proto.rs              |  6 ------
 datafusion/proto/src/physical_plan/to_proto.rs             |  5 -----
 datafusion/substrait/src/logical_plan/producer.rs          |  7 +------
 15 files changed, 13 insertions(+), 72 deletions(-)

diff --git a/datafusion/core/src/datasource/listing/helpers.rs 
b/datafusion/core/src/datasource/listing/helpers.rs
index 9dfd18f188..372f61b1e6 100644
--- a/datafusion/core/src/datasource/listing/helpers.rs
+++ b/datafusion/core/src/datasource/listing/helpers.rs
@@ -37,7 +37,7 @@ use futures::{stream::BoxStream, StreamExt, TryStreamExt};
 use log::{debug, trace};
 
 use datafusion_common::tree_node::{TreeNode, TreeNodeRecursion};
-use datafusion_common::{internal_err, Column, DFSchema, DataFusionError};
+use datafusion_common::{Column, DFSchema, DataFusionError};
 use datafusion_expr::{Expr, ScalarFunctionDefinition, Volatility};
 use datafusion_physical_expr::create_physical_expr;
 use object_store::path::Path;
@@ -100,9 +100,6 @@ pub fn expr_applicable_for_cols(col_names: &[String], expr: 
&Expr) -> bool {
                             }
                         }
                     }
-                    ScalarFunctionDefinition::Name(_) => {
-                        internal_err!("Function `Expr` with name should be 
resolved.")
-                    }
                 }
             }
 
diff --git a/datafusion/core/src/physical_planner.rs 
b/datafusion/core/src/physical_planner.rs
index b7b6c20b19..a041ab31f7 100644
--- a/datafusion/core/src/physical_planner.rs
+++ b/datafusion/core/src/physical_planner.rs
@@ -90,8 +90,8 @@ use datafusion_expr::expr_rewriter::unnormalize_cols;
 use datafusion_expr::expr_vec_fmt;
 use 
datafusion_expr::logical_plan::builder::wrap_projection_for_join_if_necessary;
 use datafusion_expr::{
-    DescribeTable, DmlStatement, Extension, Filter, RecursiveQuery,
-    ScalarFunctionDefinition, StringifiedPlan, WindowFrame, WindowFrameBound, 
WriteOp,
+    DescribeTable, DmlStatement, Extension, Filter, RecursiveQuery, 
StringifiedPlan,
+    WindowFrame, WindowFrameBound, WriteOp,
 };
 use datafusion_physical_expr::expressions::Literal;
 use datafusion_physical_expr::LexOrdering;
@@ -240,11 +240,6 @@ fn create_physical_name(e: &Expr, is_first_expr: bool) -> 
Result<String> {
             };
         }
         Expr::ScalarFunction(fun) => {
-            // function should be resolved during `AnalyzerRule`s
-            if let ScalarFunctionDefinition::Name(_) = fun.func_def {
-                return internal_err!("Function `Expr` with name should be 
resolved.");
-            }
-
             create_function_physical_name(fun.name(), false, &fun.args, None)
         }
         Expr::WindowFunction(WindowFunction {
diff --git a/datafusion/expr/src/expr.rs b/datafusion/expr/src/expr.rs
index e310eaa7e4..f32fed5db5 100644
--- a/datafusion/expr/src/expr.rs
+++ b/datafusion/expr/src/expr.rs
@@ -404,9 +404,6 @@ impl Between {
 pub enum ScalarFunctionDefinition {
     /// Resolved to a user defined function
     UDF(Arc<crate::ScalarUDF>),
-    /// A scalar function constructed with name. This variant can not be 
executed directly
-    /// and instead must be resolved to one of the other variants prior to 
physical planning.
-    Name(Arc<str>),
 }
 
 /// ScalarFunction expression invokes a built-in scalar function
@@ -430,7 +427,6 @@ impl ScalarFunctionDefinition {
     pub fn name(&self) -> &str {
         match self {
             ScalarFunctionDefinition::UDF(udf) => udf.name(),
-            ScalarFunctionDefinition::Name(func_name) => func_name.as_ref(),
         }
     }
 
@@ -441,11 +437,6 @@ impl ScalarFunctionDefinition {
             ScalarFunctionDefinition::UDF(udf) => {
                 Ok(udf.signature().volatility == crate::Volatility::Volatile)
             }
-            ScalarFunctionDefinition::Name(func) => {
-                internal_err!(
-                    "Cannot determine volatility of unresolved function: 
{func}"
-                )
-            }
         }
     }
 }
@@ -2100,11 +2091,6 @@ mod test {
             ),
         }));
         assert!(ScalarFunctionDefinition::UDF(udf).is_volatile().unwrap());
-
-        // Unresolved function
-        ScalarFunctionDefinition::Name(Arc::from("UnresolvedFunc"))
-            .is_volatile()
-            .expect_err("Shouldn't determine volatility of unresolved 
function");
     }
 
     use super::*;
diff --git a/datafusion/expr/src/expr_schema.rs 
b/datafusion/expr/src/expr_schema.rs
index c5ae0f1b83..f93f085749 100644
--- a/datafusion/expr/src/expr_schema.rs
+++ b/datafusion/expr/src/expr_schema.rs
@@ -156,9 +156,6 @@ impl ExprSchemable for Expr {
                         // expressiveness of `TypeSignature`), then infer 
return type
                         Ok(fun.return_type_from_exprs(args, schema, 
&arg_data_types)?)
                     }
-                    ScalarFunctionDefinition::Name(_) => {
-                        internal_err!("Function `Expr` with name should be 
resolved.")
-                    }
                 }
             }
             Expr::WindowFunction(WindowFunction { fun, args, .. }) => {
diff --git a/datafusion/expr/src/tree_node.rs b/datafusion/expr/src/tree_node.rs
index 471ed0b975..ae3ca9afc4 100644
--- a/datafusion/expr/src/tree_node.rs
+++ b/datafusion/expr/src/tree_node.rs
@@ -286,9 +286,6 @@ impl TreeNode for Expr {
                     ScalarFunctionDefinition::UDF(fun) => {
                         Ok(Expr::ScalarFunction(ScalarFunction::new_udf(fun, 
new_args)))
                     }
-                    ScalarFunctionDefinition::Name(_) => {
-                        internal_err!("Function `Expr` with name should be 
resolved.")
-                    }
                 })?
             }
             Expr::WindowFunction(WindowFunction {
diff --git a/datafusion/functions/src/math/log.rs 
b/datafusion/functions/src/math/log.rs
index 0a29e1ecfc..b828739126 100644
--- a/datafusion/functions/src/math/log.rs
+++ b/datafusion/functions/src/math/log.rs
@@ -208,14 +208,13 @@ impl ScalarUDFImpl for LogFunc {
 
 /// Returns true if the function is `PowerFunc`
 fn is_pow(func_def: &ScalarFunctionDefinition) -> bool {
-    if let ScalarFunctionDefinition::UDF(fun) = func_def {
-        fun.as_ref()
+    match func_def {
+        ScalarFunctionDefinition::UDF(fun) => fun
+            .as_ref()
             .inner()
             .as_any()
             .downcast_ref::<PowerFunc>()
-            .is_some()
-    } else {
-        false
+            .is_some(),
     }
 }
 
diff --git a/datafusion/functions/src/math/power.rs 
b/datafusion/functions/src/math/power.rs
index 29caa63a94..8cc6b4c02a 100644
--- a/datafusion/functions/src/math/power.rs
+++ b/datafusion/functions/src/math/power.rs
@@ -153,14 +153,13 @@ impl ScalarUDFImpl for PowerFunc {
 
 /// Return true if this function call is a call to `Log`
 fn is_log(func_def: &ScalarFunctionDefinition) -> bool {
-    if let ScalarFunctionDefinition::UDF(fun) = func_def {
-        fun.as_ref()
+    match func_def {
+        ScalarFunctionDefinition::UDF(fun) => fun
+            .as_ref()
             .inner()
             .as_any()
             .downcast_ref::<LogFunc>()
-            .is_some()
-    } else {
-        false
+            .is_some(),
     }
 }
 
diff --git a/datafusion/optimizer/src/analyzer/type_coercion.rs 
b/datafusion/optimizer/src/analyzer/type_coercion.rs
index 240afbb554..b7f95d83e8 100644
--- a/datafusion/optimizer/src/analyzer/type_coercion.rs
+++ b/datafusion/optimizer/src/analyzer/type_coercion.rs
@@ -318,9 +318,6 @@ impl TreeNodeRewriter for TypeCoercionRewriter {
                         ScalarFunction::new_udf(fun, new_expr),
                     )))
                 }
-                ScalarFunctionDefinition::Name(_) => {
-                    internal_err!("Function `Expr` with name should be 
resolved.")
-                }
             },
             Expr::AggregateFunction(expr::AggregateFunction {
                 func_def,
diff --git a/datafusion/optimizer/src/push_down_filter.rs 
b/datafusion/optimizer/src/push_down_filter.rs
index 0572dc5ea4..8462cf86f1 100644
--- a/datafusion/optimizer/src/push_down_filter.rs
+++ b/datafusion/optimizer/src/push_down_filter.rs
@@ -253,7 +253,6 @@ fn can_evaluate_as_join_condition(predicate: &Expr) -> 
Result<bool> {
         | Expr::Case(_)
         | Expr::Cast(_)
         | Expr::TryCast(_)
-        | Expr::ScalarFunction(..)
         | Expr::InList { .. } => Ok(TreeNodeRecursion::Continue),
         Expr::Sort(_)
         | Expr::AggregateFunction(_)
diff --git a/datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs 
b/datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs
index 2fb06e659d..fb5125f097 100644
--- a/datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs
+++ b/datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs
@@ -528,7 +528,6 @@ impl<'a> ConstEvaluator<'a> {
                 ScalarFunctionDefinition::UDF(fun) => {
                     Self::volatility_ok(fun.signature().volatility)
                 }
-                ScalarFunctionDefinition::Name(_) => false,
             },
             Expr::Literal(_)
             | Expr::Unnest(_)
diff --git a/datafusion/physical-expr/src/planner.rs 
b/datafusion/physical-expr/src/planner.rs
index f46e5f6ec6..7fff55ed42 100644
--- a/datafusion/physical-expr/src/planner.rs
+++ b/datafusion/physical-expr/src/planner.rs
@@ -316,9 +316,6 @@ pub fn create_physical_expr(
                     args,
                     input_dfschema,
                 ),
-                ScalarFunctionDefinition::Name(_) => {
-                    internal_err!("Function `Expr` with name should be 
resolved.")
-                }
             }
         }
         Expr::Between(Between {
diff --git a/datafusion/physical-expr/src/scalar_function.rs 
b/datafusion/physical-expr/src/scalar_function.rs
index b9c6ff3cfe..d137c9c6f7 100644
--- a/datafusion/physical-expr/src/scalar_function.rs
+++ b/datafusion/physical-expr/src/scalar_function.rs
@@ -37,7 +37,7 @@ use std::sync::Arc;
 use arrow::datatypes::{DataType, Schema};
 use arrow::record_batch::RecordBatch;
 
-use datafusion_common::{internal_err, Result};
+use datafusion_common::Result;
 use datafusion_expr::{
     expr_vec_fmt, ColumnarValue, FuncMonotonicity, ScalarFunctionDefinition,
 };
@@ -159,11 +159,6 @@ impl PhysicalExpr for ScalarFunctionExpr {
                 }
                 Ok(output)
             }
-            ScalarFunctionDefinition::Name(_) => {
-                internal_err!(
-                    "Name function must be resolved to one of the other 
variants prior to physical planning"
-                )
-            }
         }
     }
 
diff --git a/datafusion/proto/src/logical_plan/to_proto.rs 
b/datafusion/proto/src/logical_plan/to_proto.rs
index 45aebc88dc..b2236847ac 100644
--- a/datafusion/proto/src/logical_plan/to_proto.rs
+++ b/datafusion/proto/src/logical_plan/to_proto.rs
@@ -786,12 +786,6 @@ pub fn serialize_expr(
                         )),
                     }
                 }
-                ScalarFunctionDefinition::Name(_) => {
-                    return Err(Error::NotImplemented(
-                    "Proto serialization error: Trying to serialize a 
unresolved function"
-                        .to_string(),
-                ));
-                }
             }
         }
         Expr::Not(expr) => {
diff --git a/datafusion/proto/src/physical_plan/to_proto.rs 
b/datafusion/proto/src/physical_plan/to_proto.rs
index aa6121bebc..a6af5e0bb5 100644
--- a/datafusion/proto/src/physical_plan/to_proto.rs
+++ b/datafusion/proto/src/physical_plan/to_proto.rs
@@ -546,11 +546,6 @@ pub fn serialize_physical_expr(
             ScalarFunctionDefinition::UDF(udf) => {
                 codec.try_encode_udf(udf, &mut buf)?;
             }
-            _ => {
-                return not_impl_err!(
-                    "Proto serialization error: Trying to serialize a 
unresolved function"
-                );
-            }
         }
 
         let fun_definition = if buf.is_empty() { None } else { Some(buf) };
diff --git a/datafusion/substrait/src/logical_plan/producer.rs 
b/datafusion/substrait/src/logical_plan/producer.rs
index a6a38ab614..39b2b0aa16 100644
--- a/datafusion/substrait/src/logical_plan/producer.rs
+++ b/datafusion/substrait/src/logical_plan/producer.rs
@@ -36,7 +36,7 @@ use datafusion::common::{substrait_err, DFSchemaRef};
 use datafusion::logical_expr::aggregate_function;
 use datafusion::logical_expr::expr::{
     AggregateFunctionDefinition, Alias, BinaryExpr, Case, Cast, GroupingSet, 
InList,
-    InSubquery, ScalarFunctionDefinition, Sort, WindowFunction,
+    InSubquery, Sort, WindowFunction,
 };
 use datafusion::logical_expr::{expr, Between, JoinConstraint, LogicalPlan, 
Operator};
 use datafusion::prelude::Expr;
@@ -941,11 +941,6 @@ pub fn to_substrait_rex(
                 });
             }
 
-            // function should be resolved during `AnalyzerRule`
-            if let ScalarFunctionDefinition::Name(_) = fun.func_def {
-                return internal_err!("Function `Expr` with name should be 
resolved.");
-            }
-
             let function_anchor =
                 _register_function(fun.name().to_string(), extension_info);
             Ok(Expression {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to