@@ -45,7 +45,6 @@ use arrow::array::{BooleanBufferBuilder, UInt32Array, UInt64Array};
45
45
use arrow:: compute:: concat_batches;
46
46
use arrow:: datatypes:: { Schema , SchemaRef } ;
47
47
use arrow:: record_batch:: RecordBatch ;
48
- use arrow:: util:: bit_util;
49
48
use datafusion_common:: {
50
49
exec_datafusion_err, internal_err, JoinSide , Result , Statistics ,
51
50
} ;
@@ -440,17 +439,17 @@ async fn collect_left_input(
440
439
let ( batches, metrics, mut reservation) = stream
441
440
. try_fold (
442
441
( Vec :: new ( ) , join_metrics, reservation) ,
443
- |mut acc , batch| async {
442
+ |( mut batches , metrics , mut reservation ) , batch| async {
444
443
let batch_size = batch. get_array_memory_size ( ) ;
445
444
// Reserve memory for incoming batch
446
- acc . 2 . try_grow ( batch_size) ?;
445
+ reservation . try_grow ( batch_size) ?;
447
446
// Update metrics
448
- acc . 1 . build_mem_used . add ( batch_size) ;
449
- acc . 1 . build_input_batches . add ( 1 ) ;
450
- acc . 1 . build_input_rows . add ( batch. num_rows ( ) ) ;
447
+ metrics . build_mem_used . add ( batch_size) ;
448
+ metrics . build_input_batches . add ( 1 ) ;
449
+ metrics . build_input_rows . add ( batch. num_rows ( ) ) ;
451
450
// Push batch to output
452
- acc . 0 . push ( batch) ;
453
- Ok ( acc )
451
+ batches . push ( batch) ;
452
+ Ok ( ( batches , metrics , reservation ) )
454
453
} ,
455
454
)
456
455
. await ?;
@@ -459,14 +458,13 @@ async fn collect_left_input(
459
458
460
459
// Reserve memory for visited_left_side bitmap if required by join type
461
460
let visited_left_side = if with_visited_left_side {
462
- // TODO: Replace `ceil` wrapper with stable `div_cell` after
463
- // https://github.com/rust-lang/rust/issues/88581
464
- let buffer_size = bit_util:: ceil ( merged_batch. num_rows ( ) , 8 ) ;
461
+ let n_rows = merged_batch. num_rows ( ) ;
462
+ let buffer_size = n_rows. div_ceil ( 8 ) ;
465
463
reservation. try_grow ( buffer_size) ?;
466
464
metrics. build_mem_used . add ( buffer_size) ;
467
465
468
- let mut buffer = BooleanBufferBuilder :: new ( merged_batch . num_rows ( ) ) ;
469
- buffer. append_n ( merged_batch . num_rows ( ) , false ) ;
466
+ let mut buffer = BooleanBufferBuilder :: new ( n_rows ) ;
467
+ buffer. append_n ( n_rows , false ) ;
470
468
buffer
471
469
} else {
472
470
BooleanBufferBuilder :: new ( 0 )
0 commit comments