(data: ArrayData)
| 586 | /// Constructs a `DictionaryArray` from an `ArrayData` |
| 587 | impl<T: ArrowDictionaryKeyType> From<ArrayData> for DictionaryArray<T> { |
| 588 | fn from(data: ArrayData) -> Self { |
| 589 | let (data_type, len, nulls, offset, mut buffers, mut child_data) = data.into_parts(); |
| 590 | |
| 591 | assert_eq!( |
| 592 | buffers.len(), |
| 593 | 1, |
| 594 | "DictionaryArray data should contain a single buffer only (keys)." |
| 595 | ); |
| 596 | let buffer = buffers.pop().expect("checked above"); |
| 597 | assert_eq!( |
| 598 | child_data.len(), |
| 599 | 1, |
| 600 | "DictionaryArray should contain a single child array (values)." |
| 601 | ); |
| 602 | let cd = child_data.pop().expect("checked above"); |
| 603 | |
| 604 | if let DataType::Dictionary(key_data_type, _) = &data_type { |
| 605 | assert_eq!( |
| 606 | &T::DATA_TYPE, |
| 607 | key_data_type.as_ref(), |
| 608 | "DictionaryArray's data type must match, expected {} got {}", |
| 609 | T::DATA_TYPE, |
| 610 | key_data_type |
| 611 | ); |
| 612 | |
| 613 | let values = make_array(cd); |
| 614 | |
| 615 | // create a zero-copy of the keys' data |
| 616 | let keys = PrimitiveArray::<T>::new(ScalarBuffer::new(buffer, offset, len), nulls); |
| 617 | |
| 618 | Self { |
| 619 | data_type, |
| 620 | keys, |
| 621 | values, |
| 622 | is_ordered: false, |
| 623 | } |
| 624 | } else { |
| 625 | panic!("DictionaryArray must have Dictionary data type.") |
| 626 | } |
| 627 | } |
| 628 | } |
| 629 | |
| 630 | impl<T: ArrowDictionaryKeyType> From<DictionaryArray<T>> for ArrayData { |
nothing calls this directly
no test coverage detected