Skip to content

Commit 2b08be3

Browse files
committed
Migrate invoke_no_args to invoke_batch
Migrate scalar UDFs from deprecated invoke_no_args to invoke_batch.
1 parent 659d5a3 commit 2b08be3

File tree

7 files changed

+52
-38
lines changed

7 files changed

+52
-38
lines changed

datafusion/core/tests/user_defined/user_defined_scalar_functions.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -209,11 +209,11 @@ impl ScalarUDFImpl for Simple0ArgsScalarUDF {
209209
Ok(self.return_type.clone())
210210
}
211211

212-
fn invoke(&self, _args: &[ColumnarValue]) -> Result<ColumnarValue> {
213-
not_impl_err!("{} function does not accept arguments", self.name())
214-
}
215-
216-
fn invoke_no_args(&self, _number_rows: usize) -> Result<ColumnarValue> {
212+
fn invoke_batch(
213+
&self,
214+
_args: &[ColumnarValue],
215+
_number_rows: usize,
216+
) -> Result<ColumnarValue> {
217217
Ok(ColumnarValue::Scalar(ScalarValue::Int32(Some(100))))
218218
}
219219
}

datafusion/expr/src/udf.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -749,14 +749,12 @@ impl ScalarUDFImpl for AliasedScalarUDFImpl {
749749
self.inner.return_type_from_exprs(args, schema, arg_types)
750750
}
751751

752-
fn invoke(&self, args: &[ColumnarValue]) -> Result<ColumnarValue> {
753-
#[allow(deprecated)]
754-
self.inner.invoke(args)
755-
}
756-
757-
fn invoke_no_args(&self, number_rows: usize) -> Result<ColumnarValue> {
758-
#[allow(deprecated)]
759-
self.inner.invoke_no_args(number_rows)
752+
fn invoke_batch(
753+
&self,
754+
args: &[ColumnarValue],
755+
number_rows: usize,
756+
) -> Result<ColumnarValue> {
757+
self.inner.invoke_batch(args, number_rows)
760758
}
761759

762760
fn simplify(

datafusion/functions-nested/src/make_array.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -98,14 +98,14 @@ impl ScalarUDFImpl for MakeArray {
9898
}
9999
}
100100

101-
fn invoke(&self, args: &[ColumnarValue]) -> Result<ColumnarValue> {
101+
fn invoke_batch(
102+
&self,
103+
args: &[ColumnarValue],
104+
_number_rows: usize,
105+
) -> Result<ColumnarValue> {
102106
make_scalar_function(make_array_inner)(args)
103107
}
104108

105-
fn invoke_no_args(&self, _number_rows: usize) -> Result<ColumnarValue> {
106-
make_scalar_function(make_array_inner)(&[])
107-
}
108-
109109
fn aliases(&self) -> &[String] {
110110
&self.aliases
111111
}

datafusion/functions/src/core/version.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
//! [`VersionFunc`]: Implementation of the `version` function.
1919
2020
use arrow::datatypes::DataType;
21-
use datafusion_common::{not_impl_err, plan_err, Result, ScalarValue};
21+
use datafusion_common::{internal_err, plan_err, Result, ScalarValue};
2222
use datafusion_expr::scalar_doc_sections::DOC_SECTION_OTHER;
2323
use datafusion_expr::{
2424
ColumnarValue, Documentation, ScalarUDFImpl, Signature, Volatility,
@@ -66,11 +66,14 @@ impl ScalarUDFImpl for VersionFunc {
6666
}
6767
}
6868

69-
fn invoke(&self, _: &[ColumnarValue]) -> Result<ColumnarValue> {
70-
not_impl_err!("version does not take any arguments")
71-
}
72-
73-
fn invoke_no_args(&self, _: usize) -> Result<ColumnarValue> {
69+
fn invoke_batch(
70+
&self,
71+
args: &[ColumnarValue],
72+
_number_rows: usize,
73+
) -> Result<ColumnarValue> {
74+
if !args.is_empty() {
75+
return internal_err!("{} function does not accept arguments", self.name());
76+
}
7477
// TODO it would be great to add rust version and arrow version,
7578
// but that requires a `build.rs` script and/or adding a version const to arrow-rs
7679
let version = format!(

datafusion/functions/src/math/pi.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use std::sync::OnceLock;
2020

2121
use arrow::datatypes::DataType;
2222
use arrow::datatypes::DataType::Float64;
23-
use datafusion_common::{not_impl_err, Result, ScalarValue};
23+
use datafusion_common::{internal_err, not_impl_err, Result, ScalarValue};
2424
use datafusion_expr::scalar_doc_sections::DOC_SECTION_MATH;
2525
use datafusion_expr::sort_properties::{ExprProperties, SortProperties};
2626
use datafusion_expr::{
@@ -67,7 +67,14 @@ impl ScalarUDFImpl for PiFunc {
6767
not_impl_err!("{} function does not accept arguments", self.name())
6868
}
6969

70-
fn invoke_no_args(&self, _number_rows: usize) -> Result<ColumnarValue> {
70+
fn invoke_batch(
71+
&self,
72+
args: &[ColumnarValue],
73+
_number_rows: usize,
74+
) -> Result<ColumnarValue> {
75+
if !args.is_empty() {
76+
return internal_err!("{} function does not accept arguments", self.name());
77+
}
7178
Ok(ColumnarValue::Scalar(ScalarValue::Float64(Some(
7279
std::f64::consts::PI,
7380
))))

datafusion/functions/src/math/random.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use arrow::datatypes::DataType;
2323
use arrow::datatypes::DataType::Float64;
2424
use rand::{thread_rng, Rng};
2525

26-
use datafusion_common::{not_impl_err, Result};
26+
use datafusion_common::{internal_err, Result};
2727
use datafusion_expr::scalar_doc_sections::DOC_SECTION_MATH;
2828
use datafusion_expr::ColumnarValue;
2929
use datafusion_expr::{Documentation, ScalarUDFImpl, Signature, Volatility};
@@ -64,11 +64,14 @@ impl ScalarUDFImpl for RandomFunc {
6464
Ok(Float64)
6565
}
6666

67-
fn invoke(&self, _args: &[ColumnarValue]) -> Result<ColumnarValue> {
68-
not_impl_err!("{} function does not accept arguments", self.name())
69-
}
70-
71-
fn invoke_no_args(&self, num_rows: usize) -> Result<ColumnarValue> {
67+
fn invoke_batch(
68+
&self,
69+
args: &[ColumnarValue],
70+
num_rows: usize,
71+
) -> Result<ColumnarValue> {
72+
if !args.is_empty() {
73+
return internal_err!("{} function does not accept arguments", self.name());
74+
}
7275
let mut rng = thread_rng();
7376
let mut values = vec![0.0; num_rows];
7477
// Equivalent to set each element with rng.gen_range(0.0..1.0), but more efficient

datafusion/functions/src/string/uuid.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use arrow::datatypes::DataType;
2323
use arrow::datatypes::DataType::Utf8;
2424
use uuid::Uuid;
2525

26-
use datafusion_common::{not_impl_err, Result};
26+
use datafusion_common::{internal_err, Result};
2727
use datafusion_expr::scalar_doc_sections::DOC_SECTION_STRING;
2828
use datafusion_expr::{ColumnarValue, Documentation, Volatility};
2929
use datafusion_expr::{ScalarUDFImpl, Signature};
@@ -64,13 +64,16 @@ impl ScalarUDFImpl for UuidFunc {
6464
Ok(Utf8)
6565
}
6666

67-
fn invoke(&self, _args: &[ColumnarValue]) -> Result<ColumnarValue> {
68-
not_impl_err!("{} function does not accept arguments", self.name())
69-
}
70-
7167
/// Prints random (v4) uuid values per row
7268
/// uuid() = 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'
73-
fn invoke_no_args(&self, num_rows: usize) -> Result<ColumnarValue> {
69+
fn invoke_batch(
70+
&self,
71+
args: &[ColumnarValue],
72+
num_rows: usize,
73+
) -> Result<ColumnarValue> {
74+
if !args.is_empty() {
75+
return internal_err!("{} function does not accept arguments", self.name());
76+
}
7477
let values = std::iter::repeat_with(|| Uuid::new_v4().to_string()).take(num_rows);
7578
let array = GenericStringArray::<i32>::from_iter_values(values);
7679
Ok(ColumnarValue::Array(Arc::new(array)))

0 commit comments

Comments
 (0)