@@ -170,16 +170,6 @@ impl<'a> ArrayNodeFlatBuffer<'a> {
170170 session : & ' a VortexSession ,
171171 array : & ' a ArrayRef ,
172172 ) -> VortexResult < Self > {
173- // Depth-first traversal of the array to ensure it supports serialization.
174- // FIXME(ngates): this serializes the metadata and throws it away!
175- for child in array. depth_first_traversal ( ) {
176- if child. metadata ( session) ?. is_none ( ) {
177- vortex_bail ! (
178- "Array {} does not support serialization" ,
179- child. encoding_id( )
180- ) ;
181- }
182- }
183173 let n_buffers_recursive = array. nbuffers_recursive ( ) ;
184174 if n_buffers_recursive > u16:: MAX as usize {
185175 vortex_bail ! (
@@ -210,13 +200,13 @@ impl<'a> ArrayNodeFlatBuffer<'a> {
210200 )
211201 } ) ?;
212202
213- let metadata = self . array . metadata ( self . session ) ?. ok_or_else ( || {
203+ let metadata_bytes = self . session . array_serialize ( self . array ) ?. ok_or_else ( || {
214204 vortex_err ! (
215205 "Array {} does not support serialization" ,
216206 self . array. encoding_id( )
217207 )
218208 } ) ?;
219- let metadata = Some ( fbb. create_vector ( metadata . as_slice ( ) ) ) ;
209+ let metadata = Some ( fbb. create_vector ( metadata_bytes . as_slice ( ) ) ) ;
220210
221211 // Assign buffer indices for all child arrays.
222212 let nbuffers = u16:: try_from ( self . array . nbuffers ( ) )
@@ -718,6 +708,7 @@ mod tests {
718708 use crate :: dtype:: Nullability ;
719709 use crate :: flatbuffers as fba;
720710 use crate :: session:: ArraySession ;
711+ use crate :: session:: ArraySessionExt ;
721712
722713 static SESSION : LazyLock < VortexSession > = LazyLock :: new ( VortexSession :: empty) ;
723714
@@ -778,12 +769,13 @@ mod tests {
778769 decoded. nth_child( 0 ) . unwrap( ) . encoding_id( ) . as_ref( ) ,
779770 "vortex.test.foreign_child"
780771 ) ;
781- assert_eq ! ( decoded. metadata( & SESSION ) . unwrap( ) . unwrap( ) , vec![ 1 , 2 , 3 ] ) ;
782772 assert_eq ! (
783- decoded
784- . nth_child( 0 )
785- . unwrap( )
786- . metadata( & SESSION )
773+ SESSION . array_serialize( & decoded) . unwrap( ) . unwrap( ) ,
774+ vec![ 1 , 2 , 3 ]
775+ ) ;
776+ assert_eq ! (
777+ SESSION
778+ . array_serialize( & decoded. nth_child( 0 ) . unwrap( ) )
787779 . unwrap( )
788780 . unwrap( ) ,
789781 vec![ 9 ]
0 commit comments