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/datafusion.git


The following commit(s) were added to refs/heads/main by this push:
     new afa5c8f7c0 Fix array_has_all and array_has_any with empty array 
(#15039)
afa5c8f7c0 is described below

commit afa5c8f7c05568dc03aa634c594de1681912b05b
Author: LuQQiu <[email protected]>
AuthorDate: Sun Mar 23 12:32:54 2025 -0700

    Fix array_has_all and array_has_any with empty array (#15039)
    
    * fixEmptyArrayHasAll
    
    * Fix the array
    
    * Change to more efficient BooleanBuffer
    
    * Separate test case
    
    * small fix
    
    * Update datafusion/functions-nested/src/array_has.rs
    
    Co-authored-by: Alex Huang <[email protected]>
    
    * Add the string failure test cases
    
    * fix
    
    ---------
    
    Co-authored-by: Alex Huang <[email protected]>
---
 datafusion/functions-nested/src/array_has.rs | 7 +++++++
 datafusion/sqllogictest/test_files/array.slt | 9 +++++++++
 2 files changed, 16 insertions(+)

diff --git a/datafusion/functions-nested/src/array_has.rs 
b/datafusion/functions-nested/src/array_has.rs
index 5a29cf9628..1857ead8c5 100644
--- a/datafusion/functions-nested/src/array_has.rs
+++ b/datafusion/functions-nested/src/array_has.rs
@@ -439,6 +439,13 @@ fn array_has_all_and_any_dispatch<O: OffsetSizeTrait>(
 ) -> Result<ArrayRef> {
     let haystack = as_generic_list_array::<O>(haystack)?;
     let needle = as_generic_list_array::<O>(needle)?;
+    if needle.values().len() == 0 {
+        let buffer = match comparison_type {
+            ComparisonType::All => BooleanBuffer::new_set(haystack.len()),
+            ComparisonType::Any => BooleanBuffer::new_unset(haystack.len()),
+        };
+        return Ok(Arc::new(BooleanArray::from(buffer)));
+    }
     match needle.data_type() {
         DataType::Utf8 | DataType::LargeUtf8 | DataType::Utf8View => {
             array_has_all_and_any_string_internal::<O>(haystack, needle, 
comparison_type)
diff --git a/datafusion/sqllogictest/test_files/array.slt 
b/datafusion/sqllogictest/test_files/array.slt
index 3b7f129606..509c7c182a 100644
--- a/datafusion/sqllogictest/test_files/array.slt
+++ b/datafusion/sqllogictest/test_files/array.slt
@@ -5905,6 +5905,15 @@ false false false false
 false false false false
 false false false false
 
+query BBBB
+select array_has_all(make_array(1,2,3), []),
+       array_has_any(make_array(1,2,3), []),
+       array_has_all(make_array('aa','bb','cc'), []),
+       array_has_any(make_array('aa','bb','cc'), [])
+;
+----
+true false true false
+
 query BBBBBBBBBBBBB
 select array_has_all(make_array(1,2,3), make_array(1,3)),
        array_has_all(make_array(1,2,3), make_array(1,4)),


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to