MCPcopy Create free account
hub / github.com/apache/paimon-rust / build_array_column

Function build_array_column

crates/paimon/src/arrow/format/avro.rs:390–444  ·  view source on GitHub ↗
(
    records: &[Value],
    name: &str,
    element_type: &DataType,
    num_rows: usize,
)

Source from the content-addressed store, hash-verified

388}
389
390fn build_array_column(
391 records: &[Value],
392 name: &str,
393 element_type: &DataType,
394 num_rows: usize,
395) -> crate::Result<Arc<dyn arrow_array::Array>> {
396 let arrow_element_type = crate::arrow::paimon_type_to_arrow(element_type)?;
397 let arrow_element_field =
398 arrow_schema::Field::new("element", arrow_element_type, element_type.is_nullable());
399
400 let idx = field_index(records, name);
401 let mut offsets = vec![0i32];
402 let mut element_records: Vec<Value> = Vec::new();
403
404 for record in records.iter().take(num_rows) {
405 match get_field_at(record, idx) {
406 Some(Value::Array(arr)) => {
407 for elem in arr {
408 element_records
409 .push(Value::Record(vec![("element".to_string(), elem.clone())]));
410 }
411 offsets.push(offsets.last().unwrap() + arr.len() as i32);
412 }
413 _ => {
414 offsets.push(*offsets.last().unwrap());
415 }
416 }
417 }
418
419 let element_col = build_column(
420 &element_records,
421 "element",
422 element_type,
423 element_records.len(),
424 )?;
425
426 let offsets_buf = OffsetBuffer::new(ScalarBuffer::from(offsets));
427 let nulls = NullBuffer::new(BooleanBuffer::from(
428 (0..num_rows)
429 .map(|i| get_field_at(&records[i], idx).is_some())
430 .collect::<Vec<_>>(),
431 ));
432
433 let list_arr = ListArray::try_new(
434 Arc::new(arrow_element_field),
435 offsets_buf,
436 element_col,
437 Some(nulls),
438 )
439 .map_err(|e| Error::UnexpectedError {
440 message: format!("Failed to build ListArray: {e}"),
441 source: Some(Box::new(e)),
442 })?;
443 Ok(Arc::new(list_arr))
444}
445
446fn build_map_column(
447 records: &[Value],

Callers 1

build_columnFunction · 0.85

Calls 7

paimon_type_to_arrowFunction · 0.85
field_indexFunction · 0.85
get_field_atFunction · 0.85
build_columnFunction · 0.85
is_nullableMethod · 0.80
iterMethod · 0.45
lenMethod · 0.45

Tested by

no test coverage detected