Rich-T-kid commented on code in PR #27025:
URL: https://github.com/apache/datafusion/pull/27025#discussion_r4455719783


##########
datafusion/common/src/hash_utils.rs:
##########
@@ -158,8 +181,14 @@ where
         let mut buffer = cell.try_borrow_mut()
             .map_err(|_| _internal_datafusion_err!("with_hashes cannot be 
called reentrantly on the same thread"))?;
 
-        // Ensure buffer has sufficient length, clearing old values
-        buffer.clear();
+        // A dictionary with non-null keys and values overwrites every output
+        // slot, so retain the initialized storage instead of zeroing it first.
+        let reuse_buffer = iter

Review Comment:
   Fixed in 0a7c4da0c. The fast path now debug-asserts that the chunk/tail span 
covers the full output slice, which checks the overwrite invariant used by 
buffer reuse.



##########
datafusion/common/src/hash_utils.rs:
##########
@@ -544,6 +573,58 @@ fn hash_generic_byte_view_array<T: ByteViewType>(
     }
 }
 
+/// Scatters non-null dictionary hashes in independent lanes to overlap 
key-indexed loads.
+#[cfg(not(feature = "force_hash_collisions"))]
+#[inline(always)]
+fn scatter_non_null_dictionary<K: ArrowDictionaryKeyType, const MULTI_COL: 
bool>(
+    array: &DictionaryArray<K>,
+    dict_hashes: &[u64],
+    hashes: &mut [u64],
+) {
+    const LANES: usize = 8;
+    assert_eq!(dict_hashes.len(), array.values().len());
+    assert_eq!(array.keys().null_count(), 0);
+    let keys = array.keys().values();
+    let len = keys.len().min(hashes.len());
+    let keys = &keys[..len];
+    let hashes = &mut hashes[..len];

Review Comment:
   Fixed in 0a7c4da0c. These are now debug assertions, so the invariants remain 
checked in debug builds without repeating the checks in the release hot path.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


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

Reply via email to