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

Method encoder

arrow-row/src/lib.rs:702–802  ·  view source on GitHub ↗
(&self, array: &dyn Array)

Source from the content-addressed store, hash-verified

700 }
701
702 fn encoder(&self, array: &dyn Array) -> Result<Encoder<'_>, ArrowError> {
703 match self {
704 Codec::Stateless => Ok(Encoder::Stateless),
705 Codec::Dictionary(converter, nulls) => {
706 let values = array.as_any_dictionary().values().clone();
707 let rows = converter.convert_columns(&[values])?;
708 Ok(Encoder::Dictionary(rows, nulls.row()))
709 }
710 Codec::Struct(converter, null) => {
711 let v = as_struct_array(array);
712 let rows = converter.convert_columns(v.columns())?;
713 Ok(Encoder::Struct(rows, null.row()))
714 }
715 Codec::List(converter) => {
716 let values = match array.data_type() {
717 DataType::List(_) => {
718 let list_array = as_list_array(array);
719 let first_offset = list_array.offsets()[0] as usize;
720 let last_offset =
721 list_array.offsets()[list_array.offsets().len() - 1] as usize;
722
723 // values can include more data than referenced in the ListArray, only encode
724 // the referenced values.
725 list_array
726 .values()
727 .slice(first_offset, last_offset - first_offset)
728 }
729 DataType::LargeList(_) => {
730 let list_array = as_large_list_array(array);
731
732 let first_offset = list_array.offsets()[0] as usize;
733 let last_offset =
734 list_array.offsets()[list_array.offsets().len() - 1] as usize;
735
736 // values can include more data than referenced in the LargeListArray, only encode
737 // the referenced values.
738 list_array
739 .values()
740 .slice(first_offset, last_offset - first_offset)
741 }
742 DataType::ListView(_) => {
743 let list_view_array = array.as_list_view::<i32>();
744 let (min_offset, max_end) = compute_list_view_bounds(list_view_array);
745 list_view_array
746 .values()
747 .slice(min_offset, max_end - min_offset)
748 }
749 DataType::LargeListView(_) => {
750 let list_view_array = array.as_list_view::<i64>();
751 let (min_offset, max_end) = compute_list_view_bounds(list_view_array);
752 list_view_array
753 .values()
754 .slice(min_offset, max_end - min_offset)
755 }
756 DataType::FixedSizeList(_, _) => {
757 as_fixed_size_list_array(array).values().clone()
758 }
759 _ => unreachable!(),

Callers 1

appendMethod · 0.80

Calls 15

as_list_arrayFunction · 0.85
as_large_list_arrayFunction · 0.85
compute_list_view_boundsFunction · 0.85
as_fixed_size_list_arrayFunction · 0.85
RunEndEncodedClass · 0.85
as_any_dictionaryMethod · 0.80
convert_columnsMethod · 0.80
type_idsMethod · 0.80
ListClass · 0.50
cloneMethod · 0.45
valuesMethod · 0.45
rowMethod · 0.45

Tested by

no test coverage detected