Skip to content

Commit afa5c8f

Browse files
LuQQiuWeijun-H
andauthored
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]>
1 parent d460abb commit afa5c8f

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

datafusion/functions-nested/src/array_has.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,13 @@ fn array_has_all_and_any_dispatch<O: OffsetSizeTrait>(
439439
) -> Result<ArrayRef> {
440440
let haystack = as_generic_list_array::<O>(haystack)?;
441441
let needle = as_generic_list_array::<O>(needle)?;
442+
if needle.values().len() == 0 {
443+
let buffer = match comparison_type {
444+
ComparisonType::All => BooleanBuffer::new_set(haystack.len()),
445+
ComparisonType::Any => BooleanBuffer::new_unset(haystack.len()),
446+
};
447+
return Ok(Arc::new(BooleanArray::from(buffer)));
448+
}
442449
match needle.data_type() {
443450
DataType::Utf8 | DataType::LargeUtf8 | DataType::Utf8View => {
444451
array_has_all_and_any_string_internal::<O>(haystack, needle, comparison_type)

datafusion/sqllogictest/test_files/array.slt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5905,6 +5905,15 @@ false false false false
59055905
false false false false
59065906
false false false false
59075907

5908+
query BBBB
5909+
select array_has_all(make_array(1,2,3), []),
5910+
array_has_any(make_array(1,2,3), []),
5911+
array_has_all(make_array('aa','bb','cc'), []),
5912+
array_has_any(make_array('aa','bb','cc'), [])
5913+
;
5914+
----
5915+
true false true false
5916+
59085917
query BBBBBBBBBBBBB
59095918
select array_has_all(make_array(1,2,3), make_array(1,3)),
59105919
array_has_all(make_array(1,2,3), make_array(1,4)),

0 commit comments

Comments
 (0)