(
field: &Field,
size: usize,
null_density: f32,
true_density: f32,
)
| 390 | |
| 391 | #[inline] |
| 392 | fn create_random_map_array( |
| 393 | field: &Field, |
| 394 | size: usize, |
| 395 | null_density: f32, |
| 396 | true_density: f32, |
| 397 | ) -> Result<ArrayRef> { |
| 398 | // Override null density with 0.0 if the array is non-nullable |
| 399 | let map_null_density = match field.is_nullable() { |
| 400 | true => null_density, |
| 401 | false => 0.0, |
| 402 | }; |
| 403 | |
| 404 | let entries_field = match field.data_type() { |
| 405 | DataType::Map(f, _) => f, |
| 406 | _ => { |
| 407 | return Err(ArrowError::InvalidArgumentError(format!( |
| 408 | "Cannot create map array for field {field:?}" |
| 409 | ))); |
| 410 | } |
| 411 | }; |
| 412 | |
| 413 | let (offsets, child_len) = create_random_offsets::<i32>(size, 0, 5); |
| 414 | let offsets = Buffer::from(offsets.to_byte_slice()); |
| 415 | |
| 416 | let entries = create_random_array( |
| 417 | entries_field, |
| 418 | child_len as usize, |
| 419 | null_density, |
| 420 | true_density, |
| 421 | )? |
| 422 | .to_data(); |
| 423 | |
| 424 | let null_buffer = match field.is_nullable() { |
| 425 | true => Some(create_random_null_buffer(size, map_null_density)), |
| 426 | false => None, |
| 427 | }; |
| 428 | |
| 429 | let map_data = unsafe { |
| 430 | ArrayData::new_unchecked( |
| 431 | field.data_type().clone(), |
| 432 | size, |
| 433 | None, |
| 434 | null_buffer, |
| 435 | 0, |
| 436 | vec![offsets], |
| 437 | vec![entries], |
| 438 | ) |
| 439 | }; |
| 440 | Ok(make_array(map_data)) |
| 441 | } |
| 442 | |
| 443 | /// Generate random offsets for list arrays |
| 444 | fn create_random_offsets<T: OffsetSizeTrait + SampleUniform>( |
no test coverage detected