Skip to content

Commit 6155c94

Browse files
committed
Replace ArrayDataBuilder with GenericListArray in ListArrayDecoder
1 parent a20753c commit 6155c94

File tree

1 file changed

+11
-12
lines changed

1 file changed

+11
-12
lines changed

arrow-json/src/reader/list_array.rs

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@
1717

1818
use crate::reader::tape::{Tape, TapeElement};
1919
use crate::reader::{ArrayDecoder, DecoderContext};
20-
use arrow_array::OffsetSizeTrait;
2120
use arrow_array::builder::{BooleanBufferBuilder, BufferBuilder};
22-
use arrow_buffer::buffer::NullBuffer;
23-
use arrow_data::{ArrayData, ArrayDataBuilder};
21+
use arrow_array::{Array, GenericListArray, OffsetSizeTrait, make_array};
22+
use arrow_buffer::{OffsetBuffer, ScalarBuffer, buffer::NullBuffer};
23+
use arrow_data::ArrayData;
2424
use arrow_schema::{ArrowError, DataType};
2525
use std::marker::PhantomData;
2626

@@ -93,15 +93,14 @@ impl<O: OffsetSizeTrait> ArrayDecoder for ListArrayDecoder<O> {
9393

9494
let child_data = self.decoder.decode(tape, &child_pos)?;
9595
let nulls = nulls.as_mut().map(|x| NullBuffer::new(x.finish()));
96+
let values = make_array(child_data);
97+
let field = match &self.data_type {
98+
DataType::List(f) | DataType::LargeList(f) => f.clone(),
99+
_ => unreachable!(),
100+
};
101+
let offsets = OffsetBuffer::<O>::new(ScalarBuffer::from(offsets.finish()));
96102

97-
let data = ArrayDataBuilder::new(self.data_type.clone())
98-
.len(pos.len())
99-
.nulls(nulls)
100-
.add_buffer(offsets.finish())
101-
.child_data(vec![child_data]);
102-
103-
// Safety
104-
// Validated lengths above
105-
Ok(unsafe { data.build_unchecked() })
103+
let array = GenericListArray::<O>::try_new(field, offsets, values, nulls)?;
104+
Ok(array.into_data())
106105
}
107106
}

0 commit comments

Comments
 (0)