(self)
| 490 | /// its keys and values if the underlying data buffer is not shared by others. |
| 491 | #[allow(clippy::result_large_err)] |
| 492 | pub fn into_primitive_dict_builder<V>(self) -> Result<PrimitiveDictionaryBuilder<K, V>, Self> |
| 493 | where |
| 494 | V: ArrowPrimitiveType, |
| 495 | { |
| 496 | if !self.value_type().is_primitive() { |
| 497 | return Err(self); |
| 498 | } |
| 499 | |
| 500 | let key_array = self.keys().clone(); |
| 501 | let value_array = self.values().as_primitive::<V>().clone(); |
| 502 | |
| 503 | drop(self.keys); |
| 504 | drop(self.values); |
| 505 | |
| 506 | let key_builder = key_array.into_builder(); |
| 507 | let value_builder = value_array.into_builder(); |
| 508 | |
| 509 | match (key_builder, value_builder) { |
| 510 | (Ok(key_builder), Ok(value_builder)) => Ok(unsafe { |
| 511 | PrimitiveDictionaryBuilder::new_from_builders(key_builder, value_builder) |
| 512 | }), |
| 513 | (Err(key_array), Ok(mut value_builder)) => { |
| 514 | Err(Self::try_new(key_array, Arc::new(value_builder.finish())).unwrap()) |
| 515 | } |
| 516 | (Ok(mut key_builder), Err(value_array)) => { |
| 517 | Err(Self::try_new(key_builder.finish(), Arc::new(value_array)).unwrap()) |
| 518 | } |
| 519 | (Err(key_array), Err(value_array)) => { |
| 520 | Err(Self::try_new(key_array, Arc::new(value_array)).unwrap()) |
| 521 | } |
| 522 | } |
| 523 | } |
| 524 | |
| 525 | /// Applies an unary and infallible function to a mutable dictionary array. |
| 526 | /// Mutable dictionary array means that the buffers are not shared with other arrays. |
no test coverage detected