From 342234e03b5851b0768b6381a95f7cfe777bb25d Mon Sep 17 00:00:00 2001 From: Raphael Taylor-Davies Date: Thu, 23 Mar 2023 14:40:40 +0000 Subject: [PATCH 1/2] Zero-copy conversion from Vec to PrimitiveArray --- arrow-array/src/array/primitive_array.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arrow-array/src/array/primitive_array.rs b/arrow-array/src/array/primitive_array.rs index 6faecb1f0e55..f0cd88d3fa34 100644 --- a/arrow-array/src/array/primitive_array.rs +++ b/arrow-array/src/array/primitive_array.rs @@ -971,7 +971,7 @@ macro_rules! def_numeric_from_vec { fn from(data: Vec<<$ty as ArrowPrimitiveType>::Native>) -> Self { let array_data = ArrayData::builder($ty::DATA_TYPE) .len(data.len()) - .add_buffer(Buffer::from_slice_ref(&data)); + .add_buffer(Buffer::from_vec(data)); let array_data = unsafe { array_data.build_unchecked() }; PrimitiveArray::from(array_data) } From da964a2b1e8f86d4385a7a8bb8accb92b865d16b Mon Sep 17 00:00:00 2001 From: Raphael Taylor-Davies Date: Thu, 23 Mar 2023 14:49:08 +0000 Subject: [PATCH 2/2] Further tweaks --- arrow-array/src/array/binary_array.rs | 4 ++-- arrow-array/src/record_batch.rs | 2 +- arrow-string/src/substring.rs | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/arrow-array/src/array/binary_array.rs b/arrow-array/src/array/binary_array.rs index b965279fb796..5a07f9a0ab5c 100644 --- a/arrow-array/src/array/binary_array.rs +++ b/arrow-array/src/array/binary_array.rs @@ -209,8 +209,8 @@ where let data_len = offsets.len() - 1; let array_data = ArrayData::builder(Self::DATA_TYPE) .len(data_len) - .add_buffer(Buffer::from_slice_ref(&offsets)) - .add_buffer(Buffer::from_slice_ref(&values)) + .add_buffer(Buffer::from_vec(offsets)) + .add_buffer(Buffer::from_vec(values)) .null_bit_buffer(Some(null_buf.into())); let array_data = unsafe { array_data.build_unchecked() }; Self::from(array_data) diff --git a/arrow-array/src/record_batch.rs b/arrow-array/src/record_batch.rs index 9e9f15daea4b..02ced1a0ba92 100644 --- a/arrow-array/src/record_batch.rs +++ b/arrow-array/src/record_batch.rs @@ -603,7 +603,7 @@ mod tests { let record_batch = RecordBatch::try_new(Arc::new(schema), vec![Arc::new(a), Arc::new(b)]) .unwrap(); - assert_eq!(record_batch.get_array_memory_size(), 672); + assert_eq!(record_batch.get_array_memory_size(), 628); } fn check_batch(record_batch: RecordBatch, num_rows: usize) { diff --git a/arrow-string/src/substring.rs b/arrow-string/src/substring.rs index 7ee33f7fc282..997b26361587 100644 --- a/arrow-string/src/substring.rs +++ b/arrow-string/src/substring.rs @@ -296,7 +296,7 @@ fn binary_substring( None, array.nulls().map(|b| b.inner().sliced()), 0, - vec![Buffer::from_slice_ref(&new_offsets), new_values.into()], + vec![Buffer::from_vec(new_offsets), new_values.into()], vec![], ) }; @@ -420,7 +420,7 @@ fn utf8_substring( None, array.nulls().map(|b| b.inner().sliced()), 0, - vec![Buffer::from_slice_ref(&new_offsets), new_values.into()], + vec![Buffer::from_vec(new_offsets), new_values.into()], vec![], ) };