diff --git a/src/array/binary/mutable.rs b/src/array/binary/mutable.rs index c23d91dbe3a..6e1e41ecba0 100644 --- a/src/array/binary/mutable.rs +++ b/src/array/binary/mutable.rs @@ -146,8 +146,8 @@ impl MutableArray for MutableBinaryArray { &self.validity } - fn as_arc(&mut self) -> Arc { - Arc::new(BinaryArray::from_data( + fn as_box(&mut self) -> Box { + Box::new(BinaryArray::from_data( self.data_type.clone(), std::mem::take(&mut self.offsets).into(), std::mem::take(&mut self.values).into(), diff --git a/src/array/boolean/mutable.rs b/src/array/boolean/mutable.rs index 8ab6d01faa1..f40ada23c6a 100644 --- a/src/array/boolean/mutable.rs +++ b/src/array/boolean/mutable.rs @@ -338,8 +338,8 @@ impl MutableArray for MutableBooleanArray { &self.validity } - fn as_arc(&mut self) -> Arc { - Arc::new(BooleanArray::from_data( + fn as_box(&mut self) -> Box { + Box::new(BooleanArray::from_data( self.data_type.clone(), std::mem::take(&mut self.values).into(), std::mem::take(&mut self.validity).map(|x| x.into()), diff --git a/src/array/dictionary/mutable.rs b/src/array/dictionary/mutable.rs index 386857a4a78..0ed8d67a2de 100644 --- a/src/array/dictionary/mutable.rs +++ b/src/array/dictionary/mutable.rs @@ -115,8 +115,8 @@ impl MutableArray for MutableDictio self.keys.validity() } - fn as_arc(&mut self) -> Arc { - Arc::new(DictionaryArray::::from_data( + fn as_box(&mut self) -> Box { + Box::new(DictionaryArray::::from_data( std::mem::take(&mut self.keys).into(), self.values.as_arc(), )) diff --git a/src/array/fixed_size_binary/mutable.rs b/src/array/fixed_size_binary/mutable.rs index cfb020d9072..d8f5ba154bc 100644 --- a/src/array/fixed_size_binary/mutable.rs +++ b/src/array/fixed_size_binary/mutable.rs @@ -1,5 +1,3 @@ -use std::sync::Arc; - use crate::{ array::{Array, MutableArray}, bitmap::MutableBitmap, @@ -173,8 +171,8 @@ impl MutableArray for MutableFixedSizeBinaryArray { &self.validity } - fn as_arc(&mut self) -> Arc { - Arc::new(FixedSizeBinaryArray::from_data( + fn as_box(&mut self) -> Box { + Box::new(FixedSizeBinaryArray::from_data( DataType::FixedSizeBinary(self.size as i32), std::mem::take(&mut self.values).into(), std::mem::take(&mut self.validity).map(|x| x.into()), diff --git a/src/array/fixed_size_list/mutable.rs b/src/array/fixed_size_list/mutable.rs index 73a9ff21ed8..fa4721f254e 100644 --- a/src/array/fixed_size_list/mutable.rs +++ b/src/array/fixed_size_list/mutable.rs @@ -1,5 +1,3 @@ -use std::sync::Arc; - use crate::{ array::{ Array, MutableArray, MutableBinaryArray, MutablePrimitiveArray, MutableUtf8Array, Offset, @@ -69,8 +67,8 @@ impl MutableArray for MutableFixedSizeListArray { &self.validity } - fn as_arc(&mut self) -> Arc { - Arc::new(FixedSizeListArray::from_data( + fn as_box(&mut self) -> Box { + Box::new(FixedSizeListArray::from_data( self.data_type.clone(), self.values.as_arc(), std::mem::take(&mut self.validity).map(|x| x.into()), diff --git a/src/array/list/mutable.rs b/src/array/list/mutable.rs index 80a846b8e8d..6dd18f6ccad 100644 --- a/src/array/list/mutable.rs +++ b/src/array/list/mutable.rs @@ -177,8 +177,8 @@ impl MutableArray for MutableListArray Arc { - Arc::new(ListArray::from_data( + fn as_box(&mut self) -> Box { + Box::new(ListArray::from_data( self.data_type.clone(), std::mem::take(&mut self.offsets).into(), self.values.as_arc(), diff --git a/src/array/mod.rs b/src/array/mod.rs index 5dbadb28846..a4d6e92bd75 100644 --- a/src/array/mod.rs +++ b/src/array/mod.rs @@ -113,8 +113,13 @@ pub trait MutableArray: std::fmt::Debug { /// The optional validity of the array. fn validity(&self) -> &Option; - /// Convert itself to an (immutable) [`Array`]. - fn as_arc(&mut self) -> Arc; + /// Convert itself to an (immutable) ['Array']. + fn as_box(&mut self) -> Box; + + /// Convert itself to an (immutable) atomically reference counted [`Array`]. + fn as_arc(&mut self) -> Arc { + self.as_box().into() + } /// Convert to `Any`, to enable dynamic casting. fn as_any(&self) -> &dyn Any; diff --git a/src/array/primitive/mutable.rs b/src/array/primitive/mutable.rs index 64d8c245abb..f63f14057ed 100644 --- a/src/array/primitive/mutable.rs +++ b/src/array/primitive/mutable.rs @@ -326,8 +326,8 @@ impl MutableArray for MutablePrimitiveArray { &self.validity } - fn as_arc(&mut self) -> Arc { - Arc::new(PrimitiveArray::from_data( + fn as_box(&mut self) -> Box { + Box::new(PrimitiveArray::from_data( self.data_type.clone(), std::mem::take(&mut self.values).into(), std::mem::take(&mut self.validity).map(|x| x.into()), diff --git a/src/array/utf8/mutable.rs b/src/array/utf8/mutable.rs index ab1bb0744f1..3767f1a4eef 100644 --- a/src/array/utf8/mutable.rs +++ b/src/array/utf8/mutable.rs @@ -187,8 +187,8 @@ impl MutableArray for MutableUtf8Array { &self.validity } - fn as_arc(&mut self) -> Arc { - Arc::new(Utf8Array::from_data( + fn as_box(&mut self) -> Box { + Box::new(Utf8Array::from_data( Self::default_data_type(), std::mem::take(&mut self.offsets).into(), std::mem::take(&mut self.values).into(),