@@ -554,34 +554,33 @@ fn filter_boolean(array: &BooleanArray, predicate: &FilterPredicate) -> BooleanA
554554fn 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