Skip to content

Commit 98e8942

Browse files
Chen-Yuan-LaiCheng-Yuan-Lai
andauthored
refactor: switch BooleanBufferBuilder to NullBufferBuilder in functions-nested functions (#14201)
Co-authored-by: Cheng-Yuan-Lai <a186235@g,ail.com>
1 parent 12c4c86 commit 98e8942

File tree

4 files changed

+21
-23
lines changed

4 files changed

+21
-23
lines changed

datafusion/functions-nested/src/concat.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ use std::{any::Any, cmp::Ordering};
2222

2323
use arrow::array::{Capacities, MutableArrayData};
2424
use arrow_array::{Array, ArrayRef, GenericListArray, OffsetSizeTrait};
25-
use arrow_buffer::{BooleanBufferBuilder, NullBuffer, OffsetBuffer};
25+
use arrow_buffer::{NullBufferBuilder, OffsetBuffer};
2626
use arrow_schema::{DataType, Field};
2727
use datafusion_common::Result;
2828
use datafusion_common::{
@@ -354,7 +354,7 @@ fn concat_internal<O: OffsetSizeTrait>(args: &[ArrayRef]) -> Result<ArrayRef> {
354354

355355
let mut array_lengths = vec![];
356356
let mut arrays = vec![];
357-
let mut valid = BooleanBufferBuilder::new(row_count);
357+
let mut valid = NullBufferBuilder::new(row_count);
358358
for i in 0..row_count {
359359
let nulls = list_arrays
360360
.iter()
@@ -365,7 +365,7 @@ fn concat_internal<O: OffsetSizeTrait>(args: &[ArrayRef]) -> Result<ArrayRef> {
365365
let is_null = nulls.iter().all(|&x| x);
366366
if is_null {
367367
array_lengths.push(0);
368-
valid.append(false);
368+
valid.append_null();
369369
} else {
370370
// Get all the arrays on i-th row
371371
let values = list_arrays
@@ -382,12 +382,11 @@ fn concat_internal<O: OffsetSizeTrait>(args: &[ArrayRef]) -> Result<ArrayRef> {
382382
let concatenated_array = arrow::compute::concat(elements.as_slice())?;
383383
array_lengths.push(concatenated_array.len());
384384
arrays.push(concatenated_array);
385-
valid.append(true);
385+
valid.append_non_null();
386386
}
387387
}
388388
// Assume all arrays have the same data type
389389
let data_type = list_arrays[0].value_type();
390-
let buffer = valid.finish();
391390

392391
let elements = arrays
393392
.iter()
@@ -398,7 +397,7 @@ fn concat_internal<O: OffsetSizeTrait>(args: &[ArrayRef]) -> Result<ArrayRef> {
398397
Arc::new(Field::new_list_field(data_type, true)),
399398
OffsetBuffer::from_lengths(array_lengths),
400399
Arc::new(arrow::compute::concat(elements.as_slice())?),
401-
Some(NullBuffer::new(buffer)),
400+
valid.finish(),
402401
);
403402

404403
Ok(Arc::new(list_arr))

datafusion/functions-nested/src/range.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ use arrow_array::types::{
2727
Date32Type, IntervalMonthDayNanoType, TimestampNanosecondType as TSNT,
2828
};
2929
use arrow_array::{NullArray, TimestampNanosecondArray};
30-
use arrow_buffer::{BooleanBufferBuilder, NullBuffer, OffsetBuffer};
30+
use arrow_buffer::{NullBufferBuilder, OffsetBuffer};
3131
use arrow_schema::DataType::*;
3232
use arrow_schema::IntervalUnit::MonthDayNano;
3333
use arrow_schema::TimeUnit::Nanosecond;
@@ -345,7 +345,7 @@ pub(super) fn gen_range_inner(
345345

346346
let mut values = vec![];
347347
let mut offsets = vec![0];
348-
let mut valid = BooleanBufferBuilder::new(stop_array.len());
348+
let mut valid = NullBufferBuilder::new(stop_array.len());
349349
for (idx, stop) in stop_array.iter().enumerate() {
350350
match retrieve_range_args(start_array, stop, step_array, idx) {
351351
Some((_, _, 0)) => {
@@ -369,20 +369,20 @@ pub(super) fn gen_range_inner(
369369
.step_by(step_abs),
370370
);
371371
offsets.push(values.len() as i32);
372-
valid.append(true);
372+
valid.append_non_null();
373373
}
374374
// If any of the arguments is NULL, append a NULL value to the result.
375375
None => {
376376
offsets.push(values.len() as i32);
377-
valid.append(false);
377+
valid.append_null();
378378
}
379379
};
380380
}
381381
let arr = Arc::new(ListArray::try_new(
382382
Arc::new(Field::new_list_field(Int64, true)),
383383
OffsetBuffer::new(offsets.into()),
384384
Arc::new(Int64Array::from(values)),
385-
Some(NullBuffer::new(valid.finish())),
385+
valid.finish(),
386386
)?);
387387
Ok(arr)
388388
}

datafusion/functions-nested/src/replace.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use arrow::array::{
2323
use arrow::datatypes::DataType;
2424

2525
use arrow_array::GenericListArray;
26-
use arrow_buffer::{BooleanBufferBuilder, NullBuffer, OffsetBuffer};
26+
use arrow_buffer::{NullBufferBuilder, OffsetBuffer};
2727
use arrow_schema::Field;
2828
use datafusion_common::cast::as_int64_array;
2929
use datafusion_common::{exec_err, Result};
@@ -306,12 +306,12 @@ fn general_replace<O: OffsetSizeTrait>(
306306
capacity,
307307
);
308308

309-
let mut valid = BooleanBufferBuilder::new(list_array.len());
309+
let mut valid = NullBufferBuilder::new(list_array.len());
310310

311311
for (row_index, offset_window) in list_array.offsets().windows(2).enumerate() {
312312
if list_array.is_null(row_index) {
313313
offsets.push(offsets[row_index]);
314-
valid.append(false);
314+
valid.append_null();
315315
continue;
316316
}
317317

@@ -338,7 +338,7 @@ fn general_replace<O: OffsetSizeTrait>(
338338
end.to_usize().unwrap(),
339339
);
340340
offsets.push(offsets[row_index] + (end - start));
341-
valid.append(true);
341+
valid.append_non_null();
342342
continue;
343343
}
344344

@@ -367,7 +367,7 @@ fn general_replace<O: OffsetSizeTrait>(
367367
}
368368

369369
offsets.push(offsets[row_index] + (end - start));
370-
valid.append(true);
370+
valid.append_non_null();
371371
}
372372

373373
let data = mutable.freeze();
@@ -376,7 +376,7 @@ fn general_replace<O: OffsetSizeTrait>(
376376
Arc::new(Field::new_list_field(list_array.value_type(), true)),
377377
OffsetBuffer::<O>::new(offsets.into()),
378378
arrow_array::make_array(data),
379-
Some(NullBuffer::new(valid.finish())),
379+
valid.finish(),
380380
)?))
381381
}
382382

datafusion/functions-nested/src/resize.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ use arrow::array::{Capacities, MutableArrayData};
2222
use arrow_array::{
2323
new_null_array, Array, ArrayRef, GenericListArray, Int64Array, OffsetSizeTrait,
2424
};
25-
use arrow_buffer::{ArrowNativeType, BooleanBufferBuilder, NullBuffer, OffsetBuffer};
25+
use arrow_buffer::{ArrowNativeType, NullBufferBuilder, OffsetBuffer};
2626
use arrow_schema::DataType::{FixedSizeList, LargeList, List};
2727
use arrow_schema::{DataType, FieldRef};
2828
use datafusion_common::cast::{as_int64_array, as_large_list_array, as_list_array};
@@ -198,15 +198,15 @@ fn general_list_resize<O: OffsetSizeTrait + TryInto<i64>>(
198198
capacity,
199199
);
200200

201-
let mut null_builder = BooleanBufferBuilder::new(array.len());
201+
let mut null_builder = NullBufferBuilder::new(array.len());
202202

203203
for (row_index, offset_window) in array.offsets().windows(2).enumerate() {
204204
if array.is_null(row_index) {
205-
null_builder.append(false);
205+
null_builder.append_null();
206206
offsets.push(offsets[row_index]);
207207
continue;
208208
}
209-
null_builder.append(true);
209+
null_builder.append_non_null();
210210

211211
let count = count_array.value(row_index).to_usize().ok_or_else(|| {
212212
internal_datafusion_err!("array_resize: failed to convert size to usize")
@@ -234,12 +234,11 @@ fn general_list_resize<O: OffsetSizeTrait + TryInto<i64>>(
234234
}
235235

236236
let data = mutable.freeze();
237-
let null_bit_buffer: NullBuffer = null_builder.finish().into();
238237

239238
Ok(Arc::new(GenericListArray::<O>::try_new(
240239
Arc::clone(field),
241240
OffsetBuffer::<O>::new(offsets.into()),
242241
arrow_array::make_array(data),
243-
Some(null_bit_buffer),
242+
null_builder.finish(),
244243
)?))
245244
}

0 commit comments

Comments
 (0)