in crates/iceberg/src/spec/schema/mod.rs [773:951]
fn test_schema_find_nested() {
let expected_id_to_field: HashMap<i32, NestedField> = HashMap::from([
(
1,
NestedField::optional(1, "foo", Primitive(PrimitiveType::String)),
),
(
2,
NestedField::required(2, "bar", Primitive(PrimitiveType::Int)),
),
(
3,
NestedField::optional(3, "baz", Primitive(PrimitiveType::Boolean)),
),
(
4,
NestedField::required(
4,
"qux",
Type::List(ListType {
element_field: NestedField::list_element(
5,
Type::Primitive(PrimitiveType::String),
true,
)
.into(),
}),
),
),
(
5,
NestedField::required(5, "element", Primitive(PrimitiveType::String)),
),
(
6,
NestedField::required(
6,
"quux",
Map(MapType {
key_field: NestedField::map_key_element(
7,
Primitive(PrimitiveType::String),
)
.into(),
value_field: NestedField::map_value_element(
8,
Map(MapType {
key_field: NestedField::map_key_element(
9,
Primitive(PrimitiveType::String),
)
.into(),
value_field: NestedField::map_value_element(
10,
Primitive(PrimitiveType::Int),
true,
)
.into(),
}),
true,
)
.into(),
}),
),
),
(
7,
NestedField::required(7, "key", Primitive(PrimitiveType::String)),
),
(
8,
NestedField::required(
8,
"value",
Map(MapType {
key_field: NestedField::map_key_element(
9,
Primitive(PrimitiveType::String),
)
.into(),
value_field: NestedField::map_value_element(
10,
Primitive(PrimitiveType::Int),
true,
)
.into(),
}),
),
),
(
9,
NestedField::required(9, "key", Primitive(PrimitiveType::String)),
),
(
10,
NestedField::required(10, "value", Primitive(PrimitiveType::Int)),
),
(
11,
NestedField::required(
11,
"location",
List(ListType {
element_field: NestedField::list_element(
12,
Struct(StructType::new(vec![
NestedField::optional(
13,
"latitude",
Primitive(PrimitiveType::Float),
)
.into(),
NestedField::optional(
14,
"longitude",
Primitive(PrimitiveType::Float),
)
.into(),
])),
true,
)
.into(),
}),
),
),
(
12,
NestedField::list_element(
12,
Struct(StructType::new(vec![
NestedField::optional(13, "latitude", Primitive(PrimitiveType::Float))
.into(),
NestedField::optional(14, "longitude", Primitive(PrimitiveType::Float))
.into(),
])),
true,
),
),
(
13,
NestedField::optional(13, "latitude", Primitive(PrimitiveType::Float)),
),
(
14,
NestedField::optional(14, "longitude", Primitive(PrimitiveType::Float)),
),
(
15,
NestedField::optional(
15,
"person",
Type::Struct(StructType::new(vec![
NestedField::optional(16, "name", Type::Primitive(PrimitiveType::String))
.into(),
NestedField::required(17, "age", Type::Primitive(PrimitiveType::Int))
.into(),
])),
),
),
(
16,
NestedField::optional(16, "name", Type::Primitive(PrimitiveType::String)),
),
(
17,
NestedField::required(17, "age", Type::Primitive(PrimitiveType::Int)),
),
]);
let schema = table_schema_nested();
for (id, field) in expected_id_to_field {
assert_eq!(
Some(&field),
schema.field_by_id(id).map(|f| f.as_ref()),
"Field for {} not match.",
id
);
}
}