@@ -19,7 +19,6 @@ use std::fmt;
1919use std:: sync:: Arc ;
2020use std:: { any:: Any , convert:: TryFrom } ;
2121
22- use super :: ArrayDataRef ;
2322use super :: * ;
2423use crate :: array:: equal_json:: JsonEqual ;
2524use crate :: buffer:: { Buffer , MutableBuffer } ;
@@ -57,11 +56,13 @@ pub trait Array: fmt::Debug + Send + Sync + JsonEqual {
5756 /// ```
5857 fn as_any ( & self ) -> & Any ;
5958
60- /// Returns a reference-counted pointer to the underlying data of this array.
61- fn data ( & self ) -> ArrayDataRef ;
59+ /// Returns a reference to the underlying data of this array.
60+ fn data ( & self ) -> & ArrayData ;
6261
63- /// Returns a borrowed & reference-counted pointer to the underlying data of this array.
64- fn data_ref ( & self ) -> & ArrayDataRef ;
62+ /// Returns a reference-counted pointer to the underlying data of this array.
63+ fn data_ref ( & self ) -> & ArrayData {
64+ self . data ( )
65+ }
6566
6667 /// Returns a reference to the [`DataType`](crate::datatypes::DataType) of this array.
6768 ///
@@ -93,7 +94,7 @@ pub trait Array: fmt::Debug + Send + Sync + JsonEqual {
9394 /// assert_eq!(array_slice.as_ref(), &Int32Array::from(vec![2, 3, 4]));
9495 /// ```
9596 fn slice ( & self , offset : usize , length : usize ) -> ArrayRef {
96- make_array ( Arc :: new ( self . data_ref ( ) . as_ref ( ) . slice ( offset, length) ) )
97+ make_array ( self . data_ref ( ) . slice ( offset, length) )
9798 }
9899
99100 /// Returns the length (i.e., number of elements) of this array.
@@ -206,7 +207,7 @@ pub trait Array: fmt::Debug + Send + Sync + JsonEqual {
206207 fn to_raw (
207208 & self ,
208209 ) -> Result < ( * const ffi:: FFI_ArrowArray , * const ffi:: FFI_ArrowSchema ) > {
209- let data = self . data ( ) . as_ref ( ) . clone ( ) ;
210+ let data = self . data ( ) . clone ( ) ;
210211 let array = ffi:: ArrowArray :: try_from ( data) ?;
211212 Ok ( ffi:: ArrowArray :: into_raw ( array) )
212213 }
@@ -217,7 +218,7 @@ pub type ArrayRef = Arc<Array>;
217218
218219/// Constructs an array using the input `data`.
219220/// Returns a reference-counted `Array` instance.
220- pub fn make_array ( data : ArrayDataRef ) -> ArrayRef {
221+ pub fn make_array ( data : ArrayData ) -> ArrayRef {
221222 match data. data_type ( ) {
222223 DataType :: Boolean => Arc :: new ( BooleanArray :: from ( data) ) as ArrayRef ,
223224 DataType :: Int8 => Arc :: new ( Int8Array :: from ( data) ) as ArrayRef ,
@@ -325,7 +326,7 @@ pub fn make_array(data: ArrayDataRef) -> ArrayRef {
325326/// Creates a new empty array
326327pub fn new_empty_array ( data_type : & DataType ) -> ArrayRef {
327328 let data = ArrayData :: new_empty ( data_type) ;
328- make_array ( Arc :: new ( data) )
329+ make_array ( data)
329330}
330331/// Creates a new array of `data_type` of length `length` filled entirely of `NULL` values
331332pub fn new_null_array ( data_type : & DataType , length : usize ) -> ArrayRef {
@@ -334,15 +335,15 @@ pub fn new_null_array(data_type: &DataType, length: usize) -> ArrayRef {
334335 DataType :: Null => Arc :: new ( NullArray :: new ( length) ) ,
335336 DataType :: Boolean => {
336337 let null_buf: Buffer = MutableBuffer :: new_null ( length) . into ( ) ;
337- make_array ( Arc :: new ( ArrayData :: new (
338+ make_array ( ArrayData :: new (
338339 data_type. clone ( ) ,
339340 length,
340341 Some ( length) ,
341342 Some ( null_buf. clone ( ) ) ,
342343 0 ,
343344 vec ! [ null_buf] ,
344345 vec ! [ ] ,
345- ) ) )
346+ ) )
346347 }
347348 DataType :: Int8 => new_null_sized_array :: < Int8Type > ( data_type, length) ,
348349 DataType :: UInt8 => new_null_sized_array :: < UInt8Type > ( data_type, length) ,
@@ -371,15 +372,15 @@ pub fn new_null_array(data_type: &DataType, length: usize) -> ArrayRef {
371372 new_null_sized_array :: < IntervalDayTimeType > ( data_type, length)
372373 }
373374 } ,
374- DataType :: FixedSizeBinary ( value_len) => make_array ( Arc :: new ( ArrayData :: new (
375+ DataType :: FixedSizeBinary ( value_len) => make_array ( ArrayData :: new (
375376 data_type. clone ( ) ,
376377 length,
377378 Some ( length) ,
378379 Some ( MutableBuffer :: new_null ( length) . into ( ) ) ,
379380 0 ,
380381 vec ! [ Buffer :: from( vec![ 0u8 ; * value_len as usize * length] ) ] ,
381382 vec ! [ ] ,
382- ) ) ) ,
383+ ) ) ,
383384 DataType :: Binary | DataType :: Utf8 => {
384385 new_null_binary_array :: < i32 > ( data_type, length)
385386 }
@@ -392,21 +393,20 @@ pub fn new_null_array(data_type: &DataType, length: usize) -> ArrayRef {
392393 DataType :: LargeList ( field) => {
393394 new_null_list_array :: < i64 > ( data_type, field. data_type ( ) , length)
394395 }
395- DataType :: FixedSizeList ( field, value_len) => {
396- make_array ( Arc :: new ( ArrayData :: new (
397- data_type. clone ( ) ,
398- length,
399- Some ( length) ,
400- Some ( MutableBuffer :: new_null ( length) . into ( ) ) ,
401- 0 ,
402- vec ! [ ] ,
403- vec ! [
404- new_null_array( field. data_type( ) , * value_len as usize * length)
405- . data( ) ,
406- ] ,
407- ) ) )
408- }
409- DataType :: Struct ( fields) => make_array ( Arc :: new ( ArrayData :: new (
396+ DataType :: FixedSizeList ( field, value_len) => make_array ( ArrayData :: new (
397+ data_type. clone ( ) ,
398+ length,
399+ Some ( length) ,
400+ Some ( MutableBuffer :: new_null ( length) . into ( ) ) ,
401+ 0 ,
402+ vec ! [ ] ,
403+ vec ! [
404+ new_null_array( field. data_type( ) , * value_len as usize * length)
405+ . data( )
406+ . clone( ) ,
407+ ] ,
408+ ) ) ,
409+ DataType :: Struct ( fields) => make_array ( ArrayData :: new (
410410 data_type. clone ( ) ,
411411 length,
412412 Some ( length) ,
@@ -415,22 +415,22 @@ pub fn new_null_array(data_type: &DataType, length: usize) -> ArrayRef {
415415 vec ! [ ] ,
416416 fields
417417 . iter ( )
418- . map ( |field| Arc :: new ( ArrayData :: new_empty ( field. data_type ( ) ) ) )
418+ . map ( |field| ArrayData :: new_empty ( field. data_type ( ) ) )
419419 . collect ( ) ,
420- ) ) ) ,
420+ ) ) ,
421421 DataType :: Union ( _) => {
422422 unimplemented ! ( "Creating null Union array not yet supported" )
423423 }
424424 DataType :: Dictionary ( _, value) => {
425- make_array ( Arc :: new ( ArrayData :: new (
425+ make_array ( ArrayData :: new (
426426 data_type. clone ( ) ,
427427 length,
428428 Some ( length) ,
429429 Some ( MutableBuffer :: new_null ( length) . into ( ) ) ,
430430 0 ,
431431 vec ! [ MutableBuffer :: new( 0 ) . into( ) ] , // values are empty
432- vec ! [ new_empty_array( value. as_ref( ) ) . data( ) ] ,
433- ) ) )
432+ vec ! [ new_empty_array( value. as_ref( ) ) . data( ) . clone ( ) ] ,
433+ ) )
434434 }
435435 DataType :: Decimal ( _, _) => {
436436 unimplemented ! ( "Creating null Decimal array not yet supported" )
@@ -444,7 +444,7 @@ fn new_null_list_array<OffsetSize: OffsetSizeTrait>(
444444 child_data_type : & DataType ,
445445 length : usize ,
446446) -> ArrayRef {
447- make_array ( Arc :: new ( ArrayData :: new (
447+ make_array ( ArrayData :: new (
448448 data_type. clone ( ) ,
449449 length,
450450 Some ( length) ,
@@ -453,16 +453,16 @@ fn new_null_list_array<OffsetSize: OffsetSizeTrait>(
453453 vec ! [ Buffer :: from(
454454 vec![ OffsetSize :: zero( ) ; length + 1 ] . to_byte_slice( ) ,
455455 ) ] ,
456- vec ! [ Arc :: new ( ArrayData :: new_empty( child_data_type) ) ] ,
457- ) ) )
456+ vec ! [ ArrayData :: new_empty( child_data_type) ] ,
457+ ) )
458458}
459459
460460#[ inline]
461461fn new_null_binary_array < OffsetSize : OffsetSizeTrait > (
462462 data_type : & DataType ,
463463 length : usize ,
464464) -> ArrayRef {
465- make_array ( Arc :: new ( ArrayData :: new (
465+ make_array ( ArrayData :: new (
466466 data_type. clone ( ) ,
467467 length,
468468 Some ( length) ,
@@ -473,23 +473,23 @@ fn new_null_binary_array<OffsetSize: OffsetSizeTrait>(
473473 MutableBuffer :: new( 0 ) . into( ) ,
474474 ] ,
475475 vec ! [ ] ,
476- ) ) )
476+ ) )
477477}
478478
479479#[ inline]
480480fn new_null_sized_array < T : ArrowPrimitiveType > (
481481 data_type : & DataType ,
482482 length : usize ,
483483) -> ArrayRef {
484- make_array ( Arc :: new ( ArrayData :: new (
484+ make_array ( ArrayData :: new (
485485 data_type. clone ( ) ,
486486 length,
487487 Some ( length) ,
488488 Some ( MutableBuffer :: new_null ( length) . into ( ) ) ,
489489 0 ,
490490 vec ! [ Buffer :: from( vec![ 0u8 ; length * T :: get_byte_width( ) ] ) ] ,
491491 vec ! [ ] ,
492- ) ) )
492+ ) )
493493}
494494
495495/// Creates a new array from two FFI pointers. Used to import arrays from the C Data Interface
@@ -501,7 +501,7 @@ pub unsafe fn make_array_from_raw(
501501 schema : * const ffi:: FFI_ArrowSchema ,
502502) -> Result < ArrayRef > {
503503 let array = ffi:: ArrowArray :: try_from_raw ( array, schema) ?;
504- let data = Arc :: new ( ArrayData :: try_from ( array) ?) ;
504+ let data = ArrayData :: try_from ( array) ?;
505505 Ok ( make_array ( data) )
506506}
507507// Helper function for printing potentially long arrays.
0 commit comments