MCPcopy Create free account
hub / github.com/apache/arrow-rs / concat_elements_bytes

Function concat_elements_bytes

arrow-string/src/concat_elements.rs:31–73  ·  view source on GitHub ↗

Returns the elementwise concatenation of a [`GenericByteArray`].

(
    left: &GenericByteArray<T>,
    right: &GenericByteArray<T>,
)

Source from the content-addressed store, hash-verified

29
30/// Returns the elementwise concatenation of a [`GenericByteArray`].
31pub fn concat_elements_bytes<T: ByteArrayType>(
32 left: &GenericByteArray<T>,
33 right: &GenericByteArray<T>,
34) -> Result<GenericByteArray<T>, ArrowError> {
35 if left.len() != right.len() {
36 return Err(ArrowError::ComputeError(format!(
37 "Arrays must have the same length: {} != {}",
38 left.len(),
39 right.len()
40 )));
41 }
42
43 let nulls = NullBuffer::union(left.nulls(), right.nulls());
44
45 let left_offsets = left.value_offsets();
46 let right_offsets = right.value_offsets();
47
48 let left_values = left.value_data();
49 let right_values = right.value_data();
50
51 let mut output_values = BufferBuilder::<u8>::new(
52 left_values.len() + right_values.len()
53 - left_offsets[0].as_usize()
54 - right_offsets[0].as_usize(),
55 );
56
57 let mut output_offsets = BufferBuilder::<T::Offset>::new(left_offsets.len());
58 output_offsets.append(T::Offset::usize_as(0));
59 for (left_idx, right_idx) in left_offsets.windows(2).zip(right_offsets.windows(2)) {
60 output_values.append_slice(&left_values[left_idx[0].as_usize()..left_idx[1].as_usize()]);
61 output_values.append_slice(&right_values[right_idx[0].as_usize()..right_idx[1].as_usize()]);
62 output_offsets.append(T::Offset::from_usize(output_values.len()).unwrap());
63 }
64
65 let builder = ArrayDataBuilder::new(T::DATA_TYPE)
66 .len(left.len())
67 .add_buffer(output_offsets.finish())
68 .add_buffer(output_values.finish())
69 .nulls(nulls);
70
71 // SAFETY - offsets valid by construction
72 Ok(unsafe { builder.build_unchecked() }.into())
73}
74
75/// Returns the elementwise concatenation of a [`GenericStringArray`].
76///

Callers 2

concat_elements_utf8Function · 0.85
concat_element_binaryFunction · 0.85

Calls 11

as_usizeMethod · 0.80
zipMethod · 0.80
add_bufferMethod · 0.80
lenMethod · 0.45
nullsMethod · 0.45
value_offsetsMethod · 0.45
value_dataMethod · 0.45
appendMethod · 0.45
append_sliceMethod · 0.45
finishMethod · 0.45
build_uncheckedMethod · 0.45

Tested by

no test coverage detected