@@ -30,7 +30,8 @@ use arrow::datatypes::{
3030use arrow_array:: {
3131 make_array, Array , ArrayRef , BinaryArray , BooleanArray , Date32Array , Date64Array ,
3232 Decimal128Array , Decimal256Array , FixedSizeBinaryArray , Float16Array , Float32Array ,
33- Float64Array , Int16Array , Int32Array , Int64Array , Int8Array , LargeBinaryArray ,
33+ Float64Array , Int16Array , Int32Array , Int64Array , Int8Array , IntervalDayTimeArray ,
34+ IntervalMonthDayNanoArray , IntervalYearMonthArray , LargeBinaryArray ,
3435 LargeStringArray , RecordBatch , StringArray , Time32MillisecondArray ,
3536 Time32SecondArray , Time64MicrosecondArray , Time64NanosecondArray ,
3637 TimestampMicrosecondArray , TimestampMillisecondArray , TimestampNanosecondArray ,
@@ -1072,6 +1073,84 @@ async fn test_dates_64_diff_rg_sizes() {
10721073 . run ( ) ;
10731074}
10741075
1076+ #[ tokio:: test]
1077+ #[ should_panic]
1078+ // Currently this test `should_panic` since statistics for `Intervals`
1079+ // are not supported and `IntervalMonthDayNano` cannot be written
1080+ // to parquet yet.
1081+ // Refer to issue: https://github.com/apache/arrow-rs/issues/5847
1082+ // and https://github.com/apache/arrow-rs/blob/master/parquet/src/arrow/arrow_writer/mod.rs#L747
1083+ async fn test_interval_diff_rg_sizes ( ) {
1084+ // This creates a parquet files of 3 columns:
1085+ // "year_month" --> IntervalYearMonthArray
1086+ // "day_time" --> IntervalDayTimeArray
1087+ // "month_day_nano" --> IntervalMonthDayNanoArray
1088+ //
1089+ // The file is created by 4 record batches (each has a null row)
1090+ // each has 5 rows but then will be split into 2 row groups with size 13, 7
1091+ let reader = TestReader {
1092+ scenario : Scenario :: Interval ,
1093+ row_per_group : 13 ,
1094+ }
1095+ . build ( )
1096+ . await ;
1097+
1098+ // TODO: expected values need to be changed once issue is resolved
1099+ // expected_min: Arc::new(IntervalYearMonthArray::from(vec![
1100+ // IntervalYearMonthType::make_value(1, 10),
1101+ // IntervalYearMonthType::make_value(4, 13),
1102+ // ])),
1103+ // expected_max: Arc::new(IntervalYearMonthArray::from(vec![
1104+ // IntervalYearMonthType::make_value(6, 51),
1105+ // IntervalYearMonthType::make_value(8, 53),
1106+ // ])),
1107+ Test {
1108+ reader : & reader,
1109+ expected_min : Arc :: new ( IntervalYearMonthArray :: from ( vec ! [ None , None ] ) ) ,
1110+ expected_max : Arc :: new ( IntervalYearMonthArray :: from ( vec ! [ None , None ] ) ) ,
1111+ expected_null_counts : UInt64Array :: from ( vec ! [ 2 , 2 ] ) ,
1112+ expected_row_counts : UInt64Array :: from ( vec ! [ 13 , 7 ] ) ,
1113+ column_name : "year_month" ,
1114+ }
1115+ . run ( ) ;
1116+
1117+ // expected_min: Arc::new(IntervalDayTimeArray::from(vec![
1118+ // IntervalDayTimeType::make_value(1, 10),
1119+ // IntervalDayTimeType::make_value(4, 13),
1120+ // ])),
1121+ // expected_max: Arc::new(IntervalDayTimeArray::from(vec![
1122+ // IntervalDayTimeType::make_value(6, 51),
1123+ // IntervalDayTimeType::make_value(8, 53),
1124+ // ])),
1125+ Test {
1126+ reader : & reader,
1127+ expected_min : Arc :: new ( IntervalDayTimeArray :: from ( vec ! [ None , None ] ) ) ,
1128+ expected_max : Arc :: new ( IntervalDayTimeArray :: from ( vec ! [ None , None ] ) ) ,
1129+ expected_null_counts : UInt64Array :: from ( vec ! [ 2 , 2 ] ) ,
1130+ expected_row_counts : UInt64Array :: from ( vec ! [ 13 , 7 ] ) ,
1131+ column_name : "day_time" ,
1132+ }
1133+ . run ( ) ;
1134+
1135+ // expected_min: Arc::new(IntervalMonthDayNanoArray::from(vec![
1136+ // IntervalMonthDayNanoType::make_value(1, 10, 100),
1137+ // IntervalMonthDayNanoType::make_value(4, 13, 103),
1138+ // ])),
1139+ // expected_max: Arc::new(IntervalMonthDayNanoArray::from(vec![
1140+ // IntervalMonthDayNanoType::make_value(6, 51, 501),
1141+ // IntervalMonthDayNanoType::make_value(8, 53, 503),
1142+ // ])),
1143+ Test {
1144+ reader : & reader,
1145+ expected_min : Arc :: new ( IntervalMonthDayNanoArray :: from ( vec ! [ None , None ] ) ) ,
1146+ expected_max : Arc :: new ( IntervalMonthDayNanoArray :: from ( vec ! [ None , None ] ) ) ,
1147+ expected_null_counts : UInt64Array :: from ( vec ! [ 2 , 2 ] ) ,
1148+ expected_row_counts : UInt64Array :: from ( vec ! [ 13 , 7 ] ) ,
1149+ column_name : "month_day_nano" ,
1150+ }
1151+ . run ( ) ;
1152+ }
1153+
10751154#[ tokio:: test]
10761155async fn test_uint ( ) {
10771156 // This creates a parquet files of 4 columns named "u8", "u16", "u32", "u64"
0 commit comments