diff --git a/vortex-layout/src/layouts/struct_/reader.rs b/vortex-layout/src/layouts/struct_/reader.rs index ab03a4624fa..18a14a2c97b 100644 --- a/vortex-layout/src/layouts/struct_/reader.rs +++ b/vortex-layout/src/layouts/struct_/reader.rs @@ -82,17 +82,17 @@ impl StructReader { .collect() }); - let mut dtypes: Vec = struct_dt.fields().collect(); - let mut names: Vec> = struct_dt - .names() - .iter() - .map(|x| Arc::clone(x.inner())) - .collect(); - - if layout.dtype.is_nullable() { - dtypes.insert(0, DType::Bool(Nullability::NonNullable)); - names.insert(0, Arc::from("validity")); + let nullable = layout.dtype.is_nullable(); + let extra = nullable as usize; + + let mut dtypes: Vec = Vec::with_capacity(struct_dt.nfields() + extra); + let mut names: Vec> = Vec::with_capacity(struct_dt.nfields() + extra); + if nullable { + dtypes.push(DType::Bool(Nullability::NonNullable)); + names.push(Arc::from("validity")); } + dtypes.extend(struct_dt.fields()); + names.extend(struct_dt.names().iter().map(|x| Arc::clone(x.inner()))); let lazy_children = LazyReaderChildren::new( Arc::clone(&layout.children),