()
| 2094 | |
| 2095 | #[test] |
| 2096 | fn test_missing_buffer_metadata_error() { |
| 2097 | use crate::r#gen::Message::*; |
| 2098 | use flatbuffers::FlatBufferBuilder; |
| 2099 | |
| 2100 | let schema = Arc::new(Schema::new(vec![Field::new("col", DataType::Int32, true)])); |
| 2101 | |
| 2102 | // create RecordBatch buffer metadata with invalid buffer count |
| 2103 | // Int32Array needs 2 buffers (validity + data) but we provide only 1 |
| 2104 | let mut fbb = FlatBufferBuilder::new(); |
| 2105 | let nodes = fbb.create_vector(&[FieldNode::new(2, 0)]); |
| 2106 | let buffers = fbb.create_vector(&[crate::Buffer::new(0, 8)]); |
| 2107 | let batch_offset = RecordBatch::create( |
| 2108 | &mut fbb, |
| 2109 | &RecordBatchArgs { |
| 2110 | length: 2, |
| 2111 | nodes: Some(nodes), |
| 2112 | buffers: Some(buffers), |
| 2113 | compression: None, |
| 2114 | variadicBufferCounts: None, |
| 2115 | }, |
| 2116 | ); |
| 2117 | fbb.finish_minimal(batch_offset); |
| 2118 | let batch_bytes = fbb.finished_data().to_vec(); |
| 2119 | let batch = flatbuffers::root::<RecordBatch>(&batch_bytes).unwrap(); |
| 2120 | |
| 2121 | let data_buffer = Buffer::from(vec![0u8; 8]); |
| 2122 | let dictionaries: HashMap<i64, ArrayRef> = HashMap::new(); |
| 2123 | let metadata = MetadataVersion::V5; |
| 2124 | |
| 2125 | let decoder = RecordBatchDecoder::try_new( |
| 2126 | &data_buffer, |
| 2127 | batch, |
| 2128 | schema.clone(), |
| 2129 | &dictionaries, |
| 2130 | &metadata, |
| 2131 | ) |
| 2132 | .unwrap(); |
| 2133 | |
| 2134 | let result = decoder.read_record_batch(); |
| 2135 | |
| 2136 | match result { |
| 2137 | Err(ArrowError::IpcError(msg)) => { |
| 2138 | assert_eq!(msg, "Buffer count mismatched with metadata"); |
| 2139 | } |
| 2140 | other => panic!("unexpected error: {other:?}"), |
| 2141 | } |
| 2142 | } |
| 2143 | |
| 2144 | /// Test that the reader can read legacy files where empty list arrays were written with a 0-byte offsets buffer. |
| 2145 | #[test] |
nothing calls this directly
no test coverage detected