From c925a6c66dad64271f615c4dd10b9cc5ff7c8cad Mon Sep 17 00:00:00 2001 From: Andrew Lamb Date: Thu, 15 Jan 2026 07:45:44 -0500 Subject: [PATCH] Avoid a clone when creating `FixedSizeBinaryArray` from ArrayData --- .../src/array/fixed_size_binary_array.rs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/arrow-array/src/array/fixed_size_binary_array.rs b/arrow-array/src/array/fixed_size_binary_array.rs index b94e168cfe7c..f736d1f1eb15 100644 --- a/arrow-array/src/array/fixed_size_binary_array.rs +++ b/arrow-array/src/array/fixed_size_binary_array.rs @@ -497,24 +497,25 @@ impl FixedSizeBinaryArray { impl From for FixedSizeBinaryArray { fn from(data: ArrayData) -> Self { + let (data_type, len, nulls, offset, buffers, _child_data) = data.into_parts(); + assert_eq!( - data.buffers().len(), + buffers.len(), 1, "FixedSizeBinaryArray data should contain 1 buffer only (values)" ); - let value_length = match data.data_type() { - DataType::FixedSizeBinary(len) => *len, + let value_length = match data_type { + DataType::FixedSizeBinary(len) => len, _ => panic!("Expected data type to be FixedSizeBinary"), }; let size = value_length as usize; - let value_data = - data.buffers()[0].slice_with_length(data.offset() * size, data.len() * size); + let value_data = buffers[0].slice_with_length(offset * size, len * size); Self { - data_type: data.data_type().clone(), - nulls: data.nulls().cloned(), - len: data.len(), + data_type, + nulls, + len, value_data, value_length, }