From 772a1a791739c1252afa73ff2370962e52fb8be6 Mon Sep 17 00:00:00 2001 From: Andrew Lamb Date: Tue, 13 Jan 2026 09:55:03 -0500 Subject: [PATCH 1/2] Minor: try and avoid an allocation --- arrow-array/src/array/byte_view_array.rs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/arrow-array/src/array/byte_view_array.rs b/arrow-array/src/array/byte_view_array.rs index ca8ddfbe2ad5..518446576ae4 100644 --- a/arrow-array/src/array/byte_view_array.rs +++ b/arrow-array/src/array/byte_view_array.rs @@ -988,9 +988,13 @@ impl<'a, T: ByteViewType + ?Sized> IntoIterator for &'a GenericByteViewArray impl From for GenericByteViewArray { fn from(data: ArrayData) -> Self { - let (_data_type, len, nulls, offset, mut buffers, _child_data) = data.into_parts(); - let views = buffers.remove(0); // need to maintain order of remaining buffers - let buffers = Arc::from(buffers); + let (_data_type, len, nulls, offset, buffers, _child_data) = data.into_parts(); + + // first buffer is views + let views = buffers[0].clone(); + // remaining buffers are data buffers + let buffers = Arc::from_iter(buffers.into_iter().skip(1)); + let views = ScalarBuffer::new(views, offset, len); Self { data_type: T::DATA_TYPE, From 707bf419c0bcd52b1c1dc3f4354665cde73e7b5d Mon Sep 17 00:00:00 2001 From: Andrew Lamb Date: Tue, 13 Jan 2026 12:45:58 -0500 Subject: [PATCH 2/2] Less verbose --- arrow-array/src/array/byte_view_array.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/arrow-array/src/array/byte_view_array.rs b/arrow-array/src/array/byte_view_array.rs index 518446576ae4..ab6f0cd2d6ac 100644 --- a/arrow-array/src/array/byte_view_array.rs +++ b/arrow-array/src/array/byte_view_array.rs @@ -990,16 +990,14 @@ impl From for GenericByteViewArray { fn from(data: ArrayData) -> Self { let (_data_type, len, nulls, offset, buffers, _child_data) = data.into_parts(); - // first buffer is views - let views = buffers[0].clone(); - // remaining buffers are data buffers - let buffers = Arc::from_iter(buffers.into_iter().skip(1)); + let mut buffers = buffers.into_iter(); + // first buffer is views, remaining are data buffers + let views = ScalarBuffer::new(buffers.next().unwrap(), offset, len); - let views = ScalarBuffer::new(views, offset, len); Self { data_type: T::DATA_TYPE, views, - buffers, + buffers: Arc::from_iter(buffers), nulls, phantom: Default::default(), }