in datafusion/datasource-avro/src/avro_to_arrow/arrow_array_reader.rs [1197:1406]
fn test_complex_struct() {
let schema = apache_avro::Schema::parse_str(
r#"
{
"type": "record",
"name": "r1",
"fields": [
{
"name": "dns",
"type": [
"null",
{
"type": "record",
"name": "r13",
"fields": [
{
"name": "answers",
"type": [
"null",
{
"type": "array",
"items": [
"null",
{
"type": "record",
"name": "r292",
"fields": [
{
"name": "class",
"type": ["null", "string"],
"default": null
},
{
"name": "data",
"type": ["null", "string"],
"default": null
},
{
"name": "name",
"type": ["null", "string"],
"default": null
},
{
"name": "ttl",
"type": ["null", "long"],
"default": null
},
{
"name": "type",
"type": ["null", "string"],
"default": null
}
]
}
]
}
],
"default": null
},
{
"name": "header_flags",
"type": [
"null",
{
"type": "array",
"items": ["null", "string"]
}
],
"default": null
},
{
"name": "id",
"type": ["null", "string"],
"default": null
},
{
"name": "op_code",
"type": ["null", "string"],
"default": null
},
{
"name": "question",
"type": [
"null",
{
"type": "record",
"name": "r288",
"fields": [
{
"name": "class",
"type": ["null", "string"],
"default": null
},
{
"name": "name",
"type": ["null", "string"],
"default": null
},
{
"name": "registered_domain",
"type": ["null", "string"],
"default": null
},
{
"name": "subdomain",
"type": ["null", "string"],
"default": null
},
{
"name": "top_level_domain",
"type": ["null", "string"],
"default": null
},
{
"name": "type",
"type": ["null", "string"],
"default": null
}
]
}
],
"default": null
},
{
"name": "resolved_ip",
"type": [
"null",
{
"type": "array",
"items": ["null", "string"]
}
],
"default": null
},
{
"name": "response_code",
"type": ["null", "string"],
"default": null
},
{
"name": "type",
"type": ["null", "string"],
"default": null
}
]
}
],
"default": null
}
]
}"#,
)
.unwrap();
let jv1 = serde_json::json!({
"dns": {
"answers": [
{
"data": "CHNlY3VyaXR5BnVidW50dQMjb20AAAEAAQAAAAgABLl9vic=",
"type": "1"
},
{
"data": "CHNlY3VyaXR5BnVidW50dQNjb20AAAEAABAAAAgABLl9viQ=",
"type": "1"
},
{
"data": "CHNlT3VyaXR5BnVidW50dQNjb20AAAEAAQAAAAgABFu9Wyc=",
"type": "1"
}
],
"question": {
"name": "security.ubuntu.com",
"type": "A"
},
"resolved_ip": [
"67.43.156.1",
"67.43.156.2",
"67.43.156.3"
],
"response_code": "0"
}
});
let r1 = apache_avro::to_value(jv1)
.unwrap()
.resolve(&schema)
.unwrap();
let mut w = apache_avro::Writer::new(&schema, vec![]);
w.append(r1).unwrap();
let bytes = w.into_inner().unwrap();
let mut reader = ReaderBuilder::new()
.read_schema()
.with_batch_size(1)
.build(std::io::Cursor::new(bytes))
.unwrap();
let batch = reader.next().unwrap().unwrap();
assert_eq!(batch.num_rows(), 1);
assert_eq!(batch.num_columns(), 1);
let expected = [
"+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+",
"| dns |",
"+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+",
"| {answers: [{class: , data: CHNlY3VyaXR5BnVidW50dQMjb20AAAEAAQAAAAgABLl9vic=, name: , ttl: , type: 1}, {class: , data: CHNlY3VyaXR5BnVidW50dQNjb20AAAEAABAAAAgABLl9viQ=, name: , ttl: , type: 1}, {class: , data: CHNlT3VyaXR5BnVidW50dQNjb20AAAEAAQAAAAgABFu9Wyc=, name: , ttl: , type: 1}], header_flags: , id: , op_code: , question: {class: , name: security.ubuntu.com, registered_domain: , subdomain: , top_level_domain: , type: A}, resolved_ip: [67.43.156.1, 67.43.156.2, 67.43.156.3], response_code: 0, type: } |",
"+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+",
];
assert_batches_eq!(expected, &[batch]);
}