diff --git a/datafusion/functions/src/macros.rs b/datafusion/functions/src/macros.rs index d2849c3abba0..0cc1ec213d28 100644 --- a/datafusion/functions/src/macros.rs +++ b/datafusion/functions/src/macros.rs @@ -331,10 +331,7 @@ macro_rules! make_math_binary_udf { $OUTPUT_ORDERING(input) } - fn invoke_with_args( - &self, - args: ScalarFunctionArgs, - ) -> Result { + fn invoke_with_args(&self, args: ScalarFunctionArgs) -> Result { let args = ColumnarValue::values_to_arrays(&args.args)?; let arr: ArrayRef = match args[0].data_type() { DataType::Float64 => { @@ -364,9 +361,10 @@ macro_rules! make_math_binary_udf { ) } }; - + Ok(ColumnarValue::Array(arr)) } + fn documentation(&self) -> Option<&Documentation> { Some($GET_DOC()) diff --git a/datafusion/functions/src/unicode/character_length.rs b/datafusion/functions/src/unicode/character_length.rs index 6ef0871f368b..05a05ba02018 100644 --- a/datafusion/functions/src/unicode/character_length.rs +++ b/datafusion/functions/src/unicode/character_length.rs @@ -88,12 +88,8 @@ impl ScalarUDFImpl for CharacterLengthFunc { utf8_to_int_type(&arg_types[0], "character_length") } - fn invoke_batch( - &self, - args: &[ColumnarValue], - _number_rows: usize, - ) -> Result { - make_scalar_function(character_length, vec![])(args) + fn invoke_with_args(&self, args: ScalarFunctionArgs) -> Result { + make_scalar_function(character_length, vec![])(args.args()) } fn aliases(&self) -> &[String] { diff --git a/datafusion/functions/src/unicode/initcap.rs b/datafusion/functions/src/unicode/initcap.rs index 03314bb24925..a53b533a0de0 100644 --- a/datafusion/functions/src/unicode/initcap.rs +++ b/datafusion/functions/src/unicode/initcap.rs @@ -87,15 +87,11 @@ impl ScalarUDFImpl for InitcapFunc { } } - fn invoke_batch( - &self, - args: &[ColumnarValue], - _number_rows: usize, - ) -> Result { + fn invoke_with_args(&self, args: ScalarFunctionArgs) -> Result { match args[0].data_type() { - DataType::Utf8 => make_scalar_function(initcap::, vec![])(args), - DataType::LargeUtf8 => make_scalar_function(initcap::, vec![])(args), - DataType::Utf8View => make_scalar_function(initcap_utf8view, vec![])(args), + DataType::Utf8 => make_scalar_function(initcap::, vec![])(args.args()), + DataType::LargeUtf8 => make_scalar_function(initcap::, vec![])(args.args()), + DataType::Utf8View => make_scalar_function(initcap_utf8view, vec![])(args.args()), other => { exec_err!("Unsupported data type {other:?} for function `initcap`") } diff --git a/datafusion/functions/src/unicode/left.rs b/datafusion/functions/src/unicode/left.rs index c8fbee4d90d8..3b10e41e91f6 100644 --- a/datafusion/functions/src/unicode/left.rs +++ b/datafusion/functions/src/unicode/left.rs @@ -97,16 +97,12 @@ impl ScalarUDFImpl for LeftFunc { utf8_to_str_type(&arg_types[0], "left") } - fn invoke_batch( - &self, - args: &[ColumnarValue], - _number_rows: usize, - ) -> Result { + fn invoke_with_args(&self, args: ScalarFunctionArgs) -> Result { match args[0].data_type() { DataType::Utf8 | DataType::Utf8View => { - make_scalar_function(left::, vec![])(args) + make_scalar_function(left::, vec![])(args.args()) } - DataType::LargeUtf8 => make_scalar_function(left::, vec![])(args), + DataType::LargeUtf8 => make_scalar_function(left::, vec![])(args.args()), other => exec_err!( "Unsupported data type {other:?} for function left,\ expected Utf8View, Utf8 or LargeUtf8." diff --git a/datafusion/functions/src/unicode/lpad.rs b/datafusion/functions/src/unicode/lpad.rs index 216037e90659..bc8c27e8db01 100644 --- a/datafusion/functions/src/unicode/lpad.rs +++ b/datafusion/functions/src/unicode/lpad.rs @@ -109,14 +109,10 @@ impl ScalarUDFImpl for LPadFunc { utf8_to_str_type(&arg_types[0], "lpad") } - fn invoke_batch( - &self, - args: &[ColumnarValue], - _number_rows: usize, - ) -> Result { + fn invoke_with_args(&self, args: ScalarFunctionArgs) -> Result { match args[0].data_type() { - Utf8 | Utf8View => make_scalar_function(lpad::, vec![])(args), - LargeUtf8 => make_scalar_function(lpad::, vec![])(args), + Utf8 | Utf8View => make_scalar_function(lpad::, vec![])(args.args()), + LargeUtf8 => make_scalar_function(lpad::, vec![])(args.args()), other => exec_err!("Unsupported data type {other:?} for function lpad"), } } diff --git a/datafusion/functions/src/unicode/reverse.rs b/datafusion/functions/src/unicode/reverse.rs index c941fe32c13b..494b42411b0e 100644 --- a/datafusion/functions/src/unicode/reverse.rs +++ b/datafusion/functions/src/unicode/reverse.rs @@ -85,14 +85,10 @@ impl ScalarUDFImpl for ReverseFunc { utf8_to_str_type(&arg_types[0], "reverse") } - fn invoke_batch( - &self, - args: &[ColumnarValue], - _number_rows: usize, - ) -> Result { + fn invoke_with_args(&self, args: ScalarFunctionArgs) -> Result { match args[0].data_type() { - Utf8 | Utf8View => make_scalar_function(reverse::, vec![])(args), - LargeUtf8 => make_scalar_function(reverse::, vec![])(args), + Utf8 | Utf8View => make_scalar_function(reverse::, vec![])(args.args()), + LargeUtf8 => make_scalar_function(reverse::, vec![])(args.args()), other => { exec_err!("Unsupported data type {other:?} for function reverse") } diff --git a/datafusion/functions/src/unicode/right.rs b/datafusion/functions/src/unicode/right.rs index 3561176f1dd7..7594912da16b 100644 --- a/datafusion/functions/src/unicode/right.rs +++ b/datafusion/functions/src/unicode/right.rs @@ -97,16 +97,12 @@ impl ScalarUDFImpl for RightFunc { utf8_to_str_type(&arg_types[0], "right") } - fn invoke_batch( - &self, - args: &[ColumnarValue], - _number_rows: usize, - ) -> Result { + fn invoke_with_args(&self, args: ScalarFunctionArgs) -> Result { match args[0].data_type() { DataType::Utf8 | DataType::Utf8View => { - make_scalar_function(right::, vec![])(args) + make_scalar_function(right::, vec![])(args.args()) } - DataType::LargeUtf8 => make_scalar_function(right::, vec![])(args), + DataType::LargeUtf8 => make_scalar_function(right::, vec![])(args.args()), other => exec_err!( "Unsupported data type {other:?} for function right,\ expected Utf8View, Utf8 or LargeUtf8." diff --git a/datafusion/functions/src/unicode/rpad.rs b/datafusion/functions/src/unicode/rpad.rs index 72bb112e6f70..389b352adc60 100644 --- a/datafusion/functions/src/unicode/rpad.rs +++ b/datafusion/functions/src/unicode/rpad.rs @@ -108,31 +108,27 @@ impl ScalarUDFImpl for RPadFunc { utf8_to_str_type(&arg_types[0], "rpad") } - fn invoke_batch( - &self, - args: &[ColumnarValue], - _number_rows: usize, - ) -> Result { + fn invoke_with_args(&self, args: ScalarFunctionArgs) -> Result { match ( args.len(), args[0].data_type(), args.get(2).map(|arg| arg.data_type()), ) { (2, Utf8 | Utf8View, _) => { - make_scalar_function(rpad::, vec![])(args) + make_scalar_function(rpad::, vec![])(args.args()) } - (2, LargeUtf8, _) => make_scalar_function(rpad::, vec![])(args), + (2, LargeUtf8, _) => make_scalar_function(rpad::, vec![])(args.args()), (3, Utf8 | Utf8View, Some(Utf8 | Utf8View)) => { - make_scalar_function(rpad::, vec![])(args) + make_scalar_function(rpad::, vec![])(args.args()) } (3, LargeUtf8, Some(LargeUtf8)) => { - make_scalar_function(rpad::, vec![])(args) + make_scalar_function(rpad::, vec![])(args.args()) } (3, Utf8 | Utf8View, Some(LargeUtf8)) => { - make_scalar_function(rpad::, vec![])(args) + make_scalar_function(rpad::, vec![])(args.args()) } (3, LargeUtf8, Some(Utf8 | Utf8View)) => { - make_scalar_function(rpad::, vec![])(args) + make_scalar_function(rpad::, vec![])(args.args()) } (_, _, _) => { exec_err!("Unsupported combination of data types for function rpad") diff --git a/datafusion/functions/src/unicode/strpos.rs b/datafusion/functions/src/unicode/strpos.rs index 19b82ccc23c2..55e6926a22fe 100644 --- a/datafusion/functions/src/unicode/strpos.rs +++ b/datafusion/functions/src/unicode/strpos.rs @@ -83,12 +83,8 @@ impl ScalarUDFImpl for StrposFunc { utf8_to_int_type(&arg_types[0], "strpos/instr/position") } - fn invoke_batch( - &self, - args: &[ColumnarValue], - _number_rows: usize, - ) -> Result { - make_scalar_function(strpos, vec![])(args) + fn invoke_with_args(&self, args: ScalarFunctionArgs) -> Result { + make_scalar_function(strpos, vec![])(args.args()) } fn aliases(&self) -> &[String] { diff --git a/datafusion/functions/src/unicode/substr.rs b/datafusion/functions/src/unicode/substr.rs index 20d5f6e3abeb..16339921a793 100644 --- a/datafusion/functions/src/unicode/substr.rs +++ b/datafusion/functions/src/unicode/substr.rs @@ -95,12 +95,8 @@ impl ScalarUDFImpl for SubstrFunc { Ok(DataType::Utf8View) } - fn invoke_batch( - &self, - args: &[ColumnarValue], - _number_rows: usize, - ) -> Result { - make_scalar_function(substr, vec![])(args) + fn invoke_with_args(&self, args: ScalarFunctionArgs) -> Result { + make_scalar_function(substr, vec![])(args.args()) } fn aliases(&self) -> &[String] { diff --git a/datafusion/functions/src/unicode/substrindex.rs b/datafusion/functions/src/unicode/substrindex.rs index 20ad33b3cfe3..9a548cf5c069 100644 --- a/datafusion/functions/src/unicode/substrindex.rs +++ b/datafusion/functions/src/unicode/substrindex.rs @@ -108,11 +108,7 @@ impl ScalarUDFImpl for SubstrIndexFunc { utf8_to_str_type(&arg_types[0], "substr_index") } - fn invoke_batch( - &self, - args: &[ColumnarValue], - _number_rows: usize, - ) -> Result { + fn invoke_with_args(&self, args: ScalarFunctionArgs) -> Result { make_scalar_function(substr_index, vec![])(args) } diff --git a/datafusion/functions/src/unicode/translate.rs b/datafusion/functions/src/unicode/translate.rs index 47766ded3add..02e2d263cafd 100644 --- a/datafusion/functions/src/unicode/translate.rs +++ b/datafusion/functions/src/unicode/translate.rs @@ -95,13 +95,10 @@ impl ScalarUDFImpl for TranslateFunc { utf8_to_str_type(&arg_types[0], "translate") } - fn invoke_batch( - &self, - args: &[ColumnarValue], - _number_rows: usize, - ) -> Result { - make_scalar_function(invoke_translate, vec![])(args) + fn invoke_with_args(&self, args: ScalarFunctionArgs) -> Result { + make_scalar_function(invoke_translate, vec![])(args.args) } + fn documentation(&self) -> Option<&Documentation> { self.doc()