MCPcopy Create free account
hub / github.com/apache/arrow-rs / test_dictionary_list_hydration

Function test_dictionary_list_hydration

arrow-flight/src/encode.rs:970–1025  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

968
969 #[tokio::test]
970 async fn test_dictionary_list_hydration() {
971 let mut builder = ListBuilder::new(StringDictionaryBuilder::<UInt16Type>::new());
972
973 builder.append_value(vec![Some("a"), None, Some("b")]);
974
975 let arr1 = builder.finish();
976
977 builder.append_value(vec![Some("c"), None, Some("d")]);
978
979 let arr2 = builder.finish();
980
981 let schema = Arc::new(Schema::new(vec![Field::new_list(
982 "dict_list",
983 Field::new_dictionary("item", DataType::UInt16, DataType::Utf8, true),
984 true,
985 )]));
986
987 let batch1 = RecordBatch::try_new(schema.clone(), vec![Arc::new(arr1)]).unwrap();
988 let batch2 = RecordBatch::try_new(schema.clone(), vec![Arc::new(arr2)]).unwrap();
989
990 let stream = futures::stream::iter(vec![Ok(batch1), Ok(batch2)]);
991
992 let encoder = FlightDataEncoderBuilder::default().build(stream);
993
994 let mut decoder = FlightDataDecoder::new(encoder);
995 let expected_schema = Schema::new(vec![Field::new_list(
996 "dict_list",
997 Field::new_list_field(DataType::Utf8, true),
998 true,
999 )]);
1000
1001 let expected_schema = Arc::new(expected_schema);
1002
1003 let mut expected_arrays = vec![
1004 StringArray::from_iter(vec![Some("a"), None, Some("b")]),
1005 StringArray::from_iter(vec![Some("c"), None, Some("d")]),
1006 ]
1007 .into_iter();
1008
1009 while let Some(decoded) = decoder.next().await {
1010 let decoded = decoded.unwrap();
1011 match decoded.payload {
1012 DecodedPayload::None => {}
1013 DecodedPayload::Schema(s) => assert_eq!(s, expected_schema),
1014 DecodedPayload::RecordBatch(b) => {
1015 assert_eq!(b.schema(), expected_schema);
1016 let expected_array = expected_arrays.next().unwrap();
1017 let list_array =
1018 downcast_array::<ListArray>(b.column_by_name("dict_list").unwrap());
1019 let elem_array = downcast_array::<StringArray>(list_array.value(0).as_ref());
1020
1021 assert_eq!(elem_array, expected_array);
1022 }
1023 }
1024 }
1025 }
1026
1027 #[tokio::test]

Callers

nothing calls this directly

Calls 11

try_newFunction · 0.85
defaultFunction · 0.85
append_valueMethod · 0.45
finishMethod · 0.45
cloneMethod · 0.45
buildMethod · 0.45
into_iterMethod · 0.45
nextMethod · 0.45
column_by_nameMethod · 0.45
as_refMethod · 0.45
valueMethod · 0.45

Tested by

no test coverage detected