in crates/iceberg/src/avro/schema.rs [934:1068]
fn test_schema_with_array_map() {
let avro_schema = {
AvroSchema::parse_str(
r#"
{
"type": "record",
"name": "avro_schema",
"fields": [
{
"name": "optional",
"type": {
"type": "array",
"items": {
"type": "record",
"name": "k102_v103",
"fields": [
{
"name": "key",
"type": "boolean",
"field-id": 102
},
{
"name": "value",
"type": ["null", "boolean"],
"field-id": 103
}
]
},
"default": [],
"element-id": 101,
"logicalType": "map"
},
"field-id": 100
},{
"name": "required",
"type": {
"type": "array",
"items": {
"type": "record",
"name": "k105_v106",
"fields": [
{
"name": "key",
"type": "boolean",
"field-id": 105
},
{
"name": "value",
"type": "boolean",
"field-id": 106
}
]
},
"default": [],
"logicalType": "map"
},
"field-id": 104
}, {
"name": "string_map",
"type": {
"type": "map",
"values": ["null", "long"],
"key-id": 108,
"value-id": 109
},
"field-id": 107
}
]
}
"#,
)
.unwrap()
};
let iceberg_schema = {
Schema::builder()
.with_fields(vec![
Arc::new(NestedField::required(
100,
"optional",
Type::Map(MapType {
key_field: NestedField::map_key_element(
102,
PrimitiveType::Boolean.into(),
)
.into(),
value_field: NestedField::map_value_element(
103,
PrimitiveType::Boolean.into(),
false,
)
.into(),
}),
)),
Arc::new(NestedField::required(
104,
"required",
Type::Map(MapType {
key_field: NestedField::map_key_element(
105,
PrimitiveType::Boolean.into(),
)
.into(),
value_field: NestedField::map_value_element(
106,
PrimitiveType::Boolean.into(),
true,
)
.into(),
}),
)),
Arc::new(NestedField::required(
107,
"string_map",
Type::Map(MapType {
key_field: NestedField::map_key_element(
108,
PrimitiveType::String.into(),
)
.into(),
value_field: NestedField::map_value_element(
109,
PrimitiveType::Long.into(),
false,
)
.into(),
}),
)),
])
.build()
.unwrap()
};
check_schema_conversion(avro_schema, iceberg_schema);
}