diff --git a/src/common/hashtable/src/hashjoin_hashtable.rs b/src/common/hashtable/src/hashjoin_hashtable.rs index 69c942d89968b..f3d1d1ab0ea1d 100644 --- a/src/common/hashtable/src/hashjoin_hashtable.rs +++ b/src/common/hashtable/src/hashjoin_hashtable.rs @@ -137,7 +137,10 @@ impl Default::default(), + false => AtomicUsize::new(row_num), + }, }; hashtable.atomic_pointers = unsafe { std::mem::transmute::<*mut u64, *mut AtomicU64>(hashtable.pointers.as_mut_ptr()) @@ -172,7 +175,11 @@ impl old_header = x, }; } - self.count.fetch_add(1, Ordering::Relaxed); + + if SKIP_DUPLICATES { + self.count.fetch_add(1, Ordering::Relaxed); + } + unsafe { (*entry_ptr).next = remove_header_tag(old_header) }; } } diff --git a/src/common/hashtable/src/hashjoin_string_hashtable.rs b/src/common/hashtable/src/hashjoin_string_hashtable.rs index d13ea2debef72..b9fd9c0c266d2 100644 --- a/src/common/hashtable/src/hashjoin_string_hashtable.rs +++ b/src/common/hashtable/src/hashjoin_string_hashtable.rs @@ -70,7 +70,10 @@ impl }, atomic_pointers: std::ptr::null_mut(), hash_shift: (hash_bits() - capacity.trailing_zeros()) as usize, - count: Default::default(), + count: match SKIP_DUPLICATES { + true => Default::default(), + false => AtomicUsize::new(row_num), + }, }; hashtable.atomic_pointers = unsafe { std::mem::transmute::<*mut u64, *mut AtomicU64>(hashtable.pointers.as_mut_ptr()) @@ -105,7 +108,11 @@ impl Err(x) => old_header = x, }; } - self.count.fetch_add(1, Ordering::Relaxed); + + if SKIP_DUPLICATES { + self.count.fetch_add(1, Ordering::Relaxed); + } + unsafe { (*entry_ptr).next = remove_header_tag(old_header) }; } }