Skip to content

Commit 9c828c6

Browse files
jecsand838scovich
andcommitted
Update arrow-avro/src/reader/mod.rs
Co-authored-by: Ryan Johnson <[email protected]>
1 parent 4f734e2 commit 9c828c6

File tree

1 file changed

+16
-12
lines changed

1 file changed

+16
-12
lines changed

arrow-avro/src/reader/mod.rs

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ impl Decoder {
242242
) -> Result<Option<usize>, ArrowError> {
243243
// Need enough bytes to get fingerprint (next N bytes)
244244
let Some(fingerprint_bytes) = buf.get(..N) else {
245-
return Ok(None); // Get more bytes
245+
return Ok(None); // Insufficient bytes
246246
};
247247
// SAFETY: length checked above.
248248
let new_fingerprint = fingerprint_from(fingerprint_bytes.try_into().unwrap());
@@ -279,18 +279,22 @@ impl Decoder {
279279
"Unknown fingerprint: {new_fingerprint:?}"
280280
)));
281281
};
282-
let Some(ref reader_schema) = self.reader_schema else {
283-
return Err(ArrowError::ParseError(
284-
"Reader schema unavailable for resolution".into(),
285-
));
282+
// If a reader schema was supplied, perform writer-to-reader resolution.
283+
// Otherwise, fall back to using the writer schema verbatim.
284+
let avro_field = if let Some(reader_schema) = &self.reader_schema {
285+
AvroField::resolve_from_writer_and_reader(
286+
writer_schema,
287+
reader_schema,
288+
self.utf8_view,
289+
self.strict_mode,
290+
)?
291+
} else {
292+
AvroFieldBuilder::new(writer_schema)
293+
.with_utf8view(self.utf8_view)
294+
.with_strict_mode(self.strict_mode)
295+
.build()?
286296
};
287-
let resolved = AvroField::resolve_from_writer_and_reader(
288-
writer_schema,
289-
reader_schema,
290-
self.utf8_view,
291-
self.strict_mode,
292-
)?;
293-
RecordDecoder::try_new_with_options(resolved.data_type(), self.utf8_view)
297+
RecordDecoder::try_new_with_options(avro_field.data_type(), self.utf8_view)
294298
}
295299

296300
/// Produce a `RecordBatch` if at least one row is fully decoded, returning

0 commit comments

Comments
 (0)