Path: blob/main/crates/polars-parquet/src/arrow/write/binary/nested.rs
6940 views
use arrow::array::{Array, BinaryArray};1use arrow::offset::Offset;2use polars_error::PolarsResult;34use super::super::{WriteOptions, nested, utils};5use super::basic::{build_statistics, encode_plain};6use crate::arrow::write::Nested;7use crate::parquet::encoding::Encoding;8use crate::parquet::page::DataPage;9use crate::parquet::schema::types::PrimitiveType;10use crate::read::schema::is_nullable;11use crate::write::EncodeNullability;1213pub fn array_to_page<O>(14array: &BinaryArray<O>,15options: WriteOptions,16type_: PrimitiveType,17nested: &[Nested],18) -> PolarsResult<DataPage>19where20O: Offset,21{22let is_optional = is_nullable(&type_.field_info);23let encode_options = EncodeNullability::new(is_optional);2425let mut buffer = vec![];26let (repetition_levels_byte_length, definition_levels_byte_length) =27nested::write_rep_and_def(options.version, nested, &mut buffer)?;2829encode_plain(array, encode_options, &mut buffer);3031let statistics = if options.has_statistics() {32Some(build_statistics(array, type_.clone(), &options.statistics))33} else {34None35};3637utils::build_plain_page(38buffer,39nested::num_values(nested),40nested[0].len(),41array.null_count(),42repetition_levels_byte_length,43definition_levels_byte_length,44statistics,45type_,46options,47Encoding::Plain,48)49}505152