Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/crates/polars-parquet/src/arrow/write/boolean/nested.rs
6940 views
1
use arrow::array::{Array, BooleanArray};
2
use polars_error::PolarsResult;
3
4
use super::super::{EncodeNullability, WriteOptions, nested, utils};
5
use super::basic::{build_statistics, encode_plain};
6
use crate::arrow::read::schema::is_nullable;
7
use crate::arrow::write::Nested;
8
use crate::parquet::encoding::Encoding;
9
use crate::parquet::page::DataPage;
10
use crate::parquet::schema::types::PrimitiveType;
11
12
pub fn array_to_page(
13
array: &BooleanArray,
14
options: WriteOptions,
15
type_: PrimitiveType,
16
nested: &[Nested],
17
) -> PolarsResult<DataPage> {
18
let is_optional = is_nullable(&type_.field_info);
19
let encode_options = EncodeNullability::new(is_optional);
20
21
let mut buffer = vec![];
22
let (repetition_levels_byte_length, definition_levels_byte_length) =
23
nested::write_rep_and_def(options.version, nested, &mut buffer)?;
24
25
encode_plain(array, encode_options, &mut buffer)?;
26
27
let statistics = if options.has_statistics() {
28
Some(build_statistics(array, &options.statistics))
29
} else {
30
None
31
};
32
33
utils::build_plain_page(
34
buffer,
35
nested::num_values(nested),
36
nested[0].len(),
37
array.null_count(),
38
repetition_levels_byte_length,
39
definition_levels_byte_length,
40
statistics,
41
type_,
42
options,
43
Encoding::Plain,
44
)
45
}
46
47