jecsand838 commented on code in PR #8349: URL: https://github.com/apache/arrow-rs/pull/8349#discussion_r2369204566
########## arrow-avro/src/reader/record.rs: ########## @@ -1518,19 +1104,340 @@ impl Decoder { .map_err(|e| ArrowError::ParseError(e.to_string()))?; Arc::new(vals) } - Self::Union(fields, type_ids, offsets, encodings, _, None) => { - flush_union!(fields, type_ids, offsets, encodings) - } - Self::Union(fields, type_ids, offsets, encodings, _, Some(union_resolution)) => { - match &mut union_resolution.kind { - UnionResolvedKind::Both { .. } | UnionResolvedKind::FromSingle { .. } => { - flush_union!(fields, type_ids, offsets, encodings) - } - UnionResolvedKind::ToSingle { target } => target.flush(nulls)?, + Self::Union(u) => u.flush(nulls)?, + }) + } +} + +#[derive(Debug)] +struct DispatchLut { + to_reader: Box<[i16]>, + promotion: Box<[Promotion]>, +} + +impl DispatchLut { + fn from_writer_to_reader(promotion_map: &[Option<(usize, Promotion)>]) -> Self { + let mut to_reader = Vec::with_capacity(promotion_map.len()); + let mut promotion = Vec::with_capacity(promotion_map.len()); + for map in promotion_map { + match *map { + Some((idx, promo)) => { + debug_assert!(idx <= i16::MAX as usize); + to_reader.push(idx as i16); + promotion.push(promo); + } + None => { + to_reader.push(-1); Review Comment: -1 is a sentinel meaning “this writer branch has no corresponding reader branch.” We store it in `DispatchLookupTable`, and `resolve()` interprets any negative entry as `None`, which makes the callers either error or fall back to defaults depending on the plan. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: github-unsubscr...@arrow.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org