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

Method into_builder

arrow-array/src/array/byte_array.rs:373–452  ·  view source on GitHub ↗

Returns `GenericByteBuilder` of this byte array for mutating its values if the underlying offset and data buffers are not shared by others.

(self)

Source from the content-addressed store, hash-verified

371 /// Returns `GenericByteBuilder` of this byte array for mutating its values if the underlying
372 /// offset and data buffers are not shared by others.
373 pub fn into_builder(self) -> Result<GenericByteBuilder<T>, Self> {
374 let len = self.len();
375 let value_len = T::Offset::as_usize(self.value_offsets()[len] - self.value_offsets()[0]);
376
377 let data = self.into_data();
378 let null_bit_buffer = data.nulls().map(|b| b.inner().sliced());
379
380 let element_len = std::mem::size_of::<T::Offset>();
381 let offset_buffer = data.buffers()[0]
382 .slice_with_length(data.offset() * element_len, (len + 1) * element_len);
383
384 let element_len = std::mem::size_of::<u8>();
385 let value_buffer = data.buffers()[1]
386 .slice_with_length(data.offset() * element_len, value_len * element_len);
387
388 drop(data);
389
390 let try_mutable_null_buffer = match null_bit_buffer {
391 None => Ok(None),
392 Some(null_buffer) => {
393 // Null buffer exists, tries to make it mutable
394 null_buffer.into_mutable().map(Some)
395 }
396 };
397
398 let try_mutable_buffers = match try_mutable_null_buffer {
399 Ok(mutable_null_buffer) => {
400 // Got mutable null buffer, tries to get mutable value buffer
401 let try_mutable_offset_buffer = offset_buffer.into_mutable();
402 let try_mutable_value_buffer = value_buffer.into_mutable();
403
404 // try_mutable_offset_buffer.map(...).map_err(...) doesn't work as the compiler complains
405 // mutable_null_buffer is moved into map closure.
406 match (try_mutable_offset_buffer, try_mutable_value_buffer) {
407 (Ok(mutable_offset_buffer), Ok(mutable_value_buffer)) => unsafe {
408 Ok(GenericByteBuilder::<T>::new_from_buffer(
409 mutable_offset_buffer,
410 mutable_value_buffer,
411 mutable_null_buffer,
412 ))
413 },
414 (Ok(mutable_offset_buffer), Err(value_buffer)) => Err((
415 mutable_offset_buffer.into(),
416 value_buffer,
417 mutable_null_buffer.map(|b| b.into()),
418 )),
419 (Err(offset_buffer), Ok(mutable_value_buffer)) => Err((
420 offset_buffer,
421 mutable_value_buffer.into(),
422 mutable_null_buffer.map(|b| b.into()),
423 )),
424 (Err(offset_buffer), Err(value_buffer)) => Err((
425 offset_buffer,
426 value_buffer,
427 mutable_null_buffer.map(|b| b.into()),
428 )),
429 }
430 }

Callers 15

test_nested_recordsFunction · 0.45
binary_mutFunction · 0.45
try_binary_mutFunction · 0.45
try_binary_no_nulls_mutFunction · 0.45
finishMethod · 0.45
finish_clonedMethod · 0.45
try_new_from_builderMethod · 0.45
finishMethod · 0.45
finish_clonedMethod · 0.45
try_new_from_builderMethod · 0.45

Calls 13

slicedMethod · 0.80
slice_with_lengthMethod · 0.80
into_mutableMethod · 0.80
add_bufferMethod · 0.80
lenMethod · 0.45
value_offsetsMethod · 0.45
into_dataMethod · 0.45
nullsMethod · 0.45
innerMethod · 0.45
buffersMethod · 0.45
offsetMethod · 0.45
null_bit_bufferMethod · 0.45