From 30a955a0825d49e487de6feaa7605648c93b49a0 Mon Sep 17 00:00:00 2001 From: yashrb24 Date: Sun, 6 Sep 2026 20:46:39 +0530 Subject: [PATCH] fix: preserve nulls in array_has_any/all empty-needle path --- datafusion/functions-nested/src/array_has.rs | 3 ++- .../sqllogictest/test_files/array/array_has.slt | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/datafusion/functions-nested/src/array_has.rs b/datafusion/functions-nested/src/array_has.rs index 95023aedd6fa1..ee2b728bf7b4f 100644 --- a/datafusion/functions-nested/src/array_has.rs +++ b/datafusion/functions-nested/src/array_has.rs @@ -756,7 +756,8 @@ fn array_has_all_and_any_dispatch<'a>( ComparisonType::All => BooleanBuffer::new_set(haystack.len()), ComparisonType::Any => BooleanBuffer::new_unset(haystack.len()), }; - Ok(Arc::new(BooleanArray::from(buffer))) + let nulls = NullBuffer::union(haystack.nulls(), needle.nulls()); + Ok(Arc::new(BooleanArray::new(buffer, nulls))) } else { match needle.value_type() { DataType::Utf8 | DataType::LargeUtf8 | DataType::Utf8View => { diff --git a/datafusion/sqllogictest/test_files/array/array_has.slt b/datafusion/sqllogictest/test_files/array/array_has.slt index 14bc331d8f2d9..5bf6e5aaf1df8 100644 --- a/datafusion/sqllogictest/test_files/array/array_has.slt +++ b/datafusion/sqllogictest/test_files/array/array_has.slt @@ -51,6 +51,23 @@ query error array_has does not support type 'Null' select array_has_all([], null), array_has_all([1, 2, 3], null); +# Preserve NULL rows when all needles are NULL or empty +query BB +WITH t(id, haystack, needle) AS ( + VALUES + (1, [1, 2], arrow_cast(NULL, 'List(Int64)')), + (2, arrow_cast(NULL, 'List(Int64)'), arrow_cast([], 'List(Int64)')), + (3, [3, 4], arrow_cast([], 'List(Int64)')) +) +SELECT array_has_any(haystack, needle), + array_has_all(haystack, needle) +FROM t +ORDER BY id; +---- +NULL NULL +NULL NULL +false true + query BBBBBBBBBBBB select array_has(make_array(1,2), 1), array_has(make_array(1,2,NULL), 1),