diff --git a/datafusion/functions/src/string/common.rs b/datafusion/functions/src/string/common.rs index 64ce523c249a..805e5a7f30b9 100644 --- a/datafusion/functions/src/string/common.rs +++ b/datafusion/functions/src/string/common.rs @@ -482,8 +482,11 @@ where })) } +#[cfg(doc)] +use arrow::array::LargeStringArray; /// Perform SQL `array ~ regex_array` operation on /// [`StringArray`] / [`LargeStringArray`] / [`StringViewArray`]. +/// /// If `regex_array` element has an empty value, the corresponding result value is always true. /// /// `flags_array` are optional [`StringArray`] / [`LargeStringArray`] / [`StringViewArray`] flag, @@ -494,15 +497,15 @@ where /// It is inspired / copied from `regexp_is_match_utf8` [arrow-rs]. /// /// [arrow-rs]: https://github.com/apache/arrow-rs/blob/8c956a9f9ab26c14072740cce64c2b99cb039b13/arrow-string/src/regexp.rs#L31-L37 -pub fn regexp_is_match<'a, ArrayType1, ArrayType2, ArrayType3>( - array: &'a ArrayType1, - regex_array: &'a ArrayType2, - flags_array: Option<&'a ArrayType3>, -) -> datafusion_common::Result +pub fn regexp_is_match<'a, S1, S2, S3>( + array: &'a S1, + regex_array: &'a S2, + flags_array: Option<&'a S3>, +) -> Result where - &'a ArrayType1: StringArrayType<'a>, - &'a ArrayType2: StringArrayType<'a>, - &'a ArrayType3: StringArrayType<'a>, + &'a S1: StringArrayType<'a>, + &'a S2: StringArrayType<'a>, + &'a S3: StringArrayType<'a>, { if array.len() != regex_array.len() { return Err(DataFusionError::Execution( @@ -559,7 +562,7 @@ where } Ok(()) }) - .collect::, DataFusionError>>()?; + .collect::, DataFusionError>>()?; let data = unsafe { ArrayDataBuilder::new(DataType::Boolean) diff --git a/datafusion/functions/src/string/contains.rs b/datafusion/functions/src/string/contains.rs index 47df963d2147..8b80317696e9 100644 --- a/datafusion/functions/src/string/contains.rs +++ b/datafusion/functions/src/string/contains.rs @@ -92,11 +92,11 @@ pub fn contains(args: &[ArrayRef]) -> Result { (Utf8View, Utf8View) => { let mod_str = args[0].as_string_view(); let match_str = args[1].as_string_view(); - let res = - regexp_is_match::( - mod_str, match_str, None, - ) - .map_err(|error| error)?; + let res = regexp_is_match::< + StringViewArray, + StringViewArray, + GenericStringArray, + >(mod_str, match_str, None)?; Ok(Arc::new(res) as ArrayRef) } @@ -106,9 +106,8 @@ pub fn contains(args: &[ArrayRef]) -> Result { let res = regexp_is_match::< StringViewArray, GenericStringArray, - StringViewArray, - >(mod_str, match_str, None) - .map_err(|error| error)?; + GenericStringArray, + >(mod_str, match_str, None)?; Ok(Arc::new(res) as ArrayRef) } @@ -118,9 +117,8 @@ pub fn contains(args: &[ArrayRef]) -> Result { let res = regexp_is_match::< StringViewArray, GenericStringArray, - StringViewArray, - >(mod_str, match_str, None) - .map_err(|error| error)?; + GenericStringArray, + >(mod_str, match_str, None)?; Ok(Arc::new(res) as ArrayRef) } @@ -130,9 +128,8 @@ pub fn contains(args: &[ArrayRef]) -> Result { let res = regexp_is_match::< GenericStringArray, StringViewArray, - StringViewArray, - >(mod_str, match_str, None) - .map_err(|error| error)?; + GenericStringArray, + >(mod_str, match_str, None)?; Ok(Arc::new(res) as ArrayRef) } @@ -142,9 +139,8 @@ pub fn contains(args: &[ArrayRef]) -> Result { let res = regexp_is_match::< GenericStringArray, GenericStringArray, - StringViewArray, - >(mod_str, match_str, None) - .map_err(|error| error)?; + GenericStringArray, + >(mod_str, match_str, None)?; Ok(Arc::new(res) as ArrayRef) } @@ -154,9 +150,8 @@ pub fn contains(args: &[ArrayRef]) -> Result { let res = regexp_is_match::< GenericStringArray, GenericStringArray, - StringViewArray, - >(mod_str, match_str, None) - .map_err(|error| error)?; + GenericStringArray, + >(mod_str, match_str, None)?; Ok(Arc::new(res) as ArrayRef) } @@ -166,9 +161,8 @@ pub fn contains(args: &[ArrayRef]) -> Result { let res = regexp_is_match::< GenericStringArray, StringViewArray, - StringViewArray, - >(mod_str, match_str, None) - .map_err(|error| error)?; + GenericStringArray, + >(mod_str, match_str, None)?; Ok(Arc::new(res) as ArrayRef) } @@ -178,9 +172,8 @@ pub fn contains(args: &[ArrayRef]) -> Result { let res = regexp_is_match::< GenericStringArray, GenericStringArray, - StringViewArray, - >(mod_str, match_str, None) - .map_err(|error| error)?; + GenericStringArray, + >(mod_str, match_str, None)?; Ok(Arc::new(res) as ArrayRef) } @@ -190,9 +183,8 @@ pub fn contains(args: &[ArrayRef]) -> Result { let res = regexp_is_match::< GenericStringArray, GenericStringArray, - StringViewArray, - >(mod_str, match_str, None) - .map_err(|error| error)?; + GenericStringArray, + >(mod_str, match_str, None)?; Ok(Arc::new(res) as ArrayRef) }