From a58a3eb66be3c2ac7ac46db215fbb95d74522a78 Mon Sep 17 00:00:00 2001 From: Kevin-Li-2025 <2242139@qq.com> Date: Tue, 7 Jul 2026 23:58:59 +0800 Subject: [PATCH 1/2] Fix Flight LargeList schema encoding --- arrow-flight/src/encode.rs | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/arrow-flight/src/encode.rs b/arrow-flight/src/encode.rs index c88ab71ce476..b72e25a9f7c5 100644 --- a/arrow-flight/src/encode.rs +++ b/arrow-flight/src/encode.rs @@ -494,7 +494,7 @@ fn prepare_field_for_flight( field.is_nullable(), ) .with_metadata(field.metadata().clone()), - DataType::LargeList(inner) => Field::new_list( + DataType::LargeList(inner) => Field::new_large_list( field.name(), prepare_field_for_flight(inner, dictionary_tracker, send_dictionaries), field.is_nullable(), @@ -1808,6 +1808,25 @@ mod tests { assert!(got.metadata().contains_key("some_key")); } + #[test] + fn test_large_list_schema_encoded() { + let list_field = + Field::new("item", DataType::Int32, false).with_metadata(HashMap::from([( + "nested".to_owned(), + "metadata".to_owned(), + )])); + let field = Arc::new( + Field::new_large_list("large_list", list_field.clone(), true) + .with_metadata(HashMap::from([("field".to_owned(), "metadata".to_owned())])), + ); + let schema = Schema::new(vec![Arc::clone(&field)]); + let mut dictionary_tracker = DictionaryTracker::new(false); + + let got = prepare_schema_for_flight(&schema, &mut dictionary_tracker, false); + + assert_eq!(got.field(0), field.as_ref()); + } + #[test] fn test_encode_no_column_batch() { let batch = RecordBatch::try_new_with_options( From 91bdde997d4d52dfd19ade67d0e24a8f5a2ef03d Mon Sep 17 00:00:00 2001 From: Kevin-Li-2025 Date: Thu, 23 Jul 2026 17:12:55 +0800 Subject: [PATCH 2/2] test(flight): validate list schema round trip --- arrow-flight/src/encode.rs | 76 ++++++++++++++++++++++++++++++-------- 1 file changed, 60 insertions(+), 16 deletions(-) diff --git a/arrow-flight/src/encode.rs b/arrow-flight/src/encode.rs index 54802ae7a251..810d416d9ae0 100644 --- a/arrow-flight/src/encode.rs +++ b/arrow-flight/src/encode.rs @@ -789,8 +789,8 @@ fn hydrate_dictionary(array: &ArrayRef, data_type: &DataType) -> Result