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/arrow-datafusion.git
The following commit(s) were added to refs/heads/main by this push:
new c439bc73b6 Replace usages of internal_err with exec_err where
appropriate (#9241)
c439bc73b6 is described below
commit c439bc73b6a9ba9efa4c8a9b5d2fb6111e660e74
Author: Bruce Ritchie <[email protected]>
AuthorDate: Tue Feb 27 08:19:52 2024 -0500
Replace usages of internal_err with exec_err where appropriate (#9241)
* internal_err! -> exec_err!
* fmt updates.
* Updated error macro from exec_err! to not_impl_err! for all unsupported
type errors.
* Revert "Updated error macro from exec_err! to not_impl_err! for all
unsupported type errors."
This reverts commit fe0517a7ca0c0c6e7fa2a61b0bf321d45185854c.
* Updated a few instances of internal_err missed in previous audit.
---------
Co-authored-by: Andrew Lamb <[email protected]>
---
datafusion/functions/src/core/nullif.rs | 13 ++--
datafusion/functions/src/encoding/inner.rs | 34 +++++----
datafusion/functions/src/math/abs.rs | 6 +-
datafusion/functions/src/math/nans.rs | 10 +--
datafusion/physical-expr/src/aggregate/build_in.rs | 25 ++++---
.../physical-expr/src/conditional_expressions.rs | 4 +-
datafusion/physical-expr/src/crypto_expressions.rs | 16 ++--
datafusion/physical-expr/src/functions.rs | 85 +++++++++++-----------
datafusion/physical-expr/src/math_expressions.rs | 84 ++++++++++-----------
datafusion/physical-expr/src/regex_expressions.rs | 17 ++---
datafusion/physical-expr/src/string_expressions.rs | 49 +++++++------
.../physical-expr/src/unicode_expressions.rs | 20 ++---
12 files changed, 183 insertions(+), 180 deletions(-)
diff --git a/datafusion/functions/src/core/nullif.rs
b/datafusion/functions/src/core/nullif.rs
index f83bd987c9..73bfba9b38 100644
--- a/datafusion/functions/src/core/nullif.rs
+++ b/datafusion/functions/src/core/nullif.rs
@@ -18,15 +18,15 @@
//! Encoding expressions
use arrow::datatypes::DataType;
-use datafusion_common::{internal_err, Result, DataFusionError};
+use datafusion_common::{exec_err, DataFusionError, Result};
use datafusion_expr::ColumnarValue;
-use datafusion_expr::{ScalarUDFImpl, Signature, Volatility};
-use std::any::Any;
use arrow::array::Array;
use arrow::compute::kernels::cmp::eq;
use arrow::compute::kernels::nullif::nullif;
use datafusion_common::ScalarValue;
+use datafusion_expr::{ScalarUDFImpl, Signature, Volatility};
+use std::any::Any;
#[derive(Debug)]
pub(super) struct NullIfFunc {
@@ -58,7 +58,7 @@ impl NullIfFunc {
Self {
signature:
Signature::uniform(2, SUPPORTED_NULLIF_TYPES.to_vec(),
- Volatility::Immutable,
+ Volatility::Immutable,
)
}
}
@@ -81,7 +81,7 @@ impl ScalarUDFImpl for NullIfFunc {
let coerced_types =
datafusion_expr::type_coercion::functions::data_types(arg_types,
&self.signature);
coerced_types.map(|typs| typs[0].clone())
.map_err(|e| e.context("Failed to coerce arguments for NULLIF")
- )
+ )
}
fn invoke(&self, args: &[ColumnarValue]) -> Result<ColumnarValue> {
@@ -90,14 +90,13 @@ impl ScalarUDFImpl for NullIfFunc {
}
-
/// Implements NULLIF(expr1, expr2)
/// Args: 0 - left expr is any array
/// 1 - if the left is equal to this expr2, then the result is NULL,
otherwise left value is passed.
///
fn nullif_func(args: &[ColumnarValue]) -> Result<ColumnarValue> {
if args.len() != 2 {
- return internal_err!(
+ return exec_err!(
"{:?} args were supplied but NULLIF takes exactly two args",
args.len()
);
diff --git a/datafusion/functions/src/encoding/inner.rs
b/datafusion/functions/src/encoding/inner.rs
index 886a031a52..4cbeab3092 100644
--- a/datafusion/functions/src/encoding/inner.rs
+++ b/datafusion/functions/src/encoding/inner.rs
@@ -22,11 +22,11 @@ use arrow::{
datatypes::DataType,
};
use base64::{engine::general_purpose, Engine as _};
-use datafusion_common::ScalarValue;
use datafusion_common::{
cast::{as_generic_binary_array, as_generic_string_array},
- internal_err, not_impl_err, plan_err,
+ not_impl_err, plan_err,
};
+use datafusion_common::{exec_err, ScalarValue};
use datafusion_common::{DataFusionError, Result};
use datafusion_expr::ColumnarValue;
use std::sync::Arc;
@@ -111,6 +111,7 @@ impl DecodeFunc {
}
}
}
+
impl ScalarUDFImpl for DecodeFunc {
fn as_any(&self) -> &dyn Any {
self
@@ -148,6 +149,7 @@ enum Encoding {
Base64,
Hex,
}
+
fn encode_process(value: &ColumnarValue, encoding: Encoding) ->
Result<ColumnarValue> {
match value {
ColumnarValue::Array(a) => match a.data_type() {
@@ -155,7 +157,7 @@ fn encode_process(value: &ColumnarValue, encoding:
Encoding) -> Result<ColumnarV
DataType::LargeUtf8 =>
encoding.encode_utf8_array::<i64>(a.as_ref()),
DataType::Binary =>
encoding.encode_binary_array::<i32>(a.as_ref()),
DataType::LargeBinary =>
encoding.encode_binary_array::<i64>(a.as_ref()),
- other => internal_err!(
+ other => exec_err!(
"Unsupported data type {other:?} for function
encode({encoding})"
),
},
@@ -171,7 +173,7 @@ fn encode_process(value: &ColumnarValue, encoding:
Encoding) -> Result<ColumnarV
),
ScalarValue::LargeBinary(a) => Ok(encoding
.encode_large_scalar(a.as_ref().map(|v: &Vec<u8>|
v.as_slice()))),
- other => internal_err!(
+ other => exec_err!(
"Unsupported data type {other:?} for function
encode({encoding})"
),
}
@@ -186,7 +188,7 @@ fn decode_process(value: &ColumnarValue, encoding:
Encoding) -> Result<ColumnarV
DataType::LargeUtf8 =>
encoding.decode_utf8_array::<i64>(a.as_ref()),
DataType::Binary =>
encoding.decode_binary_array::<i32>(a.as_ref()),
DataType::LargeBinary =>
encoding.decode_binary_array::<i64>(a.as_ref()),
- other => internal_err!(
+ other => exec_err!(
"Unsupported data type {other:?} for function
decode({encoding})"
),
},
@@ -202,7 +204,7 @@ fn decode_process(value: &ColumnarValue, encoding:
Encoding) -> Result<ColumnarV
}
ScalarValue::LargeBinary(a) => encoding
.decode_large_scalar(a.as_ref().map(|v: &Vec<u8>|
v.as_slice())),
- other => internal_err!(
+ other => exec_err!(
"Unsupported data type {other:?} for function
decode({encoding})"
),
}
@@ -270,8 +272,8 @@ impl Encoding {
}
fn encode_binary_array<T>(self, value: &dyn Array) -> Result<ColumnarValue>
- where
- T: OffsetSizeTrait,
+ where
+ T: OffsetSizeTrait,
{
let input_value = as_generic_binary_array::<T>(value)?;
let array: ArrayRef = match self {
@@ -282,8 +284,8 @@ impl Encoding {
}
fn encode_utf8_array<T>(self, value: &dyn Array) -> Result<ColumnarValue>
- where
- T: OffsetSizeTrait,
+ where
+ T: OffsetSizeTrait,
{
let input_value = as_generic_string_array::<T>(value)?;
let array: ArrayRef = match self {
@@ -350,8 +352,8 @@ impl Encoding {
}
fn decode_binary_array<T>(self, value: &dyn Array) -> Result<ColumnarValue>
- where
- T: OffsetSizeTrait,
+ where
+ T: OffsetSizeTrait,
{
let input_value = as_generic_binary_array::<T>(value)?;
let array: ArrayRef = match self {
@@ -362,8 +364,8 @@ impl Encoding {
}
fn decode_utf8_array<T>(self, value: &dyn Array) -> Result<ColumnarValue>
- where
- T: OffsetSizeTrait,
+ where
+ T: OffsetSizeTrait,
{
let input_value = as_generic_string_array::<T>(value)?;
let array: ArrayRef = match self {
@@ -405,7 +407,7 @@ impl FromStr for Encoding {
/// Standard encodings are base64 and hex.
fn encode(args: &[ColumnarValue]) -> Result<ColumnarValue> {
if args.len() != 2 {
- return internal_err!(
+ return exec_err!(
"{:?} args were supplied but encode takes exactly two arguments",
args.len()
);
@@ -431,7 +433,7 @@ fn encode(args: &[ColumnarValue]) -> Result<ColumnarValue> {
/// Standard encodings are base64 and hex.
fn decode(args: &[ColumnarValue]) -> Result<ColumnarValue> {
if args.len() != 2 {
- return internal_err!(
+ return exec_err!(
"{:?} args were supplied but decode takes exactly two arguments",
args.len()
);
diff --git a/datafusion/functions/src/math/abs.rs
b/datafusion/functions/src/math/abs.rs
index 21ca37fb8e..9ba0e3da2a 100644
--- a/datafusion/functions/src/math/abs.rs
+++ b/datafusion/functions/src/math/abs.rs
@@ -24,9 +24,9 @@ use arrow::array::Int32Array;
use arrow::array::Int64Array;
use arrow::array::Int8Array;
use arrow::datatypes::DataType;
-use datafusion_common::not_impl_err;
+use datafusion_common::{exec_err, not_impl_err};
use datafusion_common::plan_datafusion_err;
-use datafusion_common::{internal_err, Result, DataFusionError};
+use datafusion_common::{Result, DataFusionError};
use datafusion_expr::utils;
use datafusion_expr::ColumnarValue;
@@ -165,7 +165,7 @@ impl ScalarUDFImpl for AbsFunc {
let args = ColumnarValue::values_to_arrays(args)?;
if args.len() != 1 {
- return internal_err!("abs function requires 1 argument, got {}",
args.len());
+ return exec_err!("abs function requires 1 argument, got {}",
args.len());
}
let input_data_type = args[0].data_type();
diff --git a/datafusion/functions/src/math/nans.rs
b/datafusion/functions/src/math/nans.rs
index 20754c18aa..c7868e6d5e 100644
--- a/datafusion/functions/src/math/nans.rs
+++ b/datafusion/functions/src/math/nans.rs
@@ -18,14 +18,14 @@
//! Encoding expressions
use arrow::datatypes::DataType;
-use datafusion_common::{internal_err, Result, DataFusionError};
+use datafusion_common::{exec_err, DataFusionError, Result};
use datafusion_expr::ColumnarValue;
+use arrow::array::{ArrayRef, BooleanArray, Float32Array, Float64Array};
use datafusion_expr::TypeSignature::*;
use datafusion_expr::{ScalarUDFImpl, Signature, Volatility};
use std::any::Any;
use std::sync::Arc;
-use arrow::array::{ArrayRef, BooleanArray, Float32Array, Float64Array};
#[derive(Debug)]
pub(super) struct IsNanFunc {
@@ -73,7 +73,7 @@ impl ScalarUDFImpl for IsNanFunc {
BooleanArray,
{ f64::is_nan }
))
- },
+ }
DataType::Float32 => {
Arc::new(make_function_scalar_inputs_return_type!(
&args[0],
@@ -82,8 +82,8 @@ impl ScalarUDFImpl for IsNanFunc {
BooleanArray,
{ f32::is_nan }
))
- },
- other => return internal_err!("Unsupported data type {other:?} for
function isnan"),
+ }
+ other => return exec_err!("Unsupported data type {other:?} for
function isnan"),
};
Ok(ColumnarValue::Array(arr))
}
diff --git a/datafusion/physical-expr/src/aggregate/build_in.rs
b/datafusion/physical-expr/src/aggregate/build_in.rs
index 1a3d21fc40..2918856aa6 100644
--- a/datafusion/physical-expr/src/aggregate/build_in.rs
+++ b/datafusion/physical-expr/src/aggregate/build_in.rs
@@ -28,14 +28,15 @@
use std::sync::Arc;
+use arrow::datatypes::Schema;
+
+use datafusion_common::{exec_err, not_impl_err, DataFusionError, Result};
+use datafusion_expr::AggregateFunction;
+
use crate::aggregate::regr::RegrType;
use crate::expressions::{self, Literal};
use crate::{AggregateExpr, PhysicalExpr, PhysicalSortExpr};
-use arrow::datatypes::Schema;
-use datafusion_common::{internal_err, not_impl_err, DataFusionError, Result};
-use datafusion_expr::AggregateFunction;
-
/// Create a physical aggregation expression.
/// This function errors when `input_phy_exprs`' can't be coerced to a valid
argument type of the aggregation function.
pub fn create_aggregate_expr(
@@ -379,9 +380,7 @@ pub fn create_aggregate_expr(
.downcast_ref::<Literal>()
.map(|literal| literal.value())
else {
- return internal_err!(
- "Second argument of NTH_VALUE needs to be a literal"
- );
+ return exec_err!("Second argument of NTH_VALUE needs to be a
literal");
};
let nullable = expr.nullable(input_schema)?;
Arc::new(expressions::NthValueAgg::new(
@@ -415,17 +414,19 @@ pub fn create_aggregate_expr(
#[cfg(test)]
mod tests {
- use super::*;
+ use arrow::datatypes::{DataType, Field};
+
+ use datafusion_common::{plan_err, ScalarValue};
+ use datafusion_expr::type_coercion::aggregates::NUMERICS;
+ use datafusion_expr::{type_coercion, Signature};
+
use crate::expressions::{
try_cast, ApproxDistinct, ApproxMedian, ApproxPercentileCont,
ArrayAgg, Avg,
BitAnd, BitOr, BitXor, BoolAnd, BoolOr, Correlation, Count, Covariance,
DistinctArrayAgg, DistinctCount, Max, Min, Stddev, Sum, Variance,
};
- use arrow::datatypes::{DataType, Field};
- use datafusion_common::{plan_err, ScalarValue};
- use datafusion_expr::type_coercion::aggregates::NUMERICS;
- use datafusion_expr::{type_coercion, Signature};
+ use super::*;
#[test]
fn test_count_arragg_approx_expr() -> Result<()> {
diff --git a/datafusion/physical-expr/src/conditional_expressions.rs
b/datafusion/physical-expr/src/conditional_expressions.rs
index 782897d463..cc8f3c8dfa 100644
--- a/datafusion/physical-expr/src/conditional_expressions.rs
+++ b/datafusion/physical-expr/src/conditional_expressions.rs
@@ -19,14 +19,14 @@ use arrow::array::{new_null_array, Array, BooleanArray};
use arrow::compute::kernels::zip::zip;
use arrow::compute::{and, is_not_null, is_null};
-use datafusion_common::{internal_err, DataFusionError, Result};
+use datafusion_common::{exec_err, DataFusionError, Result};
use datafusion_expr::ColumnarValue;
/// coalesce evaluates to the first value which is not NULL
pub fn coalesce(args: &[ColumnarValue]) -> Result<ColumnarValue> {
// do not accept 0 arguments.
if args.is_empty() {
- return internal_err!(
+ return exec_err!(
"coalesce was called with {} arguments. It requires at least 1.",
args.len()
);
diff --git a/datafusion/physical-expr/src/crypto_expressions.rs
b/datafusion/physical-expr/src/crypto_expressions.rs
index 580b0ed01b..3ff3bc83f2 100644
--- a/datafusion/physical-expr/src/crypto_expressions.rs
+++ b/datafusion/physical-expr/src/crypto_expressions.rs
@@ -23,11 +23,11 @@ use arrow::{
};
use blake2::{Blake2b512, Blake2s256, Digest};
use blake3::Hasher as Blake3;
-use datafusion_common::ScalarValue;
use datafusion_common::{
cast::{as_binary_array, as_generic_binary_array, as_generic_string_array},
plan_err,
};
+use datafusion_common::{exec_err, ScalarValue};
use datafusion_common::{internal_err, DataFusionError, Result};
use datafusion_expr::ColumnarValue;
use md5::Md5;
@@ -66,7 +66,7 @@ fn digest_process(
DataType::LargeBinary => {
digest_algorithm.digest_binary_array::<i64>(a.as_ref())
}
- other => internal_err!(
+ other => exec_err!(
"Unsupported data type {other:?} for function
{digest_algorithm}"
),
},
@@ -77,7 +77,7 @@ fn digest_process(
}
ScalarValue::Binary(a) | ScalarValue::LargeBinary(a) =>
Ok(digest_algorithm
.digest_scalar(a.as_ref().map(|v: &Vec<u8>| v.as_slice()))),
- other => internal_err!(
+ other => exec_err!(
"Unsupported data type {other:?} for function
{digest_algorithm}"
),
},
@@ -238,7 +238,7 @@ macro_rules! define_digest_function {
#[doc = $DOC]
pub fn $NAME(args: &[ColumnarValue]) -> Result<ColumnarValue> {
if args.len() != 1 {
- return internal_err!(
+ return exec_err!(
"{:?} args were supplied but {} takes exactly one
argument",
args.len(),
DigestAlgorithm::$METHOD.to_string()
@@ -264,7 +264,7 @@ fn hex_encode<T: AsRef<[u8]>>(data: T) -> String {
/// computes md5 hash digest of the given input
pub fn md5(args: &[ColumnarValue]) -> Result<ColumnarValue> {
if args.len() != 1 {
- return internal_err!(
+ return exec_err!(
"{:?} args were supplied but {} takes exactly one argument",
args.len(),
DigestAlgorithm::Md5
@@ -284,7 +284,7 @@ pub fn md5(args: &[ColumnarValue]) -> Result<ColumnarValue>
{
ColumnarValue::Scalar(ScalarValue::Binary(opt)) => {
ColumnarValue::Scalar(ScalarValue::Utf8(opt.map(hex_encode::<_>)))
}
- _ => return internal_err!("Impossibly got invalid results from
digest"),
+ _ => return exec_err!("Impossibly got invalid results from digest"),
})
}
@@ -329,7 +329,7 @@ define_digest_function!(
/// Standard algorithms are md5, sha1, sha224, sha256, sha384 and sha512.
pub fn digest(args: &[ColumnarValue]) -> Result<ColumnarValue> {
if args.len() != 2 {
- return internal_err!(
+ return exec_err!(
"{:?} args were supplied but digest takes exactly two arguments",
args.len()
);
@@ -339,7 +339,7 @@ pub fn digest(args: &[ColumnarValue]) ->
Result<ColumnarValue> {
ScalarValue::Utf8(Some(method)) |
ScalarValue::LargeUtf8(Some(method)) => {
method.parse::<DigestAlgorithm>()
}
- other => internal_err!("Unsupported data type {other:?} for
function digest"),
+ other => exec_err!("Unsupported data type {other:?} for function
digest"),
},
ColumnarValue::Array(_) => {
internal_err!("Digest using dynamically decided method is not yet
supported")
diff --git a/datafusion/physical-expr/src/functions.rs
b/datafusion/physical-expr/src/functions.rs
index 0dc3f96dc1..c91b96d67a 100644
--- a/datafusion/physical-expr/src/functions.rs
+++ b/datafusion/physical-expr/src/functions.rs
@@ -42,7 +42,7 @@ use arrow::{
datatypes::{DataType, Int32Type, Int64Type, Schema},
};
use arrow_array::Array;
-use datafusion_common::{internal_err, DataFusionError, Result, ScalarValue};
+use datafusion_common::{exec_err, DataFusionError, Result, ScalarValue};
pub use datafusion_expr::FuncMonotonicity;
use datafusion_expr::{
type_coercion::functions::data_types, BuiltinScalarFunction, ColumnarValue,
@@ -95,6 +95,7 @@ macro_rules! invoke_if_crypto_expressions_feature_flag {
#[cfg(not(feature = "crypto_expressions"))]
macro_rules! invoke_if_crypto_expressions_feature_flag {
($FUNC:ident, $NAME:expr) => {
+ use datafusion_common::internal_err;
|_: &[ColumnarValue]| -> Result<ColumnarValue> {
internal_err!(
"function {} requires compilation with feature flag:
crypto_expressions.",
@@ -433,7 +434,7 @@ pub fn create_physical_fun(
DataType::LargeUtf8 => {
make_scalar_function_inner(string_expressions::ascii::<i64>)(args)
}
- other => internal_err!("Unsupported data type {other:?} for
function ascii"),
+ other => exec_err!("Unsupported data type {other:?} for function
ascii"),
}),
BuiltinScalarFunction::BitLength => Arc::new(|args| match &args[0] {
ColumnarValue::Array(v) =>
Ok(ColumnarValue::Array(bit_length(v.as_ref())?)),
@@ -454,7 +455,7 @@ pub fn create_physical_fun(
DataType::LargeUtf8 => {
make_scalar_function_inner(string_expressions::btrim::<i64>)(args)
}
- other => internal_err!("Unsupported data type {other:?} for
function btrim"),
+ other => exec_err!("Unsupported data type {other:?} for function
btrim"),
}),
BuiltinScalarFunction::CharacterLength => {
Arc::new(|args| match args[0].data_type() {
@@ -474,7 +475,7 @@ pub fn create_physical_fun(
);
make_scalar_function_inner(func)(args)
}
- other => internal_err!(
+ other => exec_err!(
"Unsupported data type {other:?} for function
character_length"
),
})
@@ -536,7 +537,7 @@ pub fn create_physical_fun(
make_scalar_function_inner(string_expressions::initcap::<i64>)(args)
}
other => {
- internal_err!("Unsupported data type {other:?} for function
initcap")
+ exec_err!("Unsupported data type {other:?} for function
initcap")
}
}),
BuiltinScalarFunction::InStr => Arc::new(|args| match
args[0].data_type() {
@@ -546,7 +547,7 @@ pub fn create_physical_fun(
DataType::LargeUtf8 => {
make_scalar_function_inner(string_expressions::instr::<i64>)(args)
}
- other => internal_err!("Unsupported data type {other:?} for
function instr"),
+ other => exec_err!("Unsupported data type {other:?} for function
instr"),
}),
BuiltinScalarFunction::Left => Arc::new(|args| match
args[0].data_type() {
DataType::Utf8 => {
@@ -557,7 +558,7 @@ pub fn create_physical_fun(
let func = invoke_if_unicode_expressions_feature_flag!(left,
i64, "left");
make_scalar_function_inner(func)(args)
}
- other => internal_err!("Unsupported data type {other:?} for
function left"),
+ other => exec_err!("Unsupported data type {other:?} for function
left"),
}),
BuiltinScalarFunction::Lower => Arc::new(string_expressions::lower),
BuiltinScalarFunction::Lpad => Arc::new(|args| match
args[0].data_type() {
@@ -569,7 +570,7 @@ pub fn create_physical_fun(
let func = invoke_if_unicode_expressions_feature_flag!(lpad,
i64, "lpad");
make_scalar_function_inner(func)(args)
}
- other => internal_err!("Unsupported data type {other:?} for
function lpad"),
+ other => exec_err!("Unsupported data type {other:?} for function
lpad"),
}),
BuiltinScalarFunction::Ltrim => Arc::new(|args| match
args[0].data_type() {
DataType::Utf8 => {
@@ -578,7 +579,7 @@ pub fn create_physical_fun(
DataType::LargeUtf8 => {
make_scalar_function_inner(string_expressions::ltrim::<i64>)(args)
}
- other => internal_err!("Unsupported data type {other:?} for
function ltrim"),
+ other => exec_err!("Unsupported data type {other:?} for function
ltrim"),
}),
BuiltinScalarFunction::MD5 => {
Arc::new(invoke_if_crypto_expressions_feature_flag!(md5, "md5"))
@@ -616,7 +617,7 @@ pub fn create_physical_fun(
make_scalar_function_inner(func)(args)
}
other => {
- internal_err!("Unsupported data type {other:?} for function
regexp_like")
+ exec_err!("Unsupported data type {other:?} for function
regexp_like")
}
}),
BuiltinScalarFunction::RegexpMatch => {
@@ -637,9 +638,9 @@ pub fn create_physical_fun(
);
make_scalar_function_inner(func)(args)
}
- other => internal_err!(
- "Unsupported data type {other:?} for function regexp_match"
- ),
+ other => {
+ exec_err!("Unsupported data type {other:?} for function
regexp_match")
+ }
})
}
BuiltinScalarFunction::RegexpReplace => {
@@ -662,7 +663,7 @@ pub fn create_physical_fun(
let func = specializer_func(args)?;
func(args)
}
- other => internal_err!(
+ other => exec_err!(
"Unsupported data type {other:?} for function
regexp_replace"
),
})
@@ -674,7 +675,7 @@ pub fn create_physical_fun(
DataType::LargeUtf8 => {
make_scalar_function_inner(string_expressions::repeat::<i64>)(args)
}
- other => internal_err!("Unsupported data type {other:?} for
function repeat"),
+ other => exec_err!("Unsupported data type {other:?} for function
repeat"),
}),
BuiltinScalarFunction::Replace => Arc::new(|args| match
args[0].data_type() {
DataType::Utf8 => {
@@ -684,7 +685,7 @@ pub fn create_physical_fun(
make_scalar_function_inner(string_expressions::replace::<i64>)(args)
}
other => {
- internal_err!("Unsupported data type {other:?} for function
replace")
+ exec_err!("Unsupported data type {other:?} for function
replace")
}
}),
BuiltinScalarFunction::Reverse => Arc::new(|args| match
args[0].data_type() {
@@ -699,7 +700,7 @@ pub fn create_physical_fun(
make_scalar_function_inner(func)(args)
}
other => {
- internal_err!("Unsupported data type {other:?} for function
reverse")
+ exec_err!("Unsupported data type {other:?} for function
reverse")
}
}),
BuiltinScalarFunction::Right => Arc::new(|args| match
args[0].data_type() {
@@ -713,7 +714,7 @@ pub fn create_physical_fun(
invoke_if_unicode_expressions_feature_flag!(right, i64,
"right");
make_scalar_function_inner(func)(args)
}
- other => internal_err!("Unsupported data type {other:?} for
function right"),
+ other => exec_err!("Unsupported data type {other:?} for function
right"),
}),
BuiltinScalarFunction::Rpad => Arc::new(|args| match
args[0].data_type() {
DataType::Utf8 => {
@@ -724,7 +725,7 @@ pub fn create_physical_fun(
let func = invoke_if_unicode_expressions_feature_flag!(rpad,
i64, "rpad");
make_scalar_function_inner(func)(args)
}
- other => internal_err!("Unsupported data type {other:?} for
function rpad"),
+ other => exec_err!("Unsupported data type {other:?} for function
rpad"),
}),
BuiltinScalarFunction::Rtrim => Arc::new(|args| match
args[0].data_type() {
DataType::Utf8 => {
@@ -733,7 +734,7 @@ pub fn create_physical_fun(
DataType::LargeUtf8 => {
make_scalar_function_inner(string_expressions::rtrim::<i64>)(args)
}
- other => internal_err!("Unsupported data type {other:?} for
function rtrim"),
+ other => exec_err!("Unsupported data type {other:?} for function
rtrim"),
}),
BuiltinScalarFunction::SHA224 => {
Arc::new(invoke_if_crypto_expressions_feature_flag!(sha224,
"sha224"))
@@ -755,7 +756,7 @@ pub fn create_physical_fun(
make_scalar_function_inner(string_expressions::split_part::<i64>)(args)
}
other => {
- internal_err!("Unsupported data type {other:?} for function
split_part")
+ exec_err!("Unsupported data type {other:?} for function
split_part")
}
}),
BuiltinScalarFunction::StringToArray => {
@@ -767,7 +768,7 @@ pub fn create_physical_fun(
array_expressions::string_to_array::<i64>,
)(args),
other => {
- internal_err!(
+ exec_err!(
"Unsupported data type {other:?} for function
string_to_array"
)
}
@@ -781,7 +782,7 @@ pub fn create_physical_fun(
make_scalar_function_inner(string_expressions::starts_with::<i64>)(args)
}
other => {
- internal_err!("Unsupported data type {other:?} for function
starts_with")
+ exec_err!("Unsupported data type {other:?} for function
starts_with")
}
}),
BuiltinScalarFunction::EndsWith => Arc::new(|args| match
args[0].data_type() {
@@ -792,7 +793,7 @@ pub fn create_physical_fun(
make_scalar_function_inner(string_expressions::ends_with::<i64>)(args)
}
other => {
- internal_err!("Unsupported data type {other:?} for function
ends_with")
+ exec_err!("Unsupported data type {other:?} for function
ends_with")
}
}),
BuiltinScalarFunction::Strpos => Arc::new(|args| match
args[0].data_type() {
@@ -808,7 +809,7 @@ pub fn create_physical_fun(
);
make_scalar_function_inner(func)(args)
}
- other => internal_err!("Unsupported data type {other:?} for
function strpos"),
+ other => exec_err!("Unsupported data type {other:?} for function
strpos"),
}),
BuiltinScalarFunction::Substr => Arc::new(|args| match
args[0].data_type() {
DataType::Utf8 => {
@@ -821,7 +822,7 @@ pub fn create_physical_fun(
invoke_if_unicode_expressions_feature_flag!(substr, i64,
"substr");
make_scalar_function_inner(func)(args)
}
- other => internal_err!("Unsupported data type {other:?} for
function substr"),
+ other => exec_err!("Unsupported data type {other:?} for function
substr"),
}),
BuiltinScalarFunction::ToHex => Arc::new(|args| match
args[0].data_type() {
DataType::Int32 => {
@@ -830,7 +831,7 @@ pub fn create_physical_fun(
DataType::Int64 => {
make_scalar_function_inner(string_expressions::to_hex::<Int64Type>)(args)
}
- other => internal_err!("Unsupported data type {other:?} for
function to_hex"),
+ other => exec_err!("Unsupported data type {other:?} for function
to_hex"),
}),
BuiltinScalarFunction::Translate => Arc::new(|args| match
args[0].data_type() {
DataType::Utf8 => {
@@ -850,7 +851,7 @@ pub fn create_physical_fun(
make_scalar_function_inner(func)(args)
}
other => {
- internal_err!("Unsupported data type {other:?} for function
translate")
+ exec_err!("Unsupported data type {other:?} for function
translate")
}
}),
BuiltinScalarFunction::Trim => Arc::new(|args| match
args[0].data_type() {
@@ -860,13 +861,13 @@ pub fn create_physical_fun(
DataType::LargeUtf8 => {
make_scalar_function_inner(string_expressions::btrim::<i64>)(args)
}
- other => internal_err!("Unsupported data type {other:?} for
function trim"),
+ other => exec_err!("Unsupported data type {other:?} for function
trim"),
}),
BuiltinScalarFunction::Upper => Arc::new(string_expressions::upper),
BuiltinScalarFunction::Uuid => Arc::new(string_expressions::uuid),
BuiltinScalarFunction::ArrowTypeof => Arc::new(move |args| {
if args.len() != 1 {
- return internal_err!(
+ return exec_err!(
"arrow_typeof function requires 1 arguments, got {}",
args.len()
);
@@ -884,9 +885,7 @@ pub fn create_physical_fun(
DataType::LargeUtf8 => {
make_scalar_function_inner(string_expressions::overlay::<i64>)(args)
}
- other => Err(DataFusionError::Internal(format!(
- "Unsupported data type {other:?} for function overlay",
- ))),
+ other => exec_err!("Unsupported data type {other:?} for function
overlay"),
}),
BuiltinScalarFunction::Levenshtein => {
Arc::new(|args| match args[0].data_type() {
@@ -896,9 +895,9 @@ pub fn create_physical_fun(
DataType::LargeUtf8 => make_scalar_function_inner(
string_expressions::levenshtein::<i64>,
)(args),
- other => Err(DataFusionError::Internal(format!(
- "Unsupported data type {other:?} for function levenshtein",
- ))),
+ other => {
+ exec_err!("Unsupported data type {other:?} for function
levenshtein")
+ }
})
}
BuiltinScalarFunction::SubstrIndex => {
@@ -919,9 +918,9 @@ pub fn create_physical_fun(
);
make_scalar_function_inner(func)(args)
}
- other => Err(DataFusionError::Internal(format!(
- "Unsupported data type {other:?} for function
substr_index",
- ))),
+ other => {
+ exec_err!("Unsupported data type {other:?} for function
substr_index")
+ }
})
}
BuiltinScalarFunction::FindInSet => Arc::new(|args| match
args[0].data_type() {
@@ -941,9 +940,9 @@ pub fn create_physical_fun(
);
make_scalar_function_inner(func)(args)
}
- other => Err(DataFusionError::Internal(format!(
- "Unsupported data type {other:?} for function find_in_set",
- ))),
+ other => {
+ exec_err!("Unsupported data type {other:?} for function
find_in_set")
+ }
}),
})
}
@@ -1023,7 +1022,7 @@ mod tests {
record_batch::RecordBatch,
};
use datafusion_common::cast::{as_boolean_array, as_uint64_array};
- use datafusion_common::{exec_err, plan_err};
+ use datafusion_common::{exec_err, internal_err, plan_err};
use datafusion_common::{Result, ScalarValue};
use datafusion_expr::type_coercion::functions::data_types;
use datafusion_expr::Signature;
diff --git a/datafusion/physical-expr/src/math_expressions.rs
b/datafusion/physical-expr/src/math_expressions.rs
index b622aee8e2..98a05dff53 100644
--- a/datafusion/physical-expr/src/math_expressions.rs
+++ b/datafusion/physical-expr/src/math_expressions.rs
@@ -17,19 +17,20 @@
//! Math expressions
+use std::any::type_name;
+use std::iter;
+use std::mem::swap;
+use std::sync::Arc;
+
use arrow::array::ArrayRef;
use arrow::array::{BooleanArray, Float32Array, Float64Array, Int64Array};
use arrow::datatypes::DataType;
-use datafusion_common::internal_err;
-use datafusion_common::ScalarValue;
+use rand::{thread_rng, Rng};
+
use datafusion_common::ScalarValue::{Float32, Int64};
+use datafusion_common::{exec_err, ScalarValue};
use datafusion_common::{DataFusionError, Result};
use datafusion_expr::ColumnarValue;
-use rand::{thread_rng, Rng};
-use std::any::type_name;
-use std::iter;
-use std::mem::swap;
-use std::sync::Arc;
macro_rules! downcast_compute_op {
($ARRAY:expr, $NAME:expr, $FUNC:ident, $TYPE:ident) => {{
@@ -40,7 +41,7 @@ macro_rules! downcast_compute_op {
arrow::compute::kernels::arity::unary(array, |x|
x.$FUNC());
Ok(Arc::new(res))
}
- _ => internal_err!("Invalid data type for {}", $NAME),
+ _ => exec_err!("Invalid data type for {}", $NAME),
}
}};
}
@@ -57,11 +58,9 @@ macro_rules! unary_primitive_array_op {
let result = downcast_compute_op!(array, $NAME, $FUNC,
Float64Array);
Ok(ColumnarValue::Array(result?))
}
- other => internal_err!(
- "Unsupported data type {:?} for function {}",
- other,
- $NAME
- ),
+ other => {
+ exec_err!("Unsupported data type {:?} for function {}",
other, $NAME)
+ }
},
ColumnarValue::Scalar(a) => match a {
ScalarValue::Float32(a) => Ok(ColumnarValue::Scalar(
@@ -70,7 +69,7 @@ macro_rules! unary_primitive_array_op {
ScalarValue::Float64(a) => Ok(ColumnarValue::Scalar(
ScalarValue::Float64(a.map(|x| x.$FUNC())),
)),
- _ => internal_err!(
+ _ => exec_err!(
"Unsupported data type {:?} for function {}",
($VALUE).data_type(),
$NAME
@@ -187,7 +186,7 @@ pub fn factorial(args: &[ArrayRef]) -> Result<ArrayRef> {
Int64Array,
{ |value: i64| { (1..=value).product() } }
)) as ArrayRef),
- other => internal_err!("Unsupported data type {other:?} for function
factorial."),
+ other => exec_err!("Unsupported data type {other:?} for function
factorial."),
}
}
@@ -234,7 +233,7 @@ pub fn gcd(args: &[ArrayRef]) -> Result<ArrayRef> {
Int64Array,
{ compute_gcd }
)) as ArrayRef),
- other => internal_err!("Unsupported data type {other:?} for function
gcd"),
+ other => exec_err!("Unsupported data type {other:?} for function gcd"),
}
}
@@ -260,7 +259,7 @@ pub fn lcm(args: &[ArrayRef]) -> Result<ArrayRef> {
Int64Array,
{ compute_lcm }
)) as ArrayRef),
- other => internal_err!("Unsupported data type {other:?} for function
lcm"),
+ other => exec_err!("Unsupported data type {other:?} for function lcm"),
}
}
@@ -305,7 +304,7 @@ pub fn nanvl(args: &[ArrayRef]) -> Result<ArrayRef> {
)) as ArrayRef)
}
- other => internal_err!("Unsupported data type {other:?} for function
nanvl"),
+ other => exec_err!("Unsupported data type {other:?} for function
nanvl"),
}
}
@@ -328,7 +327,7 @@ pub fn isnan(args: &[ArrayRef]) -> Result<ArrayRef> {
{ f32::is_nan }
)) as ArrayRef),
- other => internal_err!("Unsupported data type {other:?} for function
isnan"),
+ other => exec_err!("Unsupported data type {other:?} for function
isnan"),
}
}
@@ -351,14 +350,14 @@ pub fn iszero(args: &[ArrayRef]) -> Result<ArrayRef> {
{ |x: f32| { x == 0_f32 } }
)) as ArrayRef),
- other => internal_err!("Unsupported data type {other:?} for function
iszero"),
+ other => exec_err!("Unsupported data type {other:?} for function
iszero"),
}
}
/// Pi SQL function
pub fn pi(args: &[ColumnarValue]) -> Result<ColumnarValue> {
if !matches!(&args[0], ColumnarValue::Array(_)) {
- return internal_err!("Expect pi function to take no param");
+ return exec_err!("Expect pi function to take no param");
}
let array = Float64Array::from_value(std::f64::consts::PI, 1);
Ok(ColumnarValue::Array(Arc::new(array)))
@@ -368,7 +367,7 @@ pub fn pi(args: &[ColumnarValue]) -> Result<ColumnarValue> {
pub fn random(args: &[ColumnarValue]) -> Result<ColumnarValue> {
let len: usize = match &args[0] {
ColumnarValue::Array(array) => array.len(),
- _ => return internal_err!("Expect random function to take no param"),
+ _ => return exec_err!("Expect random function to take no param"),
};
let mut rng = thread_rng();
let values = iter::repeat_with(|| rng.gen_range(0.0..1.0)).take(len);
@@ -379,7 +378,7 @@ pub fn random(args: &[ColumnarValue]) ->
Result<ColumnarValue> {
/// Round SQL function
pub fn round(args: &[ArrayRef]) -> Result<ArrayRef> {
if args.len() != 1 && args.len() != 2 {
- return internal_err!(
+ return exec_err!(
"round function requires one or two arguments, got {}",
args.len()
);
@@ -423,9 +422,9 @@ pub fn round(args: &[ArrayRef]) -> Result<ArrayRef> {
}
}
)) as ArrayRef),
- _ => internal_err!(
- "round function requires a scalar or array for decimal_places"
- ),
+ _ => {
+ exec_err!("round function requires a scalar or array for
decimal_places")
+ }
},
DataType::Float32 => match decimal_places {
@@ -459,12 +458,12 @@ pub fn round(args: &[ArrayRef]) -> Result<ArrayRef> {
}
}
)) as ArrayRef),
- _ => internal_err!(
- "round function requires a scalar or array for decimal_places"
- ),
+ _ => {
+ exec_err!("round function requires a scalar or array for
decimal_places")
+ }
},
- other => internal_err!("Unsupported data type {other:?} for function
round"),
+ other => exec_err!("Unsupported data type {other:?} for function
round"),
}
}
@@ -489,7 +488,7 @@ pub fn power(args: &[ArrayRef]) -> Result<ArrayRef> {
{ i64::pow }
)) as ArrayRef),
- other => internal_err!("Unsupported data type {other:?} for function
power"),
+ other => exec_err!("Unsupported data type {other:?} for function
power"),
}
}
@@ -514,7 +513,7 @@ pub fn atan2(args: &[ArrayRef]) -> Result<ArrayRef> {
{ f32::atan2 }
)) as ArrayRef),
- other => internal_err!("Unsupported data type {other:?} for function
atan2"),
+ other => exec_err!("Unsupported data type {other:?} for function
atan2"),
}
}
@@ -547,7 +546,7 @@ pub fn log(args: &[ArrayRef]) -> Result<ArrayRef> {
Float64Array,
{ f64::log }
)) as ArrayRef),
- _ => internal_err!("log function requires a scalar or array for
base"),
+ _ => exec_err!("log function requires a scalar or array for base"),
},
DataType::Float32 => match base {
@@ -565,10 +564,10 @@ pub fn log(args: &[ArrayRef]) -> Result<ArrayRef> {
Float32Array,
{ f32::log }
)) as ArrayRef),
- _ => internal_err!("log function requires a scalar or array for
base"),
+ _ => exec_err!("log function requires a scalar or array for base"),
},
- other => internal_err!("Unsupported data type {other:?} for function
log"),
+ other => exec_err!("Unsupported data type {other:?} for function log"),
}
}
@@ -589,7 +588,7 @@ pub fn cot(args: &[ArrayRef]) -> Result<ArrayRef> {
{ compute_cot32 }
)) as ArrayRef),
- other => internal_err!("Unsupported data type {other:?} for function
cot"),
+ other => exec_err!("Unsupported data type {other:?} for function cot"),
}
}
@@ -606,7 +605,7 @@ fn compute_cot64(x: f64) -> f64 {
/// Truncate(numeric, decimalPrecision) and trunc(numeric) SQL function
pub fn trunc(args: &[ArrayRef]) -> Result<ArrayRef> {
if args.len() != 1 && args.len() != 2 {
- return internal_err!(
+ return exec_err!(
"truncate function requires one or two arguments, got {}",
args.len()
);
@@ -635,7 +634,7 @@ pub fn trunc(args: &[ArrayRef]) -> Result<ArrayRef> {
Int64Array,
{ compute_truncate64 }
)) as ArrayRef),
- _ => internal_err!("trunc function requires a scalar or array for
precision"),
+ _ => exec_err!("trunc function requires a scalar or array for
precision"),
},
DataType::Float32 => match precision {
ColumnarValue::Scalar(Int64(Some(0))) => Ok(Arc::new(
@@ -650,9 +649,9 @@ pub fn trunc(args: &[ArrayRef]) -> Result<ArrayRef> {
Int64Array,
{ compute_truncate32 }
)) as ArrayRef),
- _ => internal_err!("trunc function requires a scalar or array for
precision"),
+ _ => exec_err!("trunc function requires a scalar or array for
precision"),
},
- other => internal_err!("Unsupported data type {other:?} for function
trunc"),
+ other => exec_err!("Unsupported data type {other:?} for function
trunc"),
}
}
@@ -668,13 +667,14 @@ fn compute_truncate64(x: f64, y: i64) -> f64 {
#[cfg(test)]
mod tests {
-
- use super::*;
use arrow::array::{Float64Array, NullArray};
+
use datafusion_common::cast::{
as_boolean_array, as_float32_array, as_float64_array, as_int64_array,
};
+ use super::*;
+
#[test]
fn test_random_expression() {
let args = vec![ColumnarValue::Array(Arc::new(NullArray::new(1)))];
diff --git a/datafusion/physical-expr/src/regex_expressions.rs
b/datafusion/physical-expr/src/regex_expressions.rs
index b1334854ba..846e5801af 100644
--- a/datafusion/physical-expr/src/regex_expressions.rs
+++ b/datafusion/physical-expr/src/regex_expressions.rs
@@ -21,19 +21,18 @@
//! Regex expressions
+use std::sync::{Arc, OnceLock};
+
use arrow::array::{
new_null_array, Array, ArrayDataBuilder, ArrayRef, BufferBuilder,
GenericStringArray,
OffsetSizeTrait,
};
+use hashbrown::HashMap;
+use regex::Regex;
use datafusion_common::{arrow_datafusion_err, exec_err, plan_err};
-use datafusion_common::{
- cast::as_generic_string_array, internal_err, DataFusionError, Result,
-};
+use datafusion_common::{cast::as_generic_string_array, DataFusionError,
Result};
use datafusion_expr::{ColumnarValue, ScalarFunctionImplementation};
-use hashbrown::HashMap;
-use regex::Regex;
-use std::sync::{Arc, OnceLock};
use crate::functions::{
make_scalar_function_inner, make_scalar_function_with_hints, Hint,
@@ -188,7 +187,7 @@ pub fn regexp_match<T: OffsetSizeTrait>(args: &[ArrayRef])
-> Result<ArrayRef> {
arrow_string::regexp::regexp_match(values, regex, Some(flags))
.map_err(|e| arrow_datafusion_err!(e))
}
- other => internal_err!(
+ other => exec_err!(
"regexp_match was called with {other} arguments. It requires at
least 2 and at most 3."
),
}
@@ -341,7 +340,7 @@ pub fn regexp_replace<T: OffsetSizeTrait>(args:
&[ArrayRef]) -> Result<ArrayRef>
Ok(Arc::new(result) as ArrayRef)
}
- other => internal_err!(
+ other => exec_err!(
"regexp_replace was called with {other} arguments. It requires at
least 3 and at most 4."
),
}
@@ -374,7 +373,7 @@ fn _regexp_replace_static_pattern_replace<T:
OffsetSizeTrait>(
3 => None,
4 => Some(fetch_string_arg!(&args[3], "flags", T,
_regexp_replace_early_abort)),
other => {
- return internal_err!(
+ return exec_err!(
"regexp_replace was called with {other} arguments. It requires
at least 3 and at most 4."
)
}
diff --git a/datafusion/physical-expr/src/string_expressions.rs
b/datafusion/physical-expr/src/string_expressions.rs
index 34a436ebe3..6a4a29763e 100644
--- a/datafusion/physical-expr/src/string_expressions.rs
+++ b/datafusion/physical-expr/src/string_expressions.rs
@@ -21,6 +21,12 @@
//! String expressions
+use std::sync::Arc;
+use std::{
+ fmt::{Display, Formatter},
+ iter,
+};
+
use arrow::{
array::{
Array, ArrayRef, GenericStringArray, Int32Array, Int64Array,
OffsetSizeTrait,
@@ -28,6 +34,8 @@ use arrow::{
},
datatypes::{ArrowNativeType, ArrowPrimitiveType, DataType},
};
+use uuid::Uuid;
+
use datafusion_common::utils::datafusion_strsim;
use datafusion_common::{
cast::{
@@ -35,14 +43,8 @@ use datafusion_common::{
},
exec_err, ScalarValue,
};
-use datafusion_common::{internal_err, DataFusionError, Result};
+use datafusion_common::{DataFusionError, Result};
use datafusion_expr::ColumnarValue;
-use std::sync::Arc;
-use std::{
- fmt::{Display, Formatter},
- iter,
-};
-use uuid::Uuid;
/// applies a unary expression to `args[0]` that is expected to be
downcastable to
/// a `GenericStringArray` and returns a `GenericStringArray` (which may have
a different offset)
@@ -62,7 +64,7 @@ where
F: Fn(&'a str) -> R,
{
if args.len() != 1 {
- return internal_err!(
+ return exec_err!(
"{:?} args were supplied but {} takes exactly one argument",
args.len(),
name
@@ -102,7 +104,7 @@ where
&[a.as_ref()], op, name
)?)))
}
- other => internal_err!("Unsupported data type {other:?} for
function {name}"),
+ other => exec_err!("Unsupported data type {other:?} for function
{name}"),
},
ColumnarValue::Scalar(scalar) => match scalar {
ScalarValue::Utf8(a) => {
@@ -113,7 +115,7 @@ where
let result = a.as_ref().map(|x| (op)(x).as_ref().to_string());
Ok(ColumnarValue::Scalar(ScalarValue::LargeUtf8(result)))
}
- other => internal_err!("Unsupported data type {other:?} for
function {name}"),
+ other => exec_err!("Unsupported data type {other:?} for function
{name}"),
},
}
}
@@ -170,7 +172,7 @@ pub fn chr(args: &[ArrayRef]) -> Result<ArrayRef> {
pub fn concat(args: &[ColumnarValue]) -> Result<ColumnarValue> {
// do not accept 0 arguments.
if args.is_empty() {
- return internal_err!(
+ return exec_err!(
"concat was called with {} arguments. It requires at least 1.",
args.len()
);
@@ -236,7 +238,7 @@ pub fn concat_ws(args: &[ArrayRef]) -> Result<ArrayRef> {
// do not accept 0 or 1 arguments.
if args.len() < 2 {
- return internal_err!(
+ return exec_err!(
"concat_ws was called with {} arguments. It requires at least 2.",
args.len()
);
@@ -333,7 +335,7 @@ pub fn instr<T: OffsetSizeTrait>(args: &[ArrayRef]) ->
Result<ArrayRef> {
Ok(Arc::new(result) as ArrayRef)
}
other => {
- internal_err!(
+ exec_err!(
"instr was called with {other} datatype arguments. It requires
Utf8 or LargeUtf8."
)
}
@@ -410,7 +412,7 @@ fn general_trim<T: OffsetSizeTrait>(
Ok(Arc::new(result) as ArrayRef)
}
other => {
- internal_err!(
+ exec_err!(
"{trim_type} was called with {other} arguments. It requires at
least 1 and at most 2."
)
}
@@ -541,7 +543,7 @@ where
} else if let Some(value_isize) = value.to_isize() {
Ok(Some(format!("{value_isize:x}")))
} else {
- internal_err!("Unsupported data type {integer:?} for
function to_hex")
+ exec_err!("Unsupported data type {integer:?} for function
to_hex")
}
} else {
Ok(None)
@@ -563,7 +565,7 @@ pub fn upper(args: &[ColumnarValue]) ->
Result<ColumnarValue> {
pub fn uuid(args: &[ColumnarValue]) -> Result<ColumnarValue> {
let len: usize = match &args[0] {
ColumnarValue::Array(array) => array.len(),
- _ => return internal_err!("Expect uuid function to take no param"),
+ _ => return exec_err!("Expect uuid function to take no param"),
};
let values = iter::repeat_with(|| Uuid::new_v4().to_string()).take(len);
@@ -654,9 +656,7 @@ pub fn overlay<T: OffsetSizeTrait>(args: &[ArrayRef]) ->
Result<ArrayRef> {
Ok(Arc::new(result) as ArrayRef)
}
other => {
- internal_err!(
- "overlay was called with {other} arguments. It requires 3 or
4."
- )
+ exec_err!("overlay was called with {other} arguments. It requires
3 or 4.")
}
}
}
@@ -665,10 +665,10 @@ pub fn overlay<T: OffsetSizeTrait>(args: &[ArrayRef]) ->
Result<ArrayRef> {
/// LEVENSHTEIN('kitten', 'sitting') = 3
pub fn levenshtein<T: OffsetSizeTrait>(args: &[ArrayRef]) -> Result<ArrayRef> {
if args.len() != 2 {
- return Err(DataFusionError::Internal(format!(
+ return exec_err!(
"levenshtein function requires two arguments, got {}",
args.len()
- )));
+ );
}
let str1_array = as_generic_string_array::<T>(&args[0])?;
let str2_array = as_generic_string_array::<T>(&args[1])?;
@@ -700,7 +700,7 @@ pub fn levenshtein<T: OffsetSizeTrait>(args: &[ArrayRef])
-> Result<ArrayRef> {
Ok(Arc::new(result) as ArrayRef)
}
other => {
- internal_err!(
+ exec_err!(
"levenshtein was called with {other} datatype arguments. It
requires Utf8 or LargeUtf8."
)
}
@@ -709,12 +709,13 @@ pub fn levenshtein<T: OffsetSizeTrait>(args: &[ArrayRef])
-> Result<ArrayRef> {
#[cfg(test)]
mod tests {
-
- use crate::string_expressions;
use arrow::{array::Int32Array, datatypes::Int32Type};
use arrow_array::Int64Array;
+
use datafusion_common::cast::as_int32_array;
+ use crate::string_expressions;
+
use super::*;
#[test]
diff --git a/datafusion/physical-expr/src/unicode_expressions.rs
b/datafusion/physical-expr/src/unicode_expressions.rs
index 240efe4223..3209a6176f 100644
--- a/datafusion/physical-expr/src/unicode_expressions.rs
+++ b/datafusion/physical-expr/src/unicode_expressions.rs
@@ -21,18 +21,20 @@
//! Unicode expressions
+use std::cmp::{max, Ordering};
+use std::sync::Arc;
+
use arrow::{
array::{ArrayRef, GenericStringArray, OffsetSizeTrait, PrimitiveArray},
datatypes::{ArrowNativeType, ArrowPrimitiveType},
};
+use hashbrown::HashMap;
+use unicode_segmentation::UnicodeSegmentation;
+
use datafusion_common::{
cast::{as_generic_string_array, as_int64_array},
- exec_err, internal_err, DataFusionError, Result,
+ exec_err, DataFusionError, Result,
};
-use hashbrown::HashMap;
-use std::cmp::{max, Ordering};
-use std::sync::Arc;
-use unicode_segmentation::UnicodeSegmentation;
/// Returns number of characters in the string.
/// character_length('josé') = 4
@@ -312,7 +314,7 @@ pub fn rpad<T: OffsetSizeTrait>(args: &[ArrayRef]) ->
Result<ArrayRef> {
Ok(Arc::new(result) as ArrayRef)
}
- other => internal_err!(
+ other => exec_err!(
"rpad was called with {other} arguments. It requires at least 2
and at most 3."
),
}
@@ -407,7 +409,7 @@ pub fn substr<T: OffsetSizeTrait>(args: &[ArrayRef]) ->
Result<ArrayRef> {
Ok(Arc::new(result) as ArrayRef)
}
other => {
- internal_err!("substr was called with {other} arguments. It
requires 2 or 3.")
+ exec_err!("substr was called with {other} arguments. It requires 2
or 3.")
}
}
}
@@ -463,7 +465,7 @@ pub fn translate<T: OffsetSizeTrait>(args: &[ArrayRef]) ->
Result<ArrayRef> {
/// SUBSTRING_INDEX('www.apache.org', '.', -1) = org
pub fn substr_index<T: OffsetSizeTrait>(args: &[ArrayRef]) -> Result<ArrayRef>
{
if args.len() != 3 {
- return internal_err!(
+ return exec_err!(
"substr_index was called with {} arguments. It requires 3.",
args.len()
);
@@ -528,7 +530,7 @@ where
T::Native: OffsetSizeTrait,
{
if args.len() != 2 {
- return internal_err!(
+ return exec_err!(
"find_in_set was called with {} arguments. It requires 2.",
args.len()
);