diff --git a/datafusion/functions-nested/src/string.rs b/datafusion/functions-nested/src/string.rs index 7fc5e800e2e4..bbe1dc2a01e9 100644 --- a/datafusion/functions-nested/src/string.rs +++ b/datafusion/functions-nested/src/string.rs @@ -36,7 +36,7 @@ use crate::utils::make_scalar_function; use arrow::compute::cast; use arrow_array::builder::{ArrayBuilder, LargeStringBuilder, StringViewBuilder}; use arrow_array::cast::AsArray; -use arrow_array::{GenericStringArray, StringViewArray}; +use arrow_array::{GenericStringArray, StringArrayType, StringViewArray}; use arrow_schema::DataType::{ Dictionary, FixedSizeList, LargeList, LargeUtf8, List, Null, Utf8, Utf8View, }; @@ -45,7 +45,6 @@ use datafusion_common::exec_err; use datafusion_expr::{ ColumnarValue, Documentation, ScalarUDFImpl, Signature, Volatility, }; -use datafusion_functions::strings::StringArrayType; use datafusion_functions::{downcast_arg, downcast_named_arg}; use datafusion_macros::user_doc; use std::sync::Arc; diff --git a/datafusion/functions/src/datetime/common.rs b/datafusion/functions/src/datetime/common.rs index 6e3106a5bce6..c674ae09ecb3 100644 --- a/datafusion/functions/src/datetime/common.rs +++ b/datafusion/functions/src/datetime/common.rs @@ -19,7 +19,7 @@ use std::sync::Arc; use arrow::array::{ Array, ArrowPrimitiveType, AsArray, GenericStringArray, PrimitiveArray, - StringViewArray, + StringArrayType, StringViewArray, }; use arrow::compute::kernels::cast_utils::string_to_timestamp_nanos; use arrow::datatypes::DataType; @@ -27,7 +27,6 @@ use chrono::format::{parse, Parsed, StrftimeItems}; use chrono::LocalResult::Single; use chrono::{DateTime, TimeZone, Utc}; -use crate::strings::StringArrayType; use datafusion_common::cast::as_generic_string_array; use datafusion_common::{ exec_err, unwrap_or_internal_err, DataFusionError, Result, ScalarType, ScalarValue, diff --git a/datafusion/functions/src/regex/regexpcount.rs b/datafusion/functions/src/regex/regexpcount.rs index 8f06c75b2fe9..fdeea30908ad 100644 --- a/datafusion/functions/src/regex/regexpcount.rs +++ b/datafusion/functions/src/regex/regexpcount.rs @@ -15,8 +15,7 @@ // specific language governing permissions and limitations // under the License. -use crate::strings::StringArrayType; -use arrow::array::{Array, ArrayRef, AsArray, Datum, Int64Array}; +use arrow::array::{Array, ArrayRef, AsArray, Datum, Int64Array, StringArrayType}; use arrow::datatypes::{DataType, Int64Type}; use arrow::datatypes::{ DataType::Int64, DataType::LargeUtf8, DataType::Utf8, DataType::Utf8View, diff --git a/datafusion/functions/src/string/repeat.rs b/datafusion/functions/src/string/repeat.rs index d5ebf902c110..eea9af2ba749 100644 --- a/datafusion/functions/src/string/repeat.rs +++ b/datafusion/functions/src/string/repeat.rs @@ -18,11 +18,10 @@ use std::any::Any; use std::sync::Arc; -use crate::strings::StringArrayType; use crate::utils::{make_scalar_function, utf8_to_str_type}; use arrow::array::{ ArrayRef, AsArray, GenericStringArray, GenericStringBuilder, Int64Array, - OffsetSizeTrait, StringViewArray, + OffsetSizeTrait, StringArrayType, StringViewArray, }; use arrow::datatypes::DataType; use arrow::datatypes::DataType::{LargeUtf8, Utf8, Utf8View}; diff --git a/datafusion/functions/src/string/split_part.rs b/datafusion/functions/src/string/split_part.rs index 9a6ee726698b..a597e1be5d02 100644 --- a/datafusion/functions/src/string/split_part.rs +++ b/datafusion/functions/src/string/split_part.rs @@ -15,10 +15,10 @@ // specific language governing permissions and limitations // under the License. -use crate::strings::StringArrayType; use crate::utils::utf8_to_str_type; use arrow::array::{ - ArrayRef, GenericStringArray, Int64Array, OffsetSizeTrait, StringViewArray, + ArrayRef, GenericStringArray, Int64Array, OffsetSizeTrait, StringArrayType, + StringViewArray, }; use arrow::array::{AsArray, GenericStringBuilder}; use arrow::datatypes::DataType; diff --git a/datafusion/functions/src/strings.rs b/datafusion/functions/src/strings.rs index f18573db827f..bb991c28fe4d 100644 --- a/datafusion/functions/src/strings.rs +++ b/datafusion/functions/src/strings.rs @@ -26,64 +26,7 @@ use arrow::datatypes::DataType; use arrow_buffer::{MutableBuffer, NullBuffer, NullBufferBuilder}; /// Abstracts iteration over different types of string arrays. -/// -/// The [`StringArrayType`] trait helps write generic code for string functions that can work with -/// different types of string arrays. -/// -/// Currently three types are supported: -/// - [`StringArray`] -/// - [`LargeStringArray`] -/// - [`StringViewArray`] -/// -/// It is inspired / copied from [arrow-rs]. -/// -/// [arrow-rs]: https://github.com/apache/arrow-rs/blob/bf0ea9129e617e4a3cf915a900b747cc5485315f/arrow-string/src/like.rs#L151-L157 -/// -/// # Examples -/// Generic function that works for [`StringArray`], [`LargeStringArray`] -/// and [`StringViewArray`]: -/// ``` -/// # use arrow::array::{StringArray, LargeStringArray, StringViewArray}; -/// # use datafusion_functions::strings::StringArrayType; -/// -/// /// Combines string values for any StringArrayType type. It can be invoked on -/// /// and combination of `StringArray`, `LargeStringArray` or `StringViewArray` -/// fn combine_values<'a, S1, S2>(array1: S1, array2: S2) -> Vec -/// where S1: StringArrayType<'a>, S2: StringArrayType<'a> -/// { -/// // iterate over the elements of the 2 arrays in parallel -/// array1 -/// .iter() -/// .zip(array2.iter()) -/// .map(|(s1, s2)| { -/// // if both values are non null, combine them -/// if let (Some(s1), Some(s2)) = (s1, s2) { -/// format!("{s1}{s2}") -/// } else { -/// "None".to_string() -/// } -/// }) -/// .collect() -/// } -/// -/// let string_array = StringArray::from(vec!["foo", "bar"]); -/// let large_string_array = LargeStringArray::from(vec!["foo2", "bar2"]); -/// let string_view_array = StringViewArray::from(vec!["foo3", "bar3"]); -/// -/// // can invoke this function a string array and large string array -/// assert_eq!( -/// combine_values(&string_array, &large_string_array), -/// vec![String::from("foofoo2"), String::from("barbar2")] -/// ); -/// -/// // Can call the same function with string array and string view array -/// assert_eq!( -/// combine_values(&string_array, &string_view_array), -/// vec![String::from("foofoo3"), String::from("barbar3")] -/// ); -/// ``` -/// -/// [`LargeStringArray`]: arrow::array::LargeStringArray +#[deprecated(since = "45.0.0", note = "Use arrow::array::StringArrayType instead")] pub trait StringArrayType<'a>: ArrayAccessor + Sized { /// Return an [`ArrayIter`] over the values of the array. /// @@ -94,6 +37,7 @@ pub trait StringArrayType<'a>: ArrayAccessor + Sized { fn is_ascii(&self) -> bool; } +#[allow(deprecated)] impl<'a, T: OffsetSizeTrait> StringArrayType<'a> for &'a GenericStringArray { fn iter(&self) -> ArrayIter { GenericStringArray::::iter(self) @@ -104,6 +48,7 @@ impl<'a, T: OffsetSizeTrait> StringArrayType<'a> for &'a GenericStringArray { } } +#[allow(deprecated)] impl<'a> StringArrayType<'a> for &'a StringViewArray { fn iter(&self) -> ArrayIter { StringViewArray::iter(self) diff --git a/datafusion/functions/src/unicode/character_length.rs b/datafusion/functions/src/unicode/character_length.rs index ee436276fbc8..6ef0871f368b 100644 --- a/datafusion/functions/src/unicode/character_length.rs +++ b/datafusion/functions/src/unicode/character_length.rs @@ -15,10 +15,10 @@ // specific language governing permissions and limitations // under the License. -use crate::strings::StringArrayType; use crate::utils::{make_scalar_function, utf8_to_int_type}; use arrow::array::{ Array, ArrayRef, ArrowPrimitiveType, AsArray, OffsetSizeTrait, PrimitiveBuilder, + StringArrayType, }; use arrow::datatypes::{ArrowNativeType, DataType, Int32Type, Int64Type}; use datafusion_common::Result; diff --git a/datafusion/functions/src/unicode/lpad.rs b/datafusion/functions/src/unicode/lpad.rs index 0b41071cad9e..216037e90659 100644 --- a/datafusion/functions/src/unicode/lpad.rs +++ b/datafusion/functions/src/unicode/lpad.rs @@ -21,13 +21,12 @@ use std::sync::Arc; use arrow::array::{ Array, ArrayRef, AsArray, GenericStringArray, GenericStringBuilder, Int64Array, - OffsetSizeTrait, StringViewArray, + OffsetSizeTrait, StringArrayType, StringViewArray, }; use arrow::datatypes::DataType; use unicode_segmentation::UnicodeSegmentation; use DataType::{LargeUtf8, Utf8, Utf8View}; -use crate::strings::StringArrayType; use crate::utils::{make_scalar_function, utf8_to_str_type}; use datafusion_common::cast::as_int64_array; use datafusion_common::{exec_err, Result}; diff --git a/datafusion/functions/src/unicode/rpad.rs b/datafusion/functions/src/unicode/rpad.rs index 890230ac4344..72bb112e6f70 100644 --- a/datafusion/functions/src/unicode/rpad.rs +++ b/datafusion/functions/src/unicode/rpad.rs @@ -15,11 +15,10 @@ // specific language governing permissions and limitations // under the License. -use crate::strings::StringArrayType; use crate::utils::{make_scalar_function, utf8_to_str_type}; use arrow::array::{ ArrayRef, AsArray, GenericStringArray, GenericStringBuilder, Int64Array, - OffsetSizeTrait, StringViewArray, + OffsetSizeTrait, StringArrayType, StringViewArray, }; use arrow::datatypes::DataType; use datafusion_common::cast::as_int64_array; diff --git a/datafusion/functions/src/unicode/strpos.rs b/datafusion/functions/src/unicode/strpos.rs index b4bfc2d87627..19b82ccc23c2 100644 --- a/datafusion/functions/src/unicode/strpos.rs +++ b/datafusion/functions/src/unicode/strpos.rs @@ -18,9 +18,10 @@ use std::any::Any; use std::sync::Arc; -use crate::strings::StringArrayType; use crate::utils::{make_scalar_function, utf8_to_int_type}; -use arrow::array::{ArrayRef, ArrowPrimitiveType, AsArray, PrimitiveArray}; +use arrow::array::{ + ArrayRef, ArrowPrimitiveType, AsArray, PrimitiveArray, StringArrayType, +}; use arrow::datatypes::{ArrowNativeType, DataType, Int32Type, Int64Type}; use datafusion_common::{exec_err, Result}; use datafusion_expr::{ diff --git a/datafusion/functions/src/unicode/substr.rs b/datafusion/functions/src/unicode/substr.rs index df6a50ef1775..00737a2fe814 100644 --- a/datafusion/functions/src/unicode/substr.rs +++ b/datafusion/functions/src/unicode/substr.rs @@ -18,11 +18,11 @@ use std::any::Any; use std::sync::Arc; -use crate::strings::{make_and_append_view, StringArrayType}; +use crate::strings::make_and_append_view; use crate::utils::{make_scalar_function, utf8_to_str_type}; use arrow::array::{ Array, ArrayIter, ArrayRef, AsArray, GenericStringBuilder, Int64Array, - OffsetSizeTrait, StringViewArray, + OffsetSizeTrait, StringArrayType, StringViewArray, }; use arrow::datatypes::DataType; use arrow_buffer::{NullBufferBuilder, ScalarBuffer};