|
22 | 22 | use arrow::datatypes::i256; |
23 | 23 | use arrow::{array::ArrayRef, datatypes::DataType}; |
24 | 24 | use arrow_array::{ |
25 | | - new_null_array, BinaryArray, BooleanArray, Date32Array, Date64Array, Decimal128Array, |
26 | | - Decimal256Array, FixedSizeBinaryArray, Float16Array, Float32Array, Float64Array, |
27 | | - Int16Array, Int32Array, Int64Array, Int8Array, LargeBinaryArray, LargeStringArray, |
28 | | - StringArray, Time32MillisecondArray, Time32SecondArray, Time64MicrosecondArray, |
29 | | - Time64NanosecondArray, TimestampMicrosecondArray, TimestampMillisecondArray, |
30 | | - TimestampNanosecondArray, TimestampSecondArray, UInt16Array, UInt32Array, |
31 | | - UInt64Array, UInt8Array, |
| 25 | + new_empty_array, new_null_array, BinaryArray, BooleanArray, Date32Array, Date64Array, |
| 26 | + Decimal128Array, Decimal256Array, FixedSizeBinaryArray, Float16Array, Float32Array, |
| 27 | + Float64Array, Int16Array, Int32Array, Int64Array, Int8Array, LargeBinaryArray, |
| 28 | + LargeStringArray, StringArray, Time32MillisecondArray, Time32SecondArray, |
| 29 | + Time64MicrosecondArray, Time64NanosecondArray, TimestampMicrosecondArray, |
| 30 | + TimestampMillisecondArray, TimestampNanosecondArray, TimestampSecondArray, |
| 31 | + UInt16Array, UInt32Array, UInt64Array, UInt8Array, |
32 | 32 | }; |
33 | 33 | use arrow_schema::{Field, FieldRef, Schema, TimeUnit}; |
34 | 34 | use datafusion_common::{internal_datafusion_err, internal_err, plan_err, Result}; |
@@ -873,6 +873,34 @@ macro_rules! get_data_page_statistics { |
873 | 873 | Decimal128Array::from_iter([<$stat_type_prefix Decimal128DataPageStatsIterator>]::new($iterator).flatten()).with_precision_and_scale(*precision, *scale)?)), |
874 | 874 | Some(DataType::Decimal256(precision, scale)) => Ok(Arc::new( |
875 | 875 | Decimal256Array::from_iter([<$stat_type_prefix Decimal256DataPageStatsIterator>]::new($iterator).flatten()).with_precision_and_scale(*precision, *scale)?)), |
| 876 | + Some(DataType::Time32(unit)) => { |
| 877 | + Ok(match unit { |
| 878 | + TimeUnit::Second => Arc::new(Time32SecondArray::from_iter( |
| 879 | + [<$stat_type_prefix Int32DataPageStatsIterator>]::new($iterator).flatten(), |
| 880 | + )), |
| 881 | + TimeUnit::Millisecond => Arc::new(Time32MillisecondArray::from_iter( |
| 882 | + [<$stat_type_prefix Int32DataPageStatsIterator>]::new($iterator).flatten(), |
| 883 | + )), |
| 884 | + _ => { |
| 885 | + // don't know how to extract statistics, so return an empty array |
| 886 | + new_empty_array(&DataType::Time32(unit.clone())) |
| 887 | + } |
| 888 | + }) |
| 889 | + } |
| 890 | + Some(DataType::Time64(unit)) => { |
| 891 | + Ok(match unit { |
| 892 | + TimeUnit::Microsecond => Arc::new(Time64MicrosecondArray::from_iter( |
| 893 | + [<$stat_type_prefix Int64DataPageStatsIterator>]::new($iterator).flatten(), |
| 894 | + )), |
| 895 | + TimeUnit::Nanosecond => Arc::new(Time64NanosecondArray::from_iter( |
| 896 | + [<$stat_type_prefix Int64DataPageStatsIterator>]::new($iterator).flatten(), |
| 897 | + )), |
| 898 | + _ => { |
| 899 | + // don't know how to extract statistics, so return an empty array |
| 900 | + new_empty_array(&DataType::Time64(unit.clone())) |
| 901 | + } |
| 902 | + }) |
| 903 | + } |
876 | 904 | _ => unimplemented!() |
877 | 905 | } |
878 | 906 | } |
|
0 commit comments