From c3c0bc160de71113f7d8fd7fa58c2265f9cde860 Mon Sep 17 00:00:00 2001 From: David Hewitt Date: Fri, 14 Nov 2025 19:40:29 +0000 Subject: [PATCH] fix x86_64 performance regression --- datafusion/physical-expr/src/expressions/in_list.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/datafusion/physical-expr/src/expressions/in_list.rs b/datafusion/physical-expr/src/expressions/in_list.rs index 5848033090d3..f742b5bf282b 100644 --- a/datafusion/physical-expr/src/expressions/in_list.rs +++ b/datafusion/physical-expr/src/expressions/in_list.rs @@ -98,14 +98,16 @@ impl ArrayHashSet { _ => {} } - let has_nulls = in_array.null_count() != 0; + let needle_nulls = v.logical_nulls(); + let needle_nulls = needle_nulls.as_ref(); + let haystack_has_nulls = in_array.null_count() != 0; with_hashes([v], &self.state, |hashes| { let cmp = make_comparator(v, in_array, SortOptions::default())?; Ok((0..v.len()) .map(|i| { // SQL three-valued logic: null IN (...) is always null - if v.is_null(i) { + if needle_nulls.is_some_and(|nulls| nulls.is_null(i)) { return None; } @@ -118,7 +120,7 @@ impl ArrayHashSet { match contains { true => Some(!negated), - false if has_nulls => None, + false if haystack_has_nulls => None, false => Some(negated), } })