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]