|
15 | 15 | // specific language governing permissions and limitations |
16 | 16 | // under the License. |
17 | 17 | use arrow::{ |
18 | | - array::{self, Array, ArrayRef, StructArray, make_array}, |
| 18 | + array::{self, Array, ArrayRef, StructArray}, |
19 | 19 | buffer::NullBuffer, |
20 | 20 | compute::CastOptions, |
21 | 21 | datatypes::Field, |
@@ -268,23 +268,8 @@ fn try_perfect_shredding(variant_array: &VariantArray, as_field: &Field) -> Opti |
268 | 268 | // 2. If every row in the `value` column is null |
269 | 269 |
|
270 | 270 | // This is a perfect shredding, where the value is entirely shredded out, |
271 | | - // so we can just return the typed value after merging the accumulated nulls. |
272 | | - let parent_nulls = variant_array.nulls(); |
273 | | - |
274 | | - let target_array = if parent_nulls.is_none() { |
275 | | - typed_value.clone() |
276 | | - } else { |
277 | | - let merged_nulls = NullBuffer::union(parent_nulls, typed_value.nulls()); |
278 | | - let data = typed_value |
279 | | - .to_data() |
280 | | - .into_builder() |
281 | | - .nulls(merged_nulls) |
282 | | - .build() |
283 | | - .ok()?; |
284 | | - make_array(data) |
285 | | - }; |
286 | | - |
287 | | - return Some(target_array); |
| 271 | + // so we can just return the typed value. |
| 272 | + return Some(typed_value.clone()); |
288 | 273 | } |
289 | 274 |
|
290 | 275 | None |
@@ -1071,13 +1056,7 @@ mod test { |
1071 | 1056 | EMPTY_VARIANT_METADATA_BYTES, |
1072 | 1057 | typed_value.len(), |
1073 | 1058 | )); |
1074 | | - VariantArray::from_parts( |
1075 | | - Arc::new(metadata) as ArrayRef, |
1076 | | - None, |
1077 | | - Some(typed_value), |
1078 | | - None, |
1079 | | - ) |
1080 | | - .into() |
| 1059 | + VariantArray::from_parts(Arc::new(metadata), None, Some(typed_value), None).into() |
1081 | 1060 | } |
1082 | 1061 | }; |
1083 | 1062 | } |
@@ -1718,41 +1697,6 @@ mod test { |
1718 | 1697 | ]) |
1719 | 1698 | ); |
1720 | 1699 |
|
1721 | | - #[test] |
1722 | | - fn test_variant_get_perfectly_shredded_binary_preserves_top_level_nulls() { |
1723 | | - let metadata = |
1724 | | - BinaryViewArray::from_iter_values(std::iter::repeat_n(EMPTY_VARIANT_METADATA_BYTES, 3)); |
1725 | | - let typed_value: ArrayRef = Arc::new(BinaryArray::from(vec![ |
1726 | | - Some(b"Apache" as &[u8]), |
1727 | | - Some(b"masked-null" as &[u8]), |
1728 | | - Some(b"Parquet-variant" as &[u8]), |
1729 | | - ])); |
1730 | | - let variant_array: ArrayRef = VariantArray::from_parts( |
1731 | | - Arc::new(metadata) as _, |
1732 | | - None, |
1733 | | - Some(typed_value), |
1734 | | - Some(NullBuffer::from(vec![true, false, true])), |
1735 | | - ) |
1736 | | - .into(); |
1737 | | - |
1738 | | - let result = variant_get( |
1739 | | - &variant_array, |
1740 | | - GetOptions::new().with_as_type(Some(FieldRef::from(Field::new( |
1741 | | - "result", |
1742 | | - DataType::Binary, |
1743 | | - true, |
1744 | | - )))), |
1745 | | - ) |
1746 | | - .unwrap(); |
1747 | | - |
1748 | | - let result = result.as_binary::<i32>(); |
1749 | | - assert_eq!(result.len(), 3); |
1750 | | - assert_eq!(result.null_count(), 1); |
1751 | | - assert_eq!(result.value(0), b"Apache"); |
1752 | | - assert!(result.is_null(1)); |
1753 | | - assert_eq!(result.value(2), b"Parquet-variant"); |
1754 | | - } |
1755 | | - |
1756 | 1700 | /// Return a VariantArray that represents an "all null" variant |
1757 | 1701 | /// for the following example (3 null values): |
1758 | 1702 | /// |
@@ -1781,7 +1725,7 @@ mod test { |
1781 | 1725 | BinaryViewArray::from_iter_values(std::iter::repeat_n(EMPTY_VARIANT_METADATA_BYTES, 3)); |
1782 | 1726 |
|
1783 | 1727 | ArrayRef::from(VariantArray::from_parts( |
1784 | | - Arc::new(metadata) as ArrayRef, |
| 1728 | + Arc::new(metadata), |
1785 | 1729 | None, |
1786 | 1730 | None, |
1787 | 1731 | Some(nulls), |
@@ -1891,8 +1835,8 @@ mod test { |
1891 | 1835 |
|
1892 | 1836 | // Create the main VariantArray |
1893 | 1837 | ArrayRef::from(VariantArray::from_parts( |
1894 | | - Arc::new(metadata_array) as ArrayRef, |
1895 | | - Some(Arc::new(value_array) as ArrayRef), |
| 1838 | + Arc::new(metadata_array), |
| 1839 | + Some(Arc::new(value_array)), |
1896 | 1840 | Some(Arc::new(typed_value_struct)), |
1897 | 1841 | None, |
1898 | 1842 | )) |
@@ -2268,8 +2212,8 @@ mod test { |
2268 | 2212 |
|
2269 | 2213 | // Build final VariantArray |
2270 | 2214 | ArrayRef::from(VariantArray::from_parts( |
2271 | | - Arc::new(metadata_array) as ArrayRef, |
2272 | | - Some(Arc::new(value_array) as ArrayRef), |
| 2215 | + Arc::new(metadata_array), |
| 2216 | + Some(Arc::new(value_array)), |
2273 | 2217 | Some(Arc::new(typed_value_struct)), |
2274 | 2218 | None, |
2275 | 2219 | )) |
@@ -2379,8 +2323,8 @@ mod test { |
2379 | 2323 |
|
2380 | 2324 | // Build final VariantArray |
2381 | 2325 | ArrayRef::from(VariantArray::from_parts( |
2382 | | - Arc::new(metadata_array) as ArrayRef, |
2383 | | - Some(Arc::new(value_array) as ArrayRef), |
| 2326 | + Arc::new(metadata_array), |
| 2327 | + Some(Arc::new(value_array)), |
2384 | 2328 | Some(Arc::new(typed_value_struct)), |
2385 | 2329 | None, |
2386 | 2330 | )) |
@@ -2510,8 +2454,8 @@ mod test { |
2510 | 2454 |
|
2511 | 2455 | // Build final VariantArray |
2512 | 2456 | ArrayRef::from(VariantArray::from_parts( |
2513 | | - Arc::new(metadata_array) as ArrayRef, |
2514 | | - Some(Arc::new(value_array) as ArrayRef), |
| 2457 | + Arc::new(metadata_array), |
| 2458 | + Some(Arc::new(value_array)), |
2515 | 2459 | Some(Arc::new(typed_value_struct)), |
2516 | 2460 | None, |
2517 | 2461 | )) |
@@ -3324,7 +3268,7 @@ mod test { |
3324 | 3268 |
|
3325 | 3269 | // Build final VariantArray with top-level nulls |
3326 | 3270 | ArrayRef::from(VariantArray::from_parts( |
3327 | | - Arc::new(metadata_array) as ArrayRef, |
| 3271 | + Arc::new(metadata_array), |
3328 | 3272 | None, |
3329 | 3273 | Some(Arc::new(typed_value_struct)), |
3330 | 3274 | Some(nulls), |
@@ -3383,7 +3327,7 @@ mod test { |
3383 | 3327 | false, // row 3: top-level NULL |
3384 | 3328 | ]); |
3385 | 3329 | ArrayRef::from(VariantArray::from_parts( |
3386 | | - Arc::new(metadata_array) as ArrayRef, |
| 3330 | + Arc::new(metadata_array), |
3387 | 3331 | None, |
3388 | 3332 | Some(Arc::new(typed_value)), |
3389 | 3333 | Some(nulls), |
@@ -3452,8 +3396,8 @@ mod test { |
3452 | 3396 | // Top-level null is encoded in the main StructArray's null mask |
3453 | 3397 | let variant_nulls = NullBuffer::from(vec![true, true, true, false]); // Row 3 is top-level null |
3454 | 3398 | ArrayRef::from(VariantArray::from_parts( |
3455 | | - Arc::new(metadata_array) as ArrayRef, |
3456 | | - Some(Arc::new(value_array) as ArrayRef), |
| 3399 | + Arc::new(metadata_array), |
| 3400 | + Some(Arc::new(value_array)), |
3457 | 3401 | Some(Arc::new(typed_value_struct)), |
3458 | 3402 | Some(variant_nulls), |
3459 | 3403 | )) |
@@ -4131,7 +4075,7 @@ mod test { |
4131 | 4075 | all_nulls_values.len(), |
4132 | 4076 | )); |
4133 | 4077 | let variant_array: ArrayRef = VariantArray::from_parts( |
4134 | | - Arc::new(metadata) as ArrayRef, |
| 4078 | + Arc::new(metadata), |
4135 | 4079 | None, |
4136 | 4080 | Some(Arc::new(typed_value_struct)), |
4137 | 4081 | None, |
|
0 commit comments