Skip to content

Commit

Permalink
Minor: Remove uncessary name field in ScalarFunctionDefintion (apache…
Browse files Browse the repository at this point in the history
  • Loading branch information
alamb authored Nov 30, 2023
1 parent d45cf00 commit 513fd05
Show file tree
Hide file tree
Showing 14 changed files with 36 additions and 60 deletions.
2 changes: 1 addition & 1 deletion datafusion/core/src/datasource/listing/helpers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ pub fn expr_applicable_for_cols(col_names: &[String], expr: &Expr) -> bool {

Expr::ScalarFunction(scalar_function) => {
match &scalar_function.func_def {
ScalarFunctionDefinition::BuiltIn { fun, .. } => {
ScalarFunctionDefinition::BuiltIn(fun) => {
match fun.volatility() {
Volatility::Immutable => Ok(VisitRecursion::Continue),
// TODO: Stable functions could be `applicable`, but that would require access to the context
Expand Down
9 changes: 7 additions & 2 deletions datafusion/expr/src/built_in_function.rs
Original file line number Diff line number Diff line change
Expand Up @@ -348,6 +348,12 @@ impl BuiltinScalarFunction {
self.signature().type_signature.supports_zero_argument()
}

/// Returns the name of this function
pub fn name(&self) -> &str {
// .unwrap is safe here because compiler makes sure the map will have matches for each BuiltinScalarFunction
function_to_name().get(self).unwrap()
}

/// Returns the [Volatility] of the builtin function.
pub fn volatility(&self) -> Volatility {
match self {
Expand Down Expand Up @@ -1627,8 +1633,7 @@ impl BuiltinScalarFunction {

impl fmt::Display for BuiltinScalarFunction {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
// .unwrap is safe here because compiler makes sure the map will have matches for each BuiltinScalarFunction
write!(f, "{}", function_to_name().get(self).unwrap())
write!(f, "{}", self.name())
}
}

Expand Down
14 changes: 4 additions & 10 deletions datafusion/expr/src/expr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@

//! Expr module contains core type definition for `Expr`.

use crate::built_in_function;
use crate::expr_fn::binary_expr;
use crate::logical_plan::Subquery;
use crate::udaf;
Expand All @@ -26,6 +25,7 @@ use crate::window_frame;
use crate::window_function;
use crate::Operator;
use crate::{aggregate_function, ExprSchemable};
use crate::{built_in_function, BuiltinScalarFunction};
use arrow::datatypes::DataType;
use datafusion_common::tree_node::{Transformed, TreeNode};
use datafusion_common::{internal_err, DFSchema, OwnedTableReference};
Expand Down Expand Up @@ -340,10 +340,7 @@ pub enum ScalarFunctionDefinition {
/// Resolved to a `BuiltinScalarFunction`
/// There is plan to migrate `BuiltinScalarFunction` to UDF-based implementation (issue#8045)
/// This variant is planned to be removed in long term
BuiltIn {
fun: built_in_function::BuiltinScalarFunction,
name: Arc<str>,
},
BuiltIn(BuiltinScalarFunction),
/// Resolved to a user defined function
UDF(Arc<crate::ScalarUDF>),
/// A scalar function constructed with name. This variant can not be executed directly
Expand Down Expand Up @@ -371,7 +368,7 @@ impl ScalarFunctionDefinition {
/// Function's name for display
pub fn name(&self) -> &str {
match self {
ScalarFunctionDefinition::BuiltIn { name, .. } => name.as_ref(),
ScalarFunctionDefinition::BuiltIn(fun) => fun.name(),
ScalarFunctionDefinition::UDF(udf) => udf.name(),
ScalarFunctionDefinition::Name(func_name) => func_name.as_ref(),
}
Expand All @@ -382,10 +379,7 @@ impl ScalarFunction {
/// Create a new ScalarFunction expression
pub fn new(fun: built_in_function::BuiltinScalarFunction, args: Vec<Expr>) -> Self {
Self {
func_def: ScalarFunctionDefinition::BuiltIn {
fun,
name: Arc::from(fun.to_string()),
},
func_def: ScalarFunctionDefinition::BuiltIn(fun),
args,
}
}
Expand Down
14 changes: 7 additions & 7 deletions datafusion/expr/src/expr_fn.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1032,7 +1032,7 @@ mod test {
macro_rules! test_unary_scalar_expr {
($ENUM:ident, $FUNC:ident) => {{
if let Expr::ScalarFunction(ScalarFunction {
func_def: ScalarFunctionDefinition::BuiltIn { fun, .. },
func_def: ScalarFunctionDefinition::BuiltIn(fun),
args,
}) = $FUNC(col("tableA.a"))
{
Expand All @@ -1053,7 +1053,7 @@ mod test {
col(stringify!($arg.to_string()))
),*
);
if let Expr::ScalarFunction(ScalarFunction { func_def: ScalarFunctionDefinition::BuiltIn{fun, ..}, args }) = result {
if let Expr::ScalarFunction(ScalarFunction { func_def: ScalarFunctionDefinition::BuiltIn(fun), args }) = result {
let name = built_in_function::BuiltinScalarFunction::$ENUM;
assert_eq!(name, fun);
assert_eq!(expected.len(), args.len());
Expand All @@ -1073,7 +1073,7 @@ mod test {
),*
]
);
if let Expr::ScalarFunction(ScalarFunction { func_def: ScalarFunctionDefinition::BuiltIn{fun, ..}, args }) = result {
if let Expr::ScalarFunction(ScalarFunction { func_def: ScalarFunctionDefinition::BuiltIn(fun), args }) = result {
let name = built_in_function::BuiltinScalarFunction::$ENUM;
assert_eq!(name, fun);
assert_eq!(expected.len(), args.len());
Expand Down Expand Up @@ -1214,7 +1214,7 @@ mod test {
#[test]
fn uuid_function_definitions() {
if let Expr::ScalarFunction(ScalarFunction {
func_def: ScalarFunctionDefinition::BuiltIn { fun, .. },
func_def: ScalarFunctionDefinition::BuiltIn(fun),
args,
}) = uuid()
{
Expand All @@ -1229,7 +1229,7 @@ mod test {
#[test]
fn digest_function_definitions() {
if let Expr::ScalarFunction(ScalarFunction {
func_def: ScalarFunctionDefinition::BuiltIn { fun, .. },
func_def: ScalarFunctionDefinition::BuiltIn(fun),
args,
}) = digest(col("tableA.a"), lit("md5"))
{
Expand All @@ -1244,7 +1244,7 @@ mod test {
#[test]
fn encode_function_definitions() {
if let Expr::ScalarFunction(ScalarFunction {
func_def: ScalarFunctionDefinition::BuiltIn { fun, .. },
func_def: ScalarFunctionDefinition::BuiltIn(fun),
args,
}) = encode(col("tableA.a"), lit("base64"))
{
Expand All @@ -1259,7 +1259,7 @@ mod test {
#[test]
fn decode_function_definitions() {
if let Expr::ScalarFunction(ScalarFunction {
func_def: ScalarFunctionDefinition::BuiltIn { fun, .. },
func_def: ScalarFunctionDefinition::BuiltIn(fun),
args,
}) = decode(col("tableA.a"), lit("hex"))
{
Expand Down
2 changes: 1 addition & 1 deletion datafusion/expr/src/expr_schema.rs
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ impl ExprSchemable for Expr {
| Expr::TryCast(TryCast { data_type, .. }) => Ok(data_type.clone()),
Expr::ScalarFunction(ScalarFunction { func_def, args }) => {
match func_def {
ScalarFunctionDefinition::BuiltIn { fun, .. } => {
ScalarFunctionDefinition::BuiltIn(fun) => {
let arg_data_types = args
.iter()
.map(|e| e.get_type(schema))
Expand Down
2 changes: 1 addition & 1 deletion datafusion/expr/src/tree_node/expr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ impl TreeNode for Expr {
nulls_first,
)),
Expr::ScalarFunction(ScalarFunction { func_def, args }) => match func_def {
ScalarFunctionDefinition::BuiltIn { fun, .. } => Expr::ScalarFunction(
ScalarFunctionDefinition::BuiltIn(fun) => Expr::ScalarFunction(
ScalarFunction::new(fun, transform_vec(args, &mut transform)?),
),
ScalarFunctionDefinition::UDF(fun) => Expr::ScalarFunction(
Expand Down
2 changes: 1 addition & 1 deletion datafusion/optimizer/src/analyzer/type_coercion.rs
Original file line number Diff line number Diff line change
Expand Up @@ -320,7 +320,7 @@ impl TreeNodeRewriter for TypeCoercionRewriter {
Ok(Expr::Case(case))
}
Expr::ScalarFunction(ScalarFunction { func_def, args }) => match func_def {
ScalarFunctionDefinition::BuiltIn { fun, .. } => {
ScalarFunctionDefinition::BuiltIn(fun) => {
let new_args = coerce_arguments_for_signature(
args.as_slice(),
&self.schema,
Expand Down
4 changes: 1 addition & 3 deletions datafusion/optimizer/src/optimize_projections.rs
Original file line number Diff line number Diff line change
Expand Up @@ -510,9 +510,7 @@ fn rewrite_expr(expr: &Expr, input: &Projection) -> Result<Option<Expr>> {
)))
}
Expr::ScalarFunction(scalar_fn) => {
let fun = if let ScalarFunctionDefinition::BuiltIn { fun, .. } =
scalar_fn.func_def
{
let fun = if let ScalarFunctionDefinition::BuiltIn(fun) = scalar_fn.func_def {
fun
} else {
return Ok(None);
Expand Down
2 changes: 1 addition & 1 deletion datafusion/optimizer/src/push_down_filter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -979,7 +979,7 @@ fn is_volatile_expression(e: &Expr) -> bool {
e.apply(&mut |expr| {
Ok(match expr {
Expr::ScalarFunction(f) => match &f.func_def {
ScalarFunctionDefinition::BuiltIn { fun, .. }
ScalarFunctionDefinition::BuiltIn(fun)
if fun.volatility() == Volatility::Volatile =>
{
is_volatile = true;
Expand Down
27 changes: 7 additions & 20 deletions datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs
Original file line number Diff line number Diff line change
Expand Up @@ -344,7 +344,7 @@ impl<'a> ConstEvaluator<'a> {
| Expr::Wildcard { .. }
| Expr::Placeholder(_) => false,
Expr::ScalarFunction(ScalarFunction { func_def, .. }) => match func_def {
ScalarFunctionDefinition::BuiltIn { fun, .. } => {
ScalarFunctionDefinition::BuiltIn(fun) => {
Self::volatility_ok(fun.volatility())
}
ScalarFunctionDefinition::UDF(fun) => {
Expand Down Expand Up @@ -1202,41 +1202,28 @@ impl<'a, S: SimplifyInfo> TreeNodeRewriter for Simplifier<'a, S> {

// log
Expr::ScalarFunction(ScalarFunction {
func_def:
ScalarFunctionDefinition::BuiltIn {
fun: BuiltinScalarFunction::Log,
..
},
func_def: ScalarFunctionDefinition::BuiltIn(BuiltinScalarFunction::Log),
args,
}) => simpl_log(args, <&S>::clone(&info))?,

// power
Expr::ScalarFunction(ScalarFunction {
func_def:
ScalarFunctionDefinition::BuiltIn {
fun: BuiltinScalarFunction::Power,
..
},
func_def: ScalarFunctionDefinition::BuiltIn(BuiltinScalarFunction::Power),
args,
}) => simpl_power(args, <&S>::clone(&info))?,

// concat
Expr::ScalarFunction(ScalarFunction {
func_def:
ScalarFunctionDefinition::BuiltIn {
fun: BuiltinScalarFunction::Concat,
..
},
func_def: ScalarFunctionDefinition::BuiltIn(BuiltinScalarFunction::Concat),
args,
}) => simpl_concat(args)?,

// concat_ws
Expr::ScalarFunction(ScalarFunction {
func_def:
ScalarFunctionDefinition::BuiltIn {
fun: BuiltinScalarFunction::ConcatWithSeparator,
..
},
ScalarFunctionDefinition::BuiltIn(
BuiltinScalarFunction::ConcatWithSeparator,
),
args,
}) => match &args[..] {
[delimiter, vals @ ..] => simpl_concat_ws(delimiter, vals)?,
Expand Down
12 changes: 2 additions & 10 deletions datafusion/optimizer/src/simplify_expressions/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -365,11 +365,7 @@ pub fn simpl_log(current_args: Vec<Expr>, info: &dyn SimplifyInfo) -> Result<Exp
)?))
}
Expr::ScalarFunction(ScalarFunction {
func_def:
ScalarFunctionDefinition::BuiltIn {
fun: BuiltinScalarFunction::Power,
..
},
func_def: ScalarFunctionDefinition::BuiltIn(BuiltinScalarFunction::Power),
args,
}) if base == &args[0] => Ok(args[1].clone()),
_ => {
Expand Down Expand Up @@ -409,11 +405,7 @@ pub fn simpl_power(current_args: Vec<Expr>, info: &dyn SimplifyInfo) -> Result<E
Ok(base.clone())
}
Expr::ScalarFunction(ScalarFunction {
func_def:
ScalarFunctionDefinition::BuiltIn {
fun: BuiltinScalarFunction::Log,
..
},
func_def: ScalarFunctionDefinition::BuiltIn(BuiltinScalarFunction::Log),
args,
}) if base == &args[0] => Ok(args[1].clone()),
_ => Ok(Expr::ScalarFunction(ScalarFunction::new(
Expand Down
2 changes: 1 addition & 1 deletion datafusion/physical-expr/src/planner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -349,7 +349,7 @@ pub fn create_physical_expr(
}

Expr::ScalarFunction(ScalarFunction { func_def, args }) => match func_def {
ScalarFunctionDefinition::BuiltIn { fun, .. } => {
ScalarFunctionDefinition::BuiltIn(fun) => {
let physical_args = args
.iter()
.map(|e| {
Expand Down
2 changes: 1 addition & 1 deletion datafusion/proto/src/logical_plan/to_proto.rs
Original file line number Diff line number Diff line change
Expand Up @@ -793,7 +793,7 @@ impl TryFrom<&Expr> for protobuf::LogicalExprNode {
))
}
Expr::ScalarFunction(ScalarFunction { func_def, args }) => match func_def {
ScalarFunctionDefinition::BuiltIn { fun, .. } => {
ScalarFunctionDefinition::BuiltIn(fun) => {
let fun: protobuf::ScalarFunction = fun.try_into()?;
let args: Vec<Self> = args
.iter()
Expand Down
2 changes: 1 addition & 1 deletion datafusion/sql/src/expr/value.rs
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
values.push(value);
}
Expr::ScalarFunction(ScalarFunction {
func_def: ScalarFunctionDefinition::BuiltIn { fun, .. },
func_def: ScalarFunctionDefinition::BuiltIn(fun),
..
}) => {
if fun == BuiltinScalarFunction::MakeArray {
Expand Down

0 comments on commit 513fd05

Please sign in to comment.