Skip to content

Commit c941606

Browse files
committed
Review feedback
1 parent cf099c3 commit c941606

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

parquet/src/arrow/array_reader/byte_array.rs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -579,11 +579,13 @@ impl ByteArrayDecoderDictionary {
579579
#[cfg(test)]
580580
mod tests {
581581
use super::*;
582+
use crate::arrow::record_reader::buffer::ValuesBuffer;
582583
use crate::basic::Type as PhysicalType;
583584
use crate::data_type::{ByteArray, ByteArrayType};
584585
use crate::encodings::encoding::{get_encoder, DictEncoder, Encoder};
585586
use crate::schema::types::{ColumnDescriptor, ColumnPath, Type};
586587
use crate::util::memory::MemTracker;
588+
use arrow::array::{Array, StringArray};
587589
use std::sync::Arc;
588590

589591
fn column() -> ColumnDescPtr {
@@ -664,6 +666,34 @@ mod tests {
664666
assert_eq!(output.offsets.as_slice(), &[0, 5, 10, 11, 12]);
665667

666668
assert_eq!(decoder.read(&mut output, 4..8).unwrap(), 0);
669+
670+
let valid = vec![false, false, true, true, false, true, true, false, false];
671+
let rev_position_iter = valid
672+
.iter()
673+
.enumerate()
674+
.rev()
675+
.filter_map(|(i, valid)| valid.then(|| i));
676+
677+
let valid_buffer = Buffer::from_iter(valid.iter().cloned());
678+
679+
output.pad_nulls(0, 4, valid.len(), rev_position_iter);
680+
let array = output.into_array(Some(valid_buffer), ArrowType::Utf8);
681+
let strings = array.as_any().downcast_ref::<StringArray>().unwrap();
682+
683+
assert_eq!(
684+
strings.iter().collect::<Vec<_>>(),
685+
vec![
686+
None,
687+
None,
688+
Some("hello"),
689+
Some("world"),
690+
None,
691+
Some("a"),
692+
Some("b"),
693+
None,
694+
None,
695+
]
696+
);
667697
}
668698
}
669699
}

parquet/src/arrow/array_reader/offset_buffer.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ impl<I: OffsetSizeTrait + ScalarValue> BufferQueue for OffsetBuffer<I> {
143143
type Slice = Self;
144144

145145
fn split_off(&mut self, len: usize) -> Self::Output {
146+
assert!(self.offsets.len() > len, "{} > {}", self.offsets.len(), len);
146147
let remaining_offsets = self.offsets.len() - len - 1;
147148
let offsets = self.offsets.as_slice();
148149

0 commit comments

Comments
 (0)