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

Method new

parquet/src/arrow/decoder/delta_byte_array.rs:36–67  ·  view source on GitHub ↗

Create a new [`DeltaByteArrayDecoder`] with the provided data page

(data: Bytes)

Source from the content-addressed store, hash-verified

34impl DeltaByteArrayDecoder {
35 /// Create a new [`DeltaByteArrayDecoder`] with the provided data page
36 pub fn new(data: Bytes) -> Result<Self> {
37 let mut prefix = DeltaBitPackDecoder::<Int32Type>::new();
38 prefix.set_data(data.clone(), 0)?;
39
40 let num_prefix = prefix.values_left();
41 let mut prefix_lengths = vec![0; num_prefix];
42 assert_eq!(prefix.get(&mut prefix_lengths)?, num_prefix);
43
44 let mut suffix = DeltaBitPackDecoder::<Int32Type>::new();
45 suffix.set_data(data.slice(prefix.get_offset()..), 0)?;
46
47 let num_suffix = suffix.values_left();
48 let mut suffix_lengths = vec![0; num_suffix];
49 assert_eq!(suffix.get(&mut suffix_lengths)?, num_suffix);
50
51 if num_prefix != num_suffix {
52 return Err(general_err!(format!(
53 "inconsistent DELTA_BYTE_ARRAY lengths, prefixes: {num_prefix}, suffixes: {num_suffix}"
54 )));
55 }
56
57 assert_eq!(prefix_lengths.len(), suffix_lengths.len());
58
59 Ok(Self {
60 prefix_lengths,
61 suffix_lengths,
62 data,
63 length_offset: 0,
64 data_offset: prefix.get_offset() + suffix.get_offset(),
65 last_value: vec![],
66 })
67 }
68
69 /// Returns the number of values remaining
70 pub fn remaining(&self) -> usize {

Callers

nothing calls this directly

Calls 5

set_dataMethod · 0.45
cloneMethod · 0.45
values_leftMethod · 0.45
sliceMethod · 0.45
get_offsetMethod · 0.45

Tested by

no test coverage detected