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

Method try_new

arrow-array/src/array/map_array.rs:61–115  ·  view source on GitHub ↗

Create a new [`MapArray`] from the provided parts See [`MapBuilder`](crate::builder::MapBuilder) for a higher-level interface to construct a [`MapArray`] # Errors Errors if `offsets.len() - 1 != nulls.len()` `offsets.last() > entries.len()` `field.is_nullable()` `entries.null_count() != 0` `entries.columns().len() != 2` `field.data_type() != entries.data_type()`

(
        field: FieldRef,
        offsets: OffsetBuffer<i32>,
        entries: StructArray,
        nulls: Option<NullBuffer>,
        ordered: bool,
    )

Source from the content-addressed store, hash-verified

59 /// * `entries.columns().len() != 2`
60 /// * `field.data_type() != entries.data_type()`
61 pub fn try_new(
62 field: FieldRef,
63 offsets: OffsetBuffer<i32>,
64 entries: StructArray,
65 nulls: Option<NullBuffer>,
66 ordered: bool,
67 ) -> Result<Self, ArrowError> {
68 let len = offsets.len() - 1; // Offsets guaranteed to not be empty
69 let end_offset = offsets.last().unwrap().as_usize();
70 // don't need to check other values of `offsets` because they are checked
71 // during construction of `OffsetBuffer`
72 if end_offset > entries.len() {
73 return Err(ArrowError::InvalidArgumentError(format!(
74 "Max offset of {end_offset} exceeds length of entries {}",
75 entries.len()
76 )));
77 }
78
79 if let Some(n) = nulls.as_ref() {
80 if n.len() != len {
81 return Err(ArrowError::InvalidArgumentError(format!(
82 "Incorrect length of null buffer for MapArray, expected {len} got {}",
83 n.len(),
84 )));
85 }
86 }
87 if field.is_nullable() || entries.null_count() != 0 {
88 return Err(ArrowError::InvalidArgumentError(
89 "MapArray entries cannot contain nulls".to_string(),
90 ));
91 }
92
93 if field.data_type() != entries.data_type() {
94 return Err(ArrowError::InvalidArgumentError(format!(
95 "MapArray expected data type {} got {} for {:?}",
96 field.data_type(),
97 entries.data_type(),
98 field.name()
99 )));
100 }
101
102 if entries.columns().len() != 2 {
103 return Err(ArrowError::InvalidArgumentError(format!(
104 "MapArray entries must contain two children, got {}",
105 entries.columns().len()
106 )));
107 }
108
109 Ok(Self {
110 data_type: DataType::Map(field, ordered),
111 nulls,
112 entries,
113 value_offsets: offsets,
114 })
115 }
116
117 /// Create a new [`MapArray`] from the provided parts
118 ///

Callers

nothing calls this directly

Calls 9

as_usizeMethod · 0.80
MapClass · 0.50
lenMethod · 0.45
lastMethod · 0.45
as_refMethod · 0.45
is_nullableMethod · 0.45
null_countMethod · 0.45
data_typeMethod · 0.45
columnsMethod · 0.45

Tested by

no test coverage detected