| 1475 | |
| 1476 | #[test] |
| 1477 | fn normalize_nested() { |
| 1478 | // Initialize schema |
| 1479 | let a = Arc::new(Field::new("a", DataType::Int64, true)); |
| 1480 | let b = Arc::new(Field::new("b", DataType::Int64, false)); |
| 1481 | let c = Arc::new(Field::new("c", DataType::Int64, true)); |
| 1482 | |
| 1483 | let one = Arc::new(Field::new( |
| 1484 | "1", |
| 1485 | DataType::Struct(Fields::from(vec![a.clone(), b.clone(), c.clone()])), |
| 1486 | false, |
| 1487 | )); |
| 1488 | let two = Arc::new(Field::new( |
| 1489 | "2", |
| 1490 | DataType::Struct(Fields::from(vec![a.clone(), b.clone(), c.clone()])), |
| 1491 | true, |
| 1492 | )); |
| 1493 | |
| 1494 | let exclamation = Arc::new(Field::new( |
| 1495 | "!", |
| 1496 | DataType::Struct(Fields::from(vec![one.clone(), two.clone()])), |
| 1497 | false, |
| 1498 | )); |
| 1499 | |
| 1500 | let schema = Schema::new(vec![exclamation.clone()]); |
| 1501 | |
| 1502 | // Initialize fields |
| 1503 | let a_field = Int64Array::from(vec![Some(0), Some(1)]); |
| 1504 | let b_field = Int64Array::from(vec![Some(2), Some(3)]); |
| 1505 | let c_field = Int64Array::from(vec![None, Some(4)]); |
| 1506 | |
| 1507 | let one_field = StructArray::from(vec![ |
| 1508 | (a.clone(), Arc::new(a_field.clone()) as ArrayRef), |
| 1509 | (b.clone(), Arc::new(b_field.clone()) as ArrayRef), |
| 1510 | (c.clone(), Arc::new(c_field.clone()) as ArrayRef), |
| 1511 | ]); |
| 1512 | let two_field = StructArray::from(vec![ |
| 1513 | (a.clone(), Arc::new(a_field.clone()) as ArrayRef), |
| 1514 | (b.clone(), Arc::new(b_field.clone()) as ArrayRef), |
| 1515 | (c.clone(), Arc::new(c_field.clone()) as ArrayRef), |
| 1516 | ]); |
| 1517 | |
| 1518 | let exclamation_field = Arc::new(StructArray::from(vec![ |
| 1519 | (one.clone(), Arc::new(one_field) as ArrayRef), |
| 1520 | (two.clone(), Arc::new(two_field) as ArrayRef), |
| 1521 | ])); |
| 1522 | |
| 1523 | // Normalize top level |
| 1524 | let normalized = |
| 1525 | RecordBatch::try_new(Arc::new(schema.clone()), vec![exclamation_field.clone()]) |
| 1526 | .expect("valid conversion") |
| 1527 | .normalize(".", Some(1)) |
| 1528 | .expect("valid normalization"); |
| 1529 | |
| 1530 | let expected = RecordBatch::try_from_iter_with_nullable(vec![ |
| 1531 | ( |
| 1532 | "!.1", |
| 1533 | Arc::new(StructArray::from(vec![ |
| 1534 | (a.clone(), Arc::new(a_field.clone()) as ArrayRef), |