diff --git a/arrow-array/src/array/primitive_array.rs b/arrow-array/src/array/primitive_array.rs index 87de5f61605..d49db8a7b2f 100644 --- a/arrow-array/src/array/primitive_array.rs +++ b/arrow-array/src/array/primitive_array.rs @@ -1597,18 +1597,21 @@ impl PrimitiveArray { /// Constructs a `PrimitiveArray` from an array data reference. impl From for PrimitiveArray { fn from(data: ArrayData) -> Self { - Self::assert_compatible(data.data_type()); + let (data_type, len, nulls, offset, mut buffers, _child_data) = data.into_parts(); + + Self::assert_compatible(&data_type); assert_eq!( - data.buffers().len(), + buffers.len(), 1, "PrimitiveArray data should contain a single buffer only (values buffer)" ); + let buffer = buffers.pop().expect("checked above"); - let values = ScalarBuffer::new(data.buffers()[0].clone(), data.offset(), data.len()); + let values = ScalarBuffer::new(buffer, offset, len); Self { - data_type: data.data_type().clone(), + data_type, values, - nulls: data.nulls().cloned(), + nulls, } } }