From 0b2f7dfd0d3e27b9484b5b68eb901af4ce3292c7 Mon Sep 17 00:00:00 2001 From: cakeni <2150015994@qq.com> Date: Tue, 11 Aug 2026 19:37:35 +0800 Subject: [PATCH] perf: replace concat_elements_bytes BufferBuilders with Vec --- arrow-string/src/concat_elements.rs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/arrow-string/src/concat_elements.rs b/arrow-string/src/concat_elements.rs index cbba7fbec6c6..44daa9675f8f 100644 --- a/arrow-string/src/concat_elements.rs +++ b/arrow-string/src/concat_elements.rs @@ -48,24 +48,26 @@ pub fn concat_elements_bytes( let left_values = left.value_data(); let right_values = right.value_data(); - let mut output_values = BufferBuilder::::new( + let mut output_values = Vec::with_capacity( left_values.len() + right_values.len() - left_offsets[0].as_usize() - right_offsets[0].as_usize(), ); - let mut output_offsets = BufferBuilder::::new(left_offsets.len()); - output_offsets.append(T::Offset::usize_as(0)); + let mut output_offsets = Vec::with_capacity(left_offsets.len()); + output_offsets.push(T::Offset::usize_as(0)); for (left_idx, right_idx) in left_offsets.windows(2).zip(right_offsets.windows(2)) { - output_values.append_slice(&left_values[left_idx[0].as_usize()..left_idx[1].as_usize()]); - output_values.append_slice(&right_values[right_idx[0].as_usize()..right_idx[1].as_usize()]); - output_offsets.append(T::Offset::from_usize(output_values.len()).unwrap()); + output_values + .extend_from_slice(&left_values[left_idx[0].as_usize()..left_idx[1].as_usize()]); + output_values + .extend_from_slice(&right_values[right_idx[0].as_usize()..right_idx[1].as_usize()]); + output_offsets.push(T::Offset::from_usize(output_values.len()).unwrap()); } let builder = ArrayDataBuilder::new(T::DATA_TYPE) .len(left.len()) - .add_buffer(output_offsets.finish()) - .add_buffer(output_values.finish()) + .add_buffer(output_offsets.into()) + .add_buffer(output_values.into()) .nulls(nulls); // SAFETY - offsets valid by construction