From 4537ac7be7cbe2276d41ccd0e3074861c59fb466 Mon Sep 17 00:00:00 2001 From: Joe Isaacs Date: Tue, 23 Jul 2024 10:33:31 +0100 Subject: [PATCH 1/2] Remove some vortex mem allocations in "zero-copy" memory transformations --- vortex-array/src/array/bool/mod.rs | 2 +- vortex-array/src/implementation.rs | 15 ++++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/vortex-array/src/array/bool/mod.rs b/vortex-array/src/array/bool/mod.rs index 4bcb9451677..a5a5c13d5a7 100644 --- a/vortex-array/src/array/bool/mod.rs +++ b/vortex-array/src/array/bool/mod.rs @@ -31,7 +31,7 @@ impl BoolArray { pub fn boolean_buffer(&self) -> BooleanBuffer { BooleanBuffer::new( - self.buffer().clone().into(), + self.buffer().clone().into_arrow(), self.metadata().bit_offset, self.len(), ) diff --git a/vortex-array/src/implementation.rs b/vortex-array/src/implementation.rs index e7c24d67328..a1504736cfd 100644 --- a/vortex-array/src/implementation.rs +++ b/vortex-array/src/implementation.rs @@ -2,13 +2,13 @@ use vortex_buffer::Buffer; use vortex_dtype::DType; use vortex_error::{vortex_bail, VortexError, VortexResult}; -use crate::encoding::{ArrayEncoding, ArrayEncodingExt, ArrayEncodingRef, EncodingId, EncodingRef}; -use crate::stats::{ArrayStatistics, Statistics}; -use crate::visitor::ArrayVisitor; use crate::{ - Array, ArrayDType, ArrayData, ArrayMetadata, ArrayTrait, AsArray, GetArrayMetadata, IntoArray, + Array, ArrayData, ArrayDType, ArrayMetadata, ArrayTrait, AsArray, GetArrayMetadata, IntoArray, IntoArrayData, ToArrayData, TryDeserializeArrayMetadata, }; +use crate::encoding::{ArrayEncoding, ArrayEncodingExt, ArrayEncodingRef, EncodingId, EncodingRef}; +use crate::stats::{ArrayStatistics, Statistics}; +use crate::visitor::ArrayVisitor; /// Trait the defines the set of types relating to an array. /// Because it has associated types it can't be used as a trait object. @@ -184,13 +184,14 @@ impl ArrayStatistics for T { impl IntoArrayData for T { fn into_array_data(self) -> ArrayData { - let encoding = self.encoding(); + // TODO: move metadata call `Array::View` match let metadata = self.metadata(); - let stats = self.statistics().to_set(); let array = self.into_array(); match array { Array::Data(d) => d, - Array::View(_) => { + Array::View(ref view) => { + let encoding = view.encoding(); + let stats = view.statistics().to_set(); struct Visitor { buffer: Option, children: Vec, From ffc59f2c93eb6b237ed652a78a0980c9fe51a1c9 Mon Sep 17 00:00:00 2001 From: Joe Isaacs Date: Tue, 23 Jul 2024 11:57:18 +0100 Subject: [PATCH 2/2] fmt --- vortex-array/src/implementation.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/vortex-array/src/implementation.rs b/vortex-array/src/implementation.rs index a1504736cfd..d8b0562a62f 100644 --- a/vortex-array/src/implementation.rs +++ b/vortex-array/src/implementation.rs @@ -2,13 +2,13 @@ use vortex_buffer::Buffer; use vortex_dtype::DType; use vortex_error::{vortex_bail, VortexError, VortexResult}; -use crate::{ - Array, ArrayData, ArrayDType, ArrayMetadata, ArrayTrait, AsArray, GetArrayMetadata, IntoArray, - IntoArrayData, ToArrayData, TryDeserializeArrayMetadata, -}; use crate::encoding::{ArrayEncoding, ArrayEncodingExt, ArrayEncodingRef, EncodingId, EncodingRef}; use crate::stats::{ArrayStatistics, Statistics}; use crate::visitor::ArrayVisitor; +use crate::{ + Array, ArrayDType, ArrayData, ArrayMetadata, ArrayTrait, AsArray, GetArrayMetadata, IntoArray, + IntoArrayData, ToArrayData, TryDeserializeArrayMetadata, +}; /// Trait the defines the set of types relating to an array. /// Because it has associated types it can't be used as a trait object.