diff --git a/encodings/datetime-parts/src/array.rs b/encodings/datetime-parts/src/array.rs index b25b506d9..0da004bf2 100644 --- a/encodings/datetime-parts/src/array.rs +++ b/encodings/datetime-parts/src/array.rs @@ -61,7 +61,7 @@ impl DateTimePartsArray { seconds_dtype: seconds.dtype().clone(), subseconds_dtype: subsecond.dtype().clone(), }, - [days, seconds, subsecond].into(), + vec![days, seconds, subsecond].into(), StatsSet::new(), ) } diff --git a/encodings/dict/src/dict.rs b/encodings/dict/src/dict.rs index fc265c690..37bb1b57a 100644 --- a/encodings/dict/src/dict.rs +++ b/encodings/dict/src/dict.rs @@ -36,7 +36,7 @@ impl DictArray { codes_dtype: codes.dtype().clone(), values_len: values.len(), }, - [values, codes].into(), + vec![values, codes].into(), StatsSet::new(), ) } diff --git a/encodings/fastlanes/src/for/mod.rs b/encodings/fastlanes/src/for/mod.rs index 7a037dcd9..ca88cab46 100644 --- a/encodings/fastlanes/src/for/mod.rs +++ b/encodings/fastlanes/src/for/mod.rs @@ -37,7 +37,7 @@ impl FoRArray { reference.dtype().clone(), child.len(), FoRMetadata { reference, shift }, - [child].into(), + vec![child].into(), StatsSet::new(), ) } diff --git a/encodings/fsst/src/array.rs b/encodings/fsst/src/array.rs index 23f004a78..826809c50 100644 --- a/encodings/fsst/src/array.rs +++ b/encodings/fsst/src/array.rs @@ -1,5 +1,3 @@ -use std::sync::Arc; - use fsst::{Decompressor, Symbol}; use serde::{Deserialize, Serialize}; use vortex::array::VarBinArray; @@ -75,7 +73,7 @@ impl FSSTArray { let len = codes.len(); let strings_dtype = codes.dtype().clone(); let uncompressed_lengths_dtype = uncompressed_lengths.dtype().clone(); - let children = Arc::new([symbols, symbol_lengths, codes, uncompressed_lengths]); + let children = vec![symbols, symbol_lengths, codes, uncompressed_lengths]; Self::try_from_parts( dtype, @@ -85,7 +83,7 @@ impl FSSTArray { codes_dtype: strings_dtype, uncompressed_lengths_dtype, }, - children, + children.into(), StatsSet::new(), ) } diff --git a/encodings/zigzag/src/zigzag.rs b/encodings/zigzag/src/zigzag.rs index abd9045bd..b9864e424 100644 --- a/encodings/zigzag/src/zigzag.rs +++ b/encodings/zigzag/src/zigzag.rs @@ -33,7 +33,7 @@ impl ZigZagArray { .with_nullability(encoded_dtype.nullability()); let len = encoded.len(); - let children = [encoded]; + let children = vec![encoded]; Self::try_from_parts(dtype, len, ZigZagMetadata, children.into(), StatsSet::new()) } diff --git a/vortex-array/src/array/constant/mod.rs b/vortex-array/src/array/constant/mod.rs index 055b77d1e..8e7c0eb00 100644 --- a/vortex-array/src/array/constant/mod.rs +++ b/vortex-array/src/array/constant/mod.rs @@ -46,7 +46,7 @@ impl ConstantArray { scalar: scalar.clone(), length, }, - [].into(), + vec![].into(), stats, ) .unwrap_or_else(|err| { diff --git a/vortex-array/src/array/extension/mod.rs b/vortex-array/src/array/extension/mod.rs index 0a1ec8c80..a033bd0bf 100644 --- a/vortex-array/src/array/extension/mod.rs +++ b/vortex-array/src/array/extension/mod.rs @@ -26,7 +26,7 @@ impl ExtensionArray { ExtensionMetadata { storage_dtype: storage.dtype().clone(), }, - [storage].into(), + vec![storage].into(), Default::default(), ) .vortex_expect("Invalid ExtensionArray") diff --git a/vortex-array/src/array/null/mod.rs b/vortex-array/src/array/null/mod.rs index 454e1bdb2..c1de2c8c8 100644 --- a/vortex-array/src/array/null/mod.rs +++ b/vortex-array/src/array/null/mod.rs @@ -1,5 +1,3 @@ -use std::sync::Arc; - use serde::{Deserialize, Serialize}; use vortex_dtype::DType; use vortex_error::{VortexExpect as _, VortexResult}; @@ -26,7 +24,7 @@ impl NullArray { DType::Null, len, NullMetadata { len }, - Arc::new([]), + vec![].into(), StatsSet::nulls(len, &DType::Null), ) .vortex_expect("NullArray::new should never fail!") diff --git a/vortex-array/src/array/sparse/mod.rs b/vortex-array/src/array/sparse/mod.rs index 8878a854a..db13ef875 100644 --- a/vortex-array/src/array/sparse/mod.rs +++ b/vortex-array/src/array/sparse/mod.rs @@ -81,7 +81,7 @@ impl SparseArray { len, fill_value, }, - [indices, values].into(), + vec![indices, values].into(), StatsSet::new(), ) } diff --git a/vortex-array/src/data.rs b/vortex-array/src/data.rs index baf100ce8..00e0938ae 100644 --- a/vortex-array/src/data.rs +++ b/vortex-array/src/data.rs @@ -5,6 +5,7 @@ use vortex_dtype::DType; use vortex_error::{vortex_panic, VortexResult}; use vortex_scalar::Scalar; +use crate::arc_slice::SharedVec; use crate::encoding::EncodingRef; use crate::stats::{Stat, Statistics, StatsSet}; use crate::{Array, ArrayDType, ArrayMetadata, ToArray}; @@ -16,7 +17,7 @@ pub struct ArrayData { len: usize, metadata: Arc, buffer: Option, - children: Arc<[Array]>, + children: SharedVec, stats_map: Arc>, } @@ -27,7 +28,7 @@ impl ArrayData { len: usize, metadata: Arc, buffer: Option, - children: Arc<[Array]>, + children: SharedVec, statistics: StatsSet, ) -> VortexResult { let data = Self { diff --git a/vortex-array/src/implementation.rs b/vortex-array/src/implementation.rs index 6c9413074..7d9cefb7c 100644 --- a/vortex-array/src/implementation.rs +++ b/vortex-array/src/implementation.rs @@ -64,7 +64,7 @@ macro_rules! impl_encoding { dtype: vortex_dtype::DType, len: usize, metadata: [<$Name Metadata>], - children: std::sync::Arc<[$crate::Array]>, + children: $crate::arc_slice::SharedVec<$crate::Array>, stats: $crate::stats::StatsSet, ) -> VortexResult { Ok(Self { typed: $crate::TypedArray::try_from_parts(dtype, len, metadata, None, children, stats)? }) diff --git a/vortex-array/src/lib.rs b/vortex-array/src/lib.rs index 865e6d570..505354df3 100644 --- a/vortex-array/src/lib.rs +++ b/vortex-array/src/lib.rs @@ -35,7 +35,7 @@ use crate::variants::ArrayVariants; use crate::visitor::{AcceptArrayVisitor, ArrayVisitor}; pub mod accessor; -mod arc_slice; +pub mod arc_slice; pub mod array; pub mod arrow; mod canonical; diff --git a/vortex-array/src/typed.rs b/vortex-array/src/typed.rs index c60ad2338..9467bc222 100644 --- a/vortex-array/src/typed.rs +++ b/vortex-array/src/typed.rs @@ -4,6 +4,7 @@ use vortex_buffer::Buffer; use vortex_dtype::DType; use vortex_error::{vortex_bail, vortex_panic, VortexError, VortexResult}; +use crate::arc_slice::SharedVec; use crate::stats::StatsSet; use crate::{Array, ArrayData, ArrayDef, IntoArray, ToArray, TryDeserializeArrayMetadata}; @@ -19,7 +20,7 @@ impl TypedArray { len: usize, metadata: D::Metadata, buffer: Option, - children: Arc<[Array]>, + children: SharedVec, stats: StatsSet, ) -> VortexResult { let array = Array::Data(ArrayData::try_new( diff --git a/vortex-dtype/src/dtype.rs b/vortex-dtype/src/dtype.rs index 0e6e90f3c..ff7693bbf 100644 --- a/vortex-dtype/src/dtype.rs +++ b/vortex-dtype/src/dtype.rs @@ -190,6 +190,7 @@ impl StructDType { } }; + // TODO: do this without the extra allocations. names.push(self.names[idx].clone()); dtypes.push(self.dtypes[idx].clone()); }