@@ -272,28 +272,29 @@ impl From<MapArray> for ArrayData {
272272
273273impl MapArray {
274274 fn try_new_from_array_data ( data : ArrayData ) -> Result < Self , ArrowError > {
275- if !matches ! ( data. data_type( ) , DataType :: Map ( _, _) ) {
275+ let ( data_type, len, nulls, offset, mut buffers, mut child_data) = data. into_parts ( ) ;
276+
277+ if !matches ! ( data_type, DataType :: Map ( _, _) ) {
276278 return Err ( ArrowError :: InvalidArgumentError ( format ! (
277- "MapArray expected ArrayData with DataType::Map got {}" ,
278- data. data_type( )
279+ "MapArray expected ArrayData with DataType::Map got {data_type}" ,
279280 ) ) ) ;
280281 }
281282
282- if data . buffers ( ) . len ( ) != 1 {
283+ if buffers. len ( ) != 1 {
283284 return Err ( ArrowError :: InvalidArgumentError ( format ! (
284285 "MapArray data should contain a single buffer only (value offsets), had {}" ,
285- data . len( )
286+ buffers . len( ) ,
286287 ) ) ) ;
287288 }
289+ let buffer = buffers. pop ( ) . expect ( "checked above" ) ;
288290
289- if data . child_data ( ) . len ( ) != 1 {
291+ if child_data. len ( ) != 1 {
290292 return Err ( ArrowError :: InvalidArgumentError ( format ! (
291293 "MapArray should contain a single child array (values array), had {}" ,
292- data . child_data( ) . len( )
294+ child_data. len( )
293295 ) ) ) ;
294296 }
295-
296- let entries = data. child_data ( ) [ 0 ] . clone ( ) ;
297+ let entries = child_data. pop ( ) . expect ( "checked above" ) ;
297298
298299 if let DataType :: Struct ( fields) = entries. data_type ( ) {
299300 if fields. len ( ) != 2 {
@@ -312,11 +313,11 @@ impl MapArray {
312313
313314 // SAFETY:
314315 // ArrayData is valid, and verified type above
315- let value_offsets = unsafe { get_offsets ( & data ) } ;
316+ let value_offsets = unsafe { get_offsets ( buffer , offset , len ) } ;
316317
317318 Ok ( Self {
318- data_type : data . data_type ( ) . clone ( ) ,
319- nulls : data . nulls ( ) . cloned ( ) ,
319+ data_type,
320+ nulls,
320321 entries,
321322 value_offsets,
322323 } )
0 commit comments