Skip to content

chore: Migrate Array Functions to invoke_with_args #14726

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Feb 18, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 14 additions & 15 deletions datafusion/functions-nested/src/array_has.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ use arrow::datatypes::DataType;
use arrow::row::{RowConverter, Rows, SortField};
use datafusion_common::cast::as_generic_list_array;
use datafusion_common::utils::string_utils::string_array_to_vec;
use datafusion_common::utils::take_function_args;
use datafusion_common::{exec_err, Result, ScalarValue};
use datafusion_expr::{
ColumnarValue, Documentation, ScalarUDFImpl, Signature, Volatility,
Expand Down Expand Up @@ -120,15 +121,15 @@ impl ScalarUDFImpl for ArrayHas {
Ok(DataType::Boolean)
}

fn invoke_batch(
fn invoke_with_args(
&self,
args: &[ColumnarValue],
_number_rows: usize,
args: datafusion_expr::ScalarFunctionArgs,
) -> Result<ColumnarValue> {
match &args[1] {
let [first_arg, second_arg] = take_function_args(self.name(), &args.args)?;
match &second_arg {
ColumnarValue::Array(array_needle) => {
// the needle is already an array, convert the haystack to an array of the same length
let haystack = args[0].to_array(array_needle.len())?;
let haystack = first_arg.to_array(array_needle.len())?;
let array = array_has_inner_for_array(&haystack, array_needle)?;
Ok(ColumnarValue::Array(array))
}
Expand All @@ -140,11 +141,11 @@ impl ScalarUDFImpl for ArrayHas {
}

// since the needle is a scalar, convert it to an array of size 1
let haystack = args[0].to_array(1)?;
let haystack = first_arg.to_array(1)?;
let needle = scalar_needle.to_array_of_size(1)?;
let needle = Scalar::new(needle);
let array = array_has_inner_for_scalar(&haystack, &needle)?;
if let ColumnarValue::Scalar(_) = &args[0] {
if let ColumnarValue::Scalar(_) = &first_arg {
// If both inputs are scalar, keeps output as scalar
let scalar_value = ScalarValue::try_from_array(&array, 0)?;
Ok(ColumnarValue::Scalar(scalar_value))
Expand Down Expand Up @@ -332,12 +333,11 @@ impl ScalarUDFImpl for ArrayHasAll {
Ok(DataType::Boolean)
}

fn invoke_batch(
fn invoke_with_args(
&self,
args: &[ColumnarValue],
_number_rows: usize,
args: datafusion_expr::ScalarFunctionArgs,
) -> Result<ColumnarValue> {
make_scalar_function(array_has_all_inner)(args)
make_scalar_function(array_has_all_inner)(&args.args)
}

fn aliases(&self) -> &[String] {
Expand Down Expand Up @@ -407,12 +407,11 @@ impl ScalarUDFImpl for ArrayHasAny {
Ok(DataType::Boolean)
}

fn invoke_batch(
fn invoke_with_args(
&self,
args: &[ColumnarValue],
_number_rows: usize,
args: datafusion_expr::ScalarFunctionArgs,
) -> Result<ColumnarValue> {
make_scalar_function(array_has_any_inner)(args)
make_scalar_function(array_has_any_inner)(&args.args)
}

fn aliases(&self) -> &[String] {
Expand Down
7 changes: 3 additions & 4 deletions datafusion/functions-nested/src/cardinality.rs
Original file line number Diff line number Diff line change
Expand Up @@ -112,12 +112,11 @@ impl ScalarUDFImpl for Cardinality {
})
}

fn invoke_batch(
fn invoke_with_args(
&self,
args: &[ColumnarValue],
_number_rows: usize,
args: datafusion_expr::ScalarFunctionArgs,
) -> Result<ColumnarValue> {
make_scalar_function(cardinality_inner)(args)
make_scalar_function(cardinality_inner)(&args.args)
}

fn aliases(&self) -> &[String] {
Expand Down
21 changes: 9 additions & 12 deletions datafusion/functions-nested/src/concat.rs
Original file line number Diff line number Diff line change
Expand Up @@ -109,12 +109,11 @@ impl ScalarUDFImpl for ArrayAppend {
Ok(arg_types[0].clone())
}

fn invoke_batch(
fn invoke_with_args(
&self,
args: &[ColumnarValue],
_number_rows: usize,
args: datafusion_expr::ScalarFunctionArgs,
) -> Result<ColumnarValue> {
make_scalar_function(array_append_inner)(args)
make_scalar_function(array_append_inner)(&args.args)
}

fn aliases(&self) -> &[String] {
Expand Down Expand Up @@ -205,12 +204,11 @@ impl ScalarUDFImpl for ArrayPrepend {
Ok(arg_types[1].clone())
}

fn invoke_batch(
fn invoke_with_args(
&self,
args: &[ColumnarValue],
_number_rows: usize,
args: datafusion_expr::ScalarFunctionArgs,
) -> Result<ColumnarValue> {
make_scalar_function(array_prepend_inner)(args)
make_scalar_function(array_prepend_inner)(&args.args)
}

fn aliases(&self) -> &[String] {
Expand Down Expand Up @@ -324,12 +322,11 @@ impl ScalarUDFImpl for ArrayConcat {
Ok(expr_type)
}

fn invoke_batch(
fn invoke_with_args(
&self,
args: &[ColumnarValue],
_number_rows: usize,
args: datafusion_expr::ScalarFunctionArgs,
) -> Result<ColumnarValue> {
make_scalar_function(array_concat_inner)(args)
make_scalar_function(array_concat_inner)(&args.args)
}

fn aliases(&self) -> &[String] {
Expand Down
14 changes: 6 additions & 8 deletions datafusion/functions-nested/src/dimension.rs
Original file line number Diff line number Diff line change
Expand Up @@ -106,12 +106,11 @@ impl ScalarUDFImpl for ArrayDims {
})
}

fn invoke_batch(
fn invoke_with_args(
&self,
args: &[ColumnarValue],
_number_rows: usize,
args: datafusion_expr::ScalarFunctionArgs,
) -> Result<ColumnarValue> {
make_scalar_function(array_dims_inner)(args)
make_scalar_function(array_dims_inner)(&args.args)
}

fn aliases(&self) -> &[String] {
Expand Down Expand Up @@ -184,12 +183,11 @@ impl ScalarUDFImpl for ArrayNdims {
})
}

fn invoke_batch(
fn invoke_with_args(
&self,
args: &[ColumnarValue],
_number_rows: usize,
args: datafusion_expr::ScalarFunctionArgs,
) -> Result<ColumnarValue> {
make_scalar_function(array_ndims_inner)(args)
make_scalar_function(array_ndims_inner)(&args.args)
}

fn aliases(&self) -> &[String] {
Expand Down
7 changes: 3 additions & 4 deletions datafusion/functions-nested/src/distance.rs
Original file line number Diff line number Diff line change
Expand Up @@ -124,12 +124,11 @@ impl ScalarUDFImpl for ArrayDistance {
Ok(result)
}

fn invoke_batch(
fn invoke_with_args(
&self,
args: &[ColumnarValue],
_number_rows: usize,
args: datafusion_expr::ScalarFunctionArgs,
) -> Result<ColumnarValue> {
make_scalar_function(array_distance_inner)(args)
make_scalar_function(array_distance_inner)(&args.args)
}

fn aliases(&self) -> &[String] {
Expand Down
7 changes: 3 additions & 4 deletions datafusion/functions-nested/src/empty.rs
Original file line number Diff line number Diff line change
Expand Up @@ -98,12 +98,11 @@ impl ScalarUDFImpl for ArrayEmpty {
})
}

fn invoke_batch(
fn invoke_with_args(
&self,
args: &[ColumnarValue],
_number_rows: usize,
args: datafusion_expr::ScalarFunctionArgs,
) -> Result<ColumnarValue> {
make_scalar_function(array_empty_inner)(args)
make_scalar_function(array_empty_inner)(&args.args)
}

fn aliases(&self) -> &[String] {
Expand Down
7 changes: 3 additions & 4 deletions datafusion/functions-nested/src/except.rs
Original file line number Diff line number Diff line change
Expand Up @@ -106,12 +106,11 @@ impl ScalarUDFImpl for ArrayExcept {
}
}

fn invoke_batch(
fn invoke_with_args(
&self,
args: &[ColumnarValue],
_number_rows: usize,
args: datafusion_expr::ScalarFunctionArgs,
) -> Result<ColumnarValue> {
make_scalar_function(array_except_inner)(args)
make_scalar_function(array_except_inner)(&args.args)
}

fn aliases(&self) -> &[String] {
Expand Down
36 changes: 16 additions & 20 deletions datafusion/functions-nested/src/extract.rs
Original file line number Diff line number Diff line change
Expand Up @@ -172,12 +172,11 @@ impl ScalarUDFImpl for ArrayElement {
}
}

fn invoke_batch(
fn invoke_with_args(
&self,
args: &[ColumnarValue],
_number_rows: usize,
args: datafusion_expr::ScalarFunctionArgs,
) -> Result<ColumnarValue> {
make_scalar_function(array_element_inner)(args)
make_scalar_function(array_element_inner)(&args.args)
}

fn aliases(&self) -> &[String] {
Expand Down Expand Up @@ -395,12 +394,11 @@ impl ScalarUDFImpl for ArraySlice {
Ok(arg_types[0].clone())
}

fn invoke_batch(
fn invoke_with_args(
&self,
args: &[ColumnarValue],
_number_rows: usize,
args: datafusion_expr::ScalarFunctionArgs,
) -> Result<ColumnarValue> {
make_scalar_function(array_slice_inner)(args)
make_scalar_function(array_slice_inner)(&args.args)
}

fn aliases(&self) -> &[String] {
Expand Down Expand Up @@ -704,12 +702,11 @@ impl ScalarUDFImpl for ArrayPopFront {
Ok(arg_types[0].clone())
}

fn invoke_batch(
fn invoke_with_args(
&self,
args: &[ColumnarValue],
_number_rows: usize,
args: datafusion_expr::ScalarFunctionArgs,
) -> Result<ColumnarValue> {
make_scalar_function(array_pop_front_inner)(args)
make_scalar_function(array_pop_front_inner)(&args.args)
}

fn aliases(&self) -> &[String] {
Expand Down Expand Up @@ -812,12 +809,11 @@ impl ScalarUDFImpl for ArrayPopBack {
Ok(arg_types[0].clone())
}

fn invoke_batch(
fn invoke_with_args(
&self,
args: &[ColumnarValue],
_number_rows: usize,
args: datafusion_expr::ScalarFunctionArgs,
) -> Result<ColumnarValue> {
make_scalar_function(array_pop_back_inner)(args)
make_scalar_function(array_pop_back_inner)(&args.args)
}

fn aliases(&self) -> &[String] {
Expand Down Expand Up @@ -918,13 +914,13 @@ impl ScalarUDFImpl for ArrayAnyValue {
}
}

fn invoke_batch(
fn invoke_with_args(
&self,
args: &[ColumnarValue],
_number_rows: usize,
args: datafusion_expr::ScalarFunctionArgs,
) -> Result<ColumnarValue> {
make_scalar_function(array_any_value_inner)(args)
make_scalar_function(array_any_value_inner)(&args.args)
}

fn aliases(&self) -> &[String] {
&self.aliases
}
Expand Down
7 changes: 3 additions & 4 deletions datafusion/functions-nested/src/flatten.rs
Original file line number Diff line number Diff line change
Expand Up @@ -124,12 +124,11 @@ impl ScalarUDFImpl for Flatten {
Ok(data_type)
}

fn invoke_batch(
fn invoke_with_args(
&self,
args: &[ColumnarValue],
_number_rows: usize,
args: datafusion_expr::ScalarFunctionArgs,
) -> Result<ColumnarValue> {
make_scalar_function(flatten_inner)(args)
make_scalar_function(flatten_inner)(&args.args)
}

fn aliases(&self) -> &[String] {
Expand Down
7 changes: 3 additions & 4 deletions datafusion/functions-nested/src/length.rs
Original file line number Diff line number Diff line change
Expand Up @@ -103,12 +103,11 @@ impl ScalarUDFImpl for ArrayLength {
})
}

fn invoke_batch(
fn invoke_with_args(
&self,
args: &[ColumnarValue],
_number_rows: usize,
args: datafusion_expr::ScalarFunctionArgs,
) -> Result<ColumnarValue> {
make_scalar_function(array_length_inner)(args)
make_scalar_function(array_length_inner)(&args.args)
}

fn aliases(&self) -> &[String] {
Expand Down
7 changes: 3 additions & 4 deletions datafusion/functions-nested/src/make_array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -117,12 +117,11 @@ impl ScalarUDFImpl for MakeArray {
}
}

fn invoke_batch(
fn invoke_with_args(
&self,
args: &[ColumnarValue],
_number_rows: usize,
args: datafusion_expr::ScalarFunctionArgs,
) -> Result<ColumnarValue> {
make_scalar_function(make_array_inner)(args)
make_scalar_function(make_array_inner)(&args.args)
}

fn aliases(&self) -> &[String] {
Expand Down
7 changes: 3 additions & 4 deletions datafusion/functions-nested/src/map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -273,12 +273,11 @@ impl ScalarUDFImpl for MapFunc {
))
}

fn invoke_batch(
fn invoke_with_args(
&self,
args: &[ColumnarValue],
_number_rows: usize,
args: datafusion_expr::ScalarFunctionArgs,
) -> Result<ColumnarValue> {
make_map_batch(args)
make_map_batch(&args.args)
}

fn documentation(&self) -> Option<&Documentation> {
Expand Down
7 changes: 3 additions & 4 deletions datafusion/functions-nested/src/map_extract.rs
Original file line number Diff line number Diff line change
Expand Up @@ -110,12 +110,11 @@ impl ScalarUDFImpl for MapExtract {
))))
}

fn invoke_batch(
fn invoke_with_args(
&self,
args: &[ColumnarValue],
_number_rows: usize,
args: datafusion_expr::ScalarFunctionArgs,
) -> Result<ColumnarValue> {
make_scalar_function(map_extract_inner)(args)
make_scalar_function(map_extract_inner)(&args.args)
}

fn aliases(&self) -> &[String] {
Expand Down
7 changes: 3 additions & 4 deletions datafusion/functions-nested/src/map_keys.rs
Original file line number Diff line number Diff line change
Expand Up @@ -100,12 +100,11 @@ impl ScalarUDFImpl for MapKeysFunc {
))))
}

fn invoke_batch(
fn invoke_with_args(
&self,
args: &[ColumnarValue],
_number_rows: usize,
args: datafusion_expr::ScalarFunctionArgs,
) -> Result<ColumnarValue> {
make_scalar_function(map_keys_inner)(args)
make_scalar_function(map_keys_inner)(&args.args)
}

fn documentation(&self) -> Option<&Documentation> {
Expand Down
Loading
Loading