in crates/iceberg/src/spec/schema/id_reassigner.rs [196:301]
fn test_reassigned_ids_nested() {
let schema = table_schema_nested();
let reassigned_schema = schema
.into_builder()
.with_alias(BiHashMap::from_iter(vec![("bar_alias".to_string(), 2)]))
.with_reassigned_field_ids(0)
.build()
.unwrap();
let expected = Schema::builder()
.with_schema_id(1)
.with_identifier_field_ids(vec![1])
.with_alias(BiHashMap::from_iter(vec![("bar_alias".to_string(), 1)]))
.with_fields(vec![
NestedField::optional(0, "foo", Type::Primitive(PrimitiveType::String)).into(),
NestedField::required(1, "bar", Type::Primitive(PrimitiveType::Int)).into(),
NestedField::optional(2, "baz", Type::Primitive(PrimitiveType::Boolean)).into(),
NestedField::required(
3,
"qux",
Type::List(ListType {
element_field: NestedField::list_element(
7,
Type::Primitive(PrimitiveType::String),
true,
)
.into(),
}),
)
.into(),
NestedField::required(
4,
"quux",
Type::Map(MapType {
key_field: NestedField::map_key_element(
8,
Type::Primitive(PrimitiveType::String),
)
.into(),
value_field: NestedField::map_value_element(
9,
Type::Map(MapType {
key_field: NestedField::map_key_element(
10,
Type::Primitive(PrimitiveType::String),
)
.into(),
value_field: NestedField::map_value_element(
11,
Type::Primitive(PrimitiveType::Int),
true,
)
.into(),
}),
true,
)
.into(),
}),
)
.into(),
NestedField::required(
5,
"location",
Type::List(ListType {
element_field: NestedField::list_element(
12,
Type::Struct(StructType::new(vec![
NestedField::optional(
13,
"latitude",
Type::Primitive(PrimitiveType::Float),
)
.into(),
NestedField::optional(
14,
"longitude",
Type::Primitive(PrimitiveType::Float),
)
.into(),
])),
true,
)
.into(),
}),
)
.into(),
NestedField::optional(
6,
"person",
Type::Struct(StructType::new(vec![
NestedField::optional(15, "name", Type::Primitive(PrimitiveType::String))
.into(),
NestedField::required(16, "age", Type::Primitive(PrimitiveType::Int))
.into(),
])),
)
.into(),
])
.build()
.unwrap();
pretty_assertions::assert_eq!(expected, reassigned_schema);
assert_eq!(reassigned_schema.highest_field_id(), 16);
assert_eq!(reassigned_schema.field_by_id(6).unwrap().name, "person");
assert_eq!(reassigned_schema.field_by_id(16).unwrap().name, "age");
}