@@ -197,6 +197,8 @@ pub(super) struct JoinLeftData {
197197 values : Vec < ArrayRef > ,
198198 /// Shared bitmap builder for visited left indices
199199 visited_indices_bitmap : SharedBitmapBuilder ,
200+ /// Shared bitmap builder for null marks
201+ null_indices_bitmap : SharedBitmapBuilder ,
200202 /// Counter of running probe-threads, potentially
201203 /// able to update `visited_indices_bitmap`
202204 probe_threads_counter : AtomicUsize ,
@@ -2024,16 +2026,18 @@ async fn collect_left_input(
20242026 } ;
20252027
20262028 // Reserve additional memory for visited indices bitmap and create shared builder
2027- let visited_indices_bitmap = if with_visited_indices_bitmap {
2029+ let ( visited_indices_bitmap, null_indices_bitmap ) = if with_visited_indices_bitmap {
20282030 let bitmap_size = bit_util:: ceil ( batch. num_rows ( ) , 8 ) ;
2029- reservation. try_grow ( bitmap_size) ?;
2030- metrics. build_mem_used . add ( bitmap_size) ;
2031-
2032- let mut bitmap_buffer = BooleanBufferBuilder :: new ( batch. num_rows ( ) ) ;
2033- bitmap_buffer. append_n ( num_rows, false ) ;
2034- bitmap_buffer
2031+ reservation. try_grow ( bitmap_size * 2 ) ?;
2032+ metrics. build_mem_used . add ( bitmap_size * 2 ) ;
2033+
2034+ let mut visited = BooleanBufferBuilder :: new ( batch. num_rows ( ) ) ;
2035+ let mut nulls = BooleanBufferBuilder :: new ( batch. num_rows ( ) ) ;
2036+ visited. append_n ( num_rows, false ) ;
2037+ nulls. append_n ( num_rows, false ) ;
2038+ ( visited, nulls)
20352039 } else {
2036- BooleanBufferBuilder :: new ( 0 )
2040+ ( BooleanBufferBuilder :: new ( 0 ) , BooleanBufferBuilder :: new ( 0 ) )
20372041 } ;
20382042
20392043 let map = Arc :: new ( join_hash_map) ;
@@ -2073,6 +2077,7 @@ async fn collect_left_input(
20732077 batch,
20742078 values : left_values,
20752079 visited_indices_bitmap : Mutex :: new ( visited_indices_bitmap) ,
2080+ null_indices_bitmap : Mutex :: new ( null_indices_bitmap) ,
20762081 probe_threads_counter : AtomicUsize :: new ( probe_threads_count) ,
20772082 _reservation : reservation,
20782083 bounds,
0 commit comments