()
| 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] |
nothing calls this directly
no test coverage detected