Create a new [`DeltaByteArrayDecoder`] with the provided data page
(data: Bytes)
| 34 | impl 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 { |
nothing calls this directly
no test coverage detected