()
| 1262 | |
| 1263 | #[test] |
| 1264 | fn test_cast_list_view_struct() { |
| 1265 | // Build a ListView<Struct{a: Int32}> and cast to |
| 1266 | // ListView<Struct{a: Int64, b: Utf8}>. |
| 1267 | let struct_arr = StructArray::from(vec![( |
| 1268 | arc_field("a", DataType::Int32), |
| 1269 | Arc::new(Int32Array::from(vec![1, 2, 3])) as ArrayRef, |
| 1270 | )]); |
| 1271 | |
| 1272 | let source_field = |
| 1273 | arc_field("item", struct_type(vec![field("a", DataType::Int32)])); |
| 1274 | let target_field = arc_field( |
| 1275 | "item", |
| 1276 | struct_type(vec![ |
| 1277 | field("a", DataType::Int64), |
| 1278 | field("b", DataType::Utf8), |
| 1279 | ]), |
| 1280 | ); |
| 1281 | |
| 1282 | // Two list-view entries: [0..2] and [2..3] |
| 1283 | let list_view = ListViewArray::new( |
| 1284 | source_field, |
| 1285 | ScalarBuffer::from(vec![0i32, 2]), |
| 1286 | ScalarBuffer::from(vec![2i32, 1]), |
| 1287 | Arc::new(struct_arr), |
| 1288 | None, |
| 1289 | ); |
| 1290 | let source_col: ArrayRef = Arc::new(list_view); |
| 1291 | |
| 1292 | let target_type = DataType::ListView(target_field); |
| 1293 | |
| 1294 | let result = |
| 1295 | cast_column(&source_col, &target_type, &DEFAULT_CAST_OPTIONS).unwrap(); |
| 1296 | let result_lv = result.as_any().downcast_ref::<ListViewArray>().unwrap(); |
| 1297 | assert_eq!(result_lv.len(), 2); |
| 1298 | |
| 1299 | let struct_values = result_lv |
| 1300 | .values() |
| 1301 | .as_any() |
| 1302 | .downcast_ref::<StructArray>() |
| 1303 | .unwrap(); |
| 1304 | let a_col = get_column_as!(&struct_values, "a", Int64Array); |
| 1305 | assert_eq!(a_col.values(), &[1, 2, 3]); |
| 1306 | let b_col = get_column_as!(&struct_values, "b", StringArray); |
| 1307 | assert!(b_col.iter().all(|v| v.is_none())); |
| 1308 | } |
| 1309 | |
| 1310 | #[test] |
| 1311 | fn test_requires_nested_struct_cast() { |
nothing calls this directly
no test coverage detected
searching dependent graphs…