Creates map array from provided keys, values and entry_offsets.
(
keys: impl Iterator<Item = &'a str>,
values: &dyn Array,
entry_offsets: &[u32],
)
| 325 | |
| 326 | /// Creates map array from provided keys, values and entry_offsets. |
| 327 | pub fn new_from_strings<'a>( |
| 328 | keys: impl Iterator<Item = &'a str>, |
| 329 | values: &dyn Array, |
| 330 | entry_offsets: &[u32], |
| 331 | ) -> Result<Self, ArrowError> { |
| 332 | let entry_offsets_buffer = Buffer::from(entry_offsets.to_byte_slice()); |
| 333 | let keys_data = StringArray::from_iter_values(keys); |
| 334 | |
| 335 | let keys_field = Arc::new(Field::new("keys", DataType::Utf8, false)); |
| 336 | let values_field = Arc::new(Field::new( |
| 337 | "values", |
| 338 | values.data_type().clone(), |
| 339 | values.null_count() > 0, |
| 340 | )); |
| 341 | |
| 342 | let entry_struct = StructArray::from(vec![ |
| 343 | (keys_field, Arc::new(keys_data) as ArrayRef), |
| 344 | (values_field, make_array(values.to_data())), |
| 345 | ]); |
| 346 | |
| 347 | let map_data_type = DataType::Map( |
| 348 | Arc::new(Field::new( |
| 349 | "entries", |
| 350 | entry_struct.data_type().clone(), |
| 351 | false, |
| 352 | )), |
| 353 | false, |
| 354 | ); |
| 355 | let map_data = ArrayData::builder(map_data_type) |
| 356 | .len(entry_offsets.len() - 1) |
| 357 | .add_buffer(entry_offsets_buffer) |
| 358 | .add_child_data(entry_struct.into_data()) |
| 359 | .build()?; |
| 360 | |
| 361 | Ok(MapArray::from(map_data)) |
| 362 | } |
| 363 | } |
| 364 | |
| 365 | /// SAFETY: Correctly implements the contract of Arrow Arrays |
nothing calls this directly
no test coverage detected