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

Method create_primitive_array

arrow-ipc/src/reader.rs:264–297  ·  view source on GitHub ↗

Reads the correct number of buffers based on data type and null_count, and creates a primitive array ref

(
        &self,
        field_node: &FieldNode,
        data_type: &DataType,
        buffers: &[Buffer],
    )

Source from the content-addressed store, hash-verified

262 /// Reads the correct number of buffers based on data type and null_count, and creates a
263 /// primitive array ref
264 fn create_primitive_array(
265 &self,
266 field_node: &FieldNode,
267 data_type: &DataType,
268 buffers: &[Buffer],
269 ) -> Result<ArrayRef, ArrowError> {
270 let length = field_node.length() as usize;
271 let null_buffer = (field_node.null_count() > 0).then_some(buffers[0].clone());
272 let mut builder = match data_type {
273 Utf8 | Binary | LargeBinary | LargeUtf8 => {
274 // read 3 buffers: null buffer (optional), offsets buffer and data buffer
275 ArrayData::builder(data_type.clone())
276 .len(length)
277 .buffers(buffers[1..3].to_vec())
278 .null_bit_buffer(null_buffer)
279 }
280 BinaryView | Utf8View => ArrayData::builder(data_type.clone())
281 .len(length)
282 .buffers(buffers[1..].to_vec())
283 .null_bit_buffer(null_buffer),
284 _ if data_type.is_primitive() || matches!(data_type, Boolean | FixedSizeBinary(_)) => {
285 // read 2 buffers: null buffer (optional) and data buffer
286 ArrayData::builder(data_type.clone())
287 .len(length)
288 .add_buffer(buffers[1].clone())
289 .null_bit_buffer(null_buffer)
290 }
291 t => unreachable!("Data type {:?} either unsupported or not primitive", t),
292 };
293
294 builder = builder.null_count(field_node.null_count() as usize);
295
296 self.create_array_from_builder(builder)
297 }
298
299 /// Update the ArrayDataBuilder based on settings in this decoder
300 fn create_array_from_builder(&self, builder: ArrayDataBuilder) -> Result<ArrayRef, ArrowError> {

Callers 1

create_arrayMethod · 0.80

Calls 9

add_bufferMethod · 0.80
lengthMethod · 0.45
null_countMethod · 0.45
cloneMethod · 0.45
null_bit_bufferMethod · 0.45
buffersMethod · 0.45
lenMethod · 0.45
is_primitiveMethod · 0.45

Tested by

no test coverage detected