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

Method from

arrow-array/src/array/union_array.rs:682–717  ·  view source on GitHub ↗
(data: ArrayData)

Source from the content-addressed store, hash-verified

680
681impl From<ArrayData> for UnionArray {
682 fn from(data: ArrayData) -> Self {
683 let (data_type, len, _nulls, offset, buffers, child_data) = data.into_parts();
684
685 let (fields, mode) = match &data_type {
686 DataType::Union(fields, mode) => (fields, mode),
687 d => panic!("UnionArray expected ArrayData with type Union got {d}"),
688 };
689
690 let (type_ids, offsets) = match mode {
691 UnionMode::Sparse => {
692 let [buffer]: [Buffer; 1] = buffers.try_into().expect("1 buffer for type_ids");
693 (ScalarBuffer::new(buffer, offset, len), None)
694 }
695 UnionMode::Dense => {
696 let [type_ids_buffer, offsets_buffer]: [Buffer; 2] = buffers
697 .try_into()
698 .expect("2 buffers for type_ids and offsets");
699 (
700 ScalarBuffer::new(type_ids_buffer, offset, len),
701 Some(ScalarBuffer::new(offsets_buffer, offset, len)),
702 )
703 }
704 };
705
706 let max_id = fields.iter().map(|(i, _)| i).max().unwrap_or_default() as usize;
707 let mut boxed_fields = vec![None; max_id + 1];
708 for (cd, (field_id, _)) in child_data.into_iter().zip(fields.iter()) {
709 boxed_fields[field_id as usize] = Some(make_array(cd));
710 }
711 Self {
712 data_type,
713 type_ids,
714 offsets,
715 fields: boxed_fields,
716 }
717 }
718}
719
720impl From<UnionArray> for ArrayData {

Callers

nothing calls this directly

Calls 13

maxMethod · 0.80
zipMethod · 0.80
collectMethod · 0.80
child_dataMethod · 0.80
make_arrayFunction · 0.70
into_partsMethod · 0.45
iterMethod · 0.45
into_iterMethod · 0.45
lenMethod · 0.45
to_dataMethod · 0.45
as_refMethod · 0.45
buffersMethod · 0.45

Tested by

no test coverage detected