@@ -294,22 +294,44 @@ impl ArrayBuilder for VarBinViewBuilder {
294294 . iter ( )
295295 . map ( |view| adjustment. adjust_view ( view) ) ,
296296 ) ,
297- ViewAdjustment :: Rewriting ( adjustment) => {
298- for ( idx , & view ) in array . views ( ) . iter ( ) . enumerate ( ) {
299- let new_view = if ! array. is_valid ( idx ) {
300- BinaryView :: empty_view ( )
301- } else if view . is_inlined ( ) {
302- view
303- } else if let Some ( adjusted ) = adjustment . adjust_view ( & view ) {
304- adjusted
305- } else {
306- let bytes = array . bytes_at ( idx ) ;
307- let ( new_buf_idx , new_offset ) = self . append_value_to_buffer ( & bytes) ;
308- BinaryView :: make_view ( bytes . as_slice ( ) , new_buf_idx , new_offset )
309- } ;
310- self . views_builder . push ( new_view )
297+ ViewAdjustment :: Rewriting ( adjustment) => match array . validity_mask ( ) {
298+ Mask :: AllTrue ( _ ) => {
299+ for ( idx , & view ) in array. views ( ) . iter ( ) . enumerate ( ) {
300+ let new_view = if view . is_inlined ( ) {
301+ view
302+ } else if let Some ( adjusted ) = adjustment . adjust_view ( & view) {
303+ adjusted
304+ } else {
305+ let bytes = array . bytes_at ( idx ) ;
306+ let ( new_buf_idx , new_offset ) = self . append_value_to_buffer ( & bytes ) ;
307+ BinaryView :: make_view ( bytes. as_slice ( ) , new_buf_idx , new_offset )
308+ } ;
309+ self . views_builder . push ( new_view ) ;
310+ }
311311 }
312- }
312+ Mask :: AllFalse ( _) => {
313+ self . views_builder
314+ . push_n ( BinaryView :: empty_view ( ) , array. len ( ) ) ;
315+ }
316+ Mask :: Values ( v) => {
317+ for ( idx, ( & view, is_valid) ) in
318+ array. views ( ) . iter ( ) . zip ( v. bit_buffer ( ) . iter ( ) ) . enumerate ( )
319+ {
320+ let new_view = if !is_valid {
321+ BinaryView :: empty_view ( )
322+ } else if view. is_inlined ( ) {
323+ view
324+ } else if let Some ( adjusted) = adjustment. adjust_view ( & view) {
325+ adjusted
326+ } else {
327+ let bytes = array. bytes_at ( idx) ;
328+ let ( new_buf_idx, new_offset) = self . append_value_to_buffer ( & bytes) ;
329+ BinaryView :: make_view ( bytes. as_slice ( ) , new_buf_idx, new_offset)
330+ } ;
331+ self . views_builder . push ( new_view) ;
332+ }
333+ }
334+ } ,
313335 }
314336 }
315337
0 commit comments