@@ -643,42 +643,8 @@ impl<B: ByteViewType> ByteViewGroupValueBuilder<B> {
643643 . rev ( )
644644 . find ( |view| ( ( * * view) as u32 ) > 12 ) ;
645645
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 {
682648 let views = ScalarBuffer :: from ( first_n_views) ;
683649
684650 // Safety:
@@ -688,24 +654,60 @@ impl<B: ByteViewType> ByteViewGroupValueBuilder<B> {
688654 unsafe {
689655 Arc :: new ( GenericByteViewArray :: < B > :: new_unchecked (
690656 views,
691- buffers ,
657+ Vec :: new ( ) ,
692658 null_buffer,
693659 ) )
694660 }
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)
695676 } 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+ } ;
697682
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 ( ) ;
708695 }
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+ ) )
709711 }
710712 }
711713
0 commit comments