33
44//! Definition and implementation of [`StructVectorMut`].
55
6+ use std:: sync:: Arc ;
7+
68use vortex_error:: { VortexExpect , VortexResult , vortex_ensure, vortex_panic} ;
79use vortex_mask:: MaskMut ;
810
@@ -24,11 +26,11 @@ use crate::{StructVector, Vector, VectorMut, VectorMutOps, VectorOps};
2426/// use vortex_mask::MaskMut;
2527///
2628/// // Create a struct with three fields: nulls, booleans, and integers.
27- /// let fields = vec! [
29+ /// let fields = Box::new( [
2830/// NullVectorMut::new(3).into(),
2931/// BoolVectorMut::from_iter([true, false, true]).into(),
3032/// PVectorMut::<i32>::from_iter([10, 20, 30]).into(),
31- /// ];
33+ /// ]) ;
3234///
3335/// let mut struct_vec = StructVectorMut::new(fields, MaskMut::new_true(3));
3436/// assert_eq!(struct_vec.len(), 3);
@@ -45,10 +47,10 @@ use crate::{StructVector, Vector, VectorMut, VectorMutOps, VectorOps};
4547/// };
4648/// use vortex_mask::MaskMut;
4749///
48- /// let fields = vec! [
50+ /// let fields = Box::new( [
4951/// NullVectorMut::new(6).into(),
5052/// PVectorMut::<i32>::from_iter([1, 2, 3, 4, 5, 6]).into(),
51- /// ];
53+ /// ]) ;
5254///
5355/// let mut struct_vec = StructVectorMut::new(fields, MaskMut::new_true(6));
5456///
@@ -72,11 +74,11 @@ use crate::{StructVector, Vector, VectorMut, VectorMutOps, VectorOps};
7274/// use vortex_mask::MaskMut;
7375/// use vortex_dtype::PTypeDowncast;
7476///
75- /// let fields = vec! [
77+ /// let fields = Box::new( [
7678/// NullVectorMut::new(3).into(),
7779/// BoolVectorMut::from_iter([true, false, true]).into(),
7880/// PVectorMut::<i32>::from_iter([10, 20, 30]).into(),
79- /// ];
81+ /// ]) ;
8082///
8183/// let struct_vec = StructVectorMut::new(fields, MaskMut::new_true(3));
8284///
@@ -287,7 +289,7 @@ impl VectorMutOps for StructVectorMut {
287289 . collect ( ) ;
288290
289291 StructVector {
290- fields : frozen_fields. into_boxed_slice ( ) ,
292+ fields : Arc :: new ( frozen_fields. into_boxed_slice ( ) ) ,
291293 len : self . len ,
292294 validity : self . validity . freeze ( ) ,
293295 }
@@ -368,16 +370,15 @@ mod tests {
368370 #[ test]
369371 fn test_try_into_mut_and_values ( ) {
370372 let struct_vec = StructVector {
371- fields : vec ! [
373+ fields : Arc :: new ( Box :: new ( [
372374 NullVector :: new ( 5 ) . into ( ) ,
373375 BoolVectorMut :: from_iter ( [ true , false , true , false , true ] )
374376 . freeze ( )
375377 . into ( ) ,
376378 PVectorMut :: < i32 > :: from_iter ( [ 10 , 20 , 30 , 40 , 50 ] )
377379 . freeze ( )
378380 . into ( ) ,
379- ]
380- . into_boxed_slice ( ) ,
381+ ] ) ) ,
381382 len : 5 ,
382383 validity : Mask :: AllTrue ( 5 ) ,
383384 } ;
@@ -410,12 +411,11 @@ mod tests {
410411 let bool_field_clone = bool_field. clone ( ) ;
411412
412413 let struct_vec = StructVector {
413- fields : vec ! [
414+ fields : Arc :: new ( Box :: new ( [
414415 NullVector :: new ( 3 ) . into ( ) ,
415416 bool_field_clone,
416417 PVectorMut :: < i32 > :: from_iter ( [ 1 , 2 , 3 ] ) . freeze ( ) . into ( ) ,
417- ]
418- . into_boxed_slice ( ) ,
418+ ] ) ) ,
419419 len : 3 ,
420420 validity : Mask :: AllTrue ( 3 ) ,
421421 } ;
@@ -479,12 +479,11 @@ mod tests {
479479
480480 // Test extend.
481481 let to_extend = StructVector {
482- fields : vec ! [
482+ fields : Arc :: new ( Box :: new ( [
483483 NullVector :: new ( 2 ) . into ( ) ,
484484 BoolVectorMut :: from_iter ( [ false , true ] ) . freeze ( ) . into ( ) ,
485485 PVectorMut :: < i32 > :: from_iter ( [ 40 , 50 ] ) . freeze ( ) . into ( ) ,
486- ]
487- . into_boxed_slice ( ) ,
486+ ] ) ) ,
488487 len : 2 ,
489488 validity : Mask :: AllTrue ( 2 ) ,
490489 } ;
@@ -651,7 +650,7 @@ mod tests {
651650 }
652651
653652 // Verify field data is preserved.
654- let mut fields = frozen. into_parts ( ) . 0 . into_vec ( ) ;
653+ let mut fields = Arc :: try_unwrap ( frozen. into_parts ( ) . 0 ) . unwrap ( ) . into_vec ( ) ;
655654
656655 if let Vector :: Primitive ( prim_vec) = fields. pop ( ) . unwrap ( ) {
657656 let prim_vec_mut = prim_vec. try_into_mut ( ) . unwrap ( ) ;
0 commit comments