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