@@ -643,42 +643,8 @@ impl<B: ByteViewType> ByteViewGroupValueBuilder<B> {
643
643
. rev ( )
644
644
. find ( |view| ( ( * * view) as u32 ) > 12 ) ;
645
645
646
- if let Some ( view) = last_non_inlined_view {
647
- let view = ByteView :: from ( * view) ;
648
- let last_remaining_buffer_index = view. buffer_index as usize ;
649
-
650
- // Check should we take the whole `last_remaining_buffer_index` buffer
651
- let take_whole_last_buffer = self . should_take_whole_buffer (
652
- last_remaining_buffer_index,
653
- ( view. offset + view. length ) as usize ,
654
- ) ;
655
-
656
- // Take related buffers
657
- let buffers = if take_whole_last_buffer {
658
- self . take_buffers_with_whole_last ( last_remaining_buffer_index)
659
- } else {
660
- self . take_buffers_with_partial_last (
661
- last_remaining_buffer_index,
662
- ( view. offset + view. length ) as usize ,
663
- )
664
- } ;
665
-
666
- // Shift `buffer index`s finally
667
- let shifts = if take_whole_last_buffer {
668
- last_remaining_buffer_index + 1
669
- } else {
670
- last_remaining_buffer_index
671
- } ;
672
-
673
- self . views . iter_mut ( ) . for_each ( |view| {
674
- if ( * view as u32 ) > 12 {
675
- let mut byte_view = ByteView :: from ( * view) ;
676
- byte_view. buffer_index -= shifts as u32 ;
677
- * view = byte_view. as_u128 ( ) ;
678
- }
679
- } ) ;
680
-
681
- // Build array and return
646
+ // All taken views inlined
647
+ let Some ( view) = last_non_inlined_view else {
682
648
let views = ScalarBuffer :: from ( first_n_views) ;
683
649
684
650
// Safety:
@@ -688,24 +654,60 @@ impl<B: ByteViewType> ByteViewGroupValueBuilder<B> {
688
654
unsafe {
689
655
Arc :: new ( GenericByteViewArray :: < B > :: new_unchecked (
690
656
views,
691
- buffers ,
657
+ Vec :: new ( ) ,
692
658
null_buffer,
693
659
) )
694
660
}
661
+ } ;
662
+
663
+ // Unfortunately, some taken views non-inlined
664
+ let view = ByteView :: from ( * view) ;
665
+ let last_remaining_buffer_index = view. buffer_index as usize ;
666
+
667
+ // Check should we take the whole `last_remaining_buffer_index` buffer
668
+ let take_whole_last_buffer = self . should_take_whole_buffer (
669
+ last_remaining_buffer_index,
670
+ ( view. offset + view. length ) as usize ,
671
+ ) ;
672
+
673
+ // Take related buffers
674
+ let buffers = if take_whole_last_buffer {
675
+ self . take_buffers_with_whole_last ( last_remaining_buffer_index)
695
676
} else {
696
- let views = ScalarBuffer :: from ( first_n_views) ;
677
+ self . take_buffers_with_partial_last (
678
+ last_remaining_buffer_index,
679
+ ( view. offset + view. length ) as usize ,
680
+ )
681
+ } ;
697
682
698
- // Safety:
699
- // * all views were correctly made
700
- // * (if utf8): Input was valid Utf8 so buffer contents are
701
- // valid utf8 as well
702
- unsafe {
703
- Arc :: new ( GenericByteViewArray :: < B > :: new_unchecked (
704
- views,
705
- Vec :: new ( ) ,
706
- null_buffer,
707
- ) )
683
+ // Shift `buffer index`s finally
684
+ let shifts = if take_whole_last_buffer {
685
+ last_remaining_buffer_index + 1
686
+ } else {
687
+ last_remaining_buffer_index
688
+ } ;
689
+
690
+ self . views . iter_mut ( ) . for_each ( |view| {
691
+ if ( * view as u32 ) > 12 {
692
+ let mut byte_view = ByteView :: from ( * view) ;
693
+ byte_view. buffer_index -= shifts as u32 ;
694
+ * view = byte_view. as_u128 ( ) ;
708
695
}
696
+ } ) ;
697
+
698
+ // Build array and return
699
+ let views = ScalarBuffer :: from ( first_n_views) ;
700
+
701
+ // Safety:
702
+ // * all views were correctly made
703
+ // * (if utf8): Input was valid Utf8 so buffer contents are
704
+ // valid utf8 as well
705
+ unsafe {
706
+ Arc :: new ( GenericByteViewArray :: < B > :: new_unchecked (
707
+ views,
708
+ buffers,
709
+ null_buffer,
710
+ ) )
709
711
}
710
712
}
711
713
0 commit comments