Skip to content

Commit a2e5574

Browse files
committed
migrate listviewarray
1 parent b253969 commit a2e5574

File tree

2 files changed

+17
-12
lines changed

2 files changed

+17
-12
lines changed

arrow-array/src/array/byte_view_array.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -942,7 +942,7 @@ impl<'a, T: ByteViewType + ?Sized> IntoIterator for &'a GenericByteViewArray<T>
942942

943943
impl<T: ByteViewType + ?Sized> From<ArrayData> for GenericByteViewArray<T> {
944944
fn from(data: ArrayData) -> Self {
945-
let (data_type, len, nulls, offset, mut buffers, _child_data) = data.into_parts();
945+
let (_data_type, len, nulls, offset, mut buffers, _child_data) = data.into_parts();
946946
let views = buffers.remove(0); // need to maintain order of remaining buffers
947947
let views = ScalarBuffer::new(views, offset, len);
948948
Self {

arrow-array/src/array/list_view_array.rs

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -574,23 +574,25 @@ impl<OffsetSize: OffsetSizeTrait> From<FixedSizeListArray> for GenericListViewAr
574574

575575
impl<OffsetSize: OffsetSizeTrait> GenericListViewArray<OffsetSize> {
576576
fn try_new_from_array_data(data: ArrayData) -> Result<Self, ArrowError> {
577-
if data.buffers().len() != 2 {
577+
let (data_type, len, nulls, offset, mut buffers, mut child_data) = data.into_parts();
578+
579+
if buffers.len() != 2 {
578580
return Err(ArrowError::InvalidArgumentError(format!(
579581
"ListViewArray data should contain two buffers (value offsets & value sizes), had {}",
580-
data.buffers().len()
582+
buffers.len()
581583
)));
582584
}
583585

584-
if data.child_data().len() != 1 {
586+
if child_data.len() != 1 {
585587
return Err(ArrowError::InvalidArgumentError(format!(
586588
"ListViewArray should contain a single child array (values array), had {}",
587-
data.child_data().len()
589+
child_data.len()
588590
)));
589591
}
590592

591-
let values = data.child_data()[0].clone();
593+
let values = child_data.pop().expect("checked above");
592594

593-
if let Some(child_data_type) = Self::get_type(data.data_type()) {
595+
if let Some(child_data_type) = Self::get_type(&data_type) {
594596
if values.data_type() != child_data_type {
595597
return Err(ArrowError::InvalidArgumentError(format!(
596598
"{}ListViewArray's child datatype {:?} does not \
@@ -605,18 +607,21 @@ impl<OffsetSize: OffsetSizeTrait> GenericListViewArray<OffsetSize> {
605607
"{}ListViewArray's datatype must be {}ListViewArray(). It is {:?}",
606608
OffsetSize::PREFIX,
607609
OffsetSize::PREFIX,
608-
data.data_type()
610+
data_type
609611
)));
610612
}
611613

612614
let values = make_array(values);
613615
// ArrayData is valid, and verified type above
614-
let value_offsets = ScalarBuffer::new(data.buffers()[0].clone(), data.offset(), data.len());
615-
let value_sizes = ScalarBuffer::new(data.buffers()[1].clone(), data.offset(), data.len());
616+
// buffer[0] is offsets, buffer[1] is sizes
617+
let sizes_buffer = buffers.pop().expect("checked above");
618+
let offsets_buffer = buffers.pop().expect("checked above");
619+
let value_offsets = ScalarBuffer::new(offsets_buffer, offset, len);
620+
let value_sizes = ScalarBuffer::new(sizes_buffer, offset, len);
616621

617622
Ok(Self {
618-
data_type: data.data_type().clone(),
619-
nulls: data.nulls().cloned(),
623+
data_type,
624+
nulls,
620625
values,
621626
value_offsets,
622627
value_sizes,

0 commit comments

Comments
 (0)