Skip to content

Commit 816bab2

Browse files
committed
WIP
1 parent 2955b69 commit 816bab2

File tree

1 file changed

+7
-8
lines changed

1 file changed

+7
-8
lines changed

arrow-select/src/filter.rs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -554,34 +554,33 @@ fn filter_boolean(array: &BooleanArray, predicate: &FilterPredicate) -> BooleanA
554554
fn filter_native<T: ArrowNativeType>(values: &[T], predicate: &FilterPredicate) -> Buffer {
555555
assert!(values.len() >= predicate.filter.len());
556556

557-
let buffer = match &predicate.strategy {
557+
match &predicate.strategy {
558558
IterationStrategy::SlicesIterator => {
559559
let mut buffer = Vec::with_capacity(predicate.count);
560560
for (start, end) in SlicesIterator::new(&predicate.filter) {
561561
buffer.extend_from_slice(&values[start..end]);
562562
}
563-
buffer
563+
buffer.into()
564564
}
565565
IterationStrategy::Slices(slices) => {
566566
let mut buffer = Vec::with_capacity(predicate.count);
567567
for (start, end) in slices {
568568
buffer.extend_from_slice(&values[*start..*end]);
569569
}
570-
buffer
570+
buffer.into()
571571
}
572572
IterationStrategy::IndexIterator => {
573573
let iter = IndexIterator::new(&predicate.filter, predicate.count).map(|x| values[x]);
574574

575-
iter.collect()
575+
// SAFETY: IndexIterator is trusted length
576+
unsafe { MutableBuffer::from_trusted_len_iter(iter) }.into()
576577
}
577578
IterationStrategy::Indices(indices) => {
578579
let iter = indices.iter().map(|x| values[*x]);
579-
iter.collect()
580+
iter.collect::<Vec<_>>().into()
580581
}
581582
IterationStrategy::All | IterationStrategy::None => unreachable!(),
582-
};
583-
584-
buffer.into()
583+
}
585584
}
586585

587586
/// `filter` implementation for primitive arrays

0 commit comments

Comments
 (0)