You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by al...@apache.org on 2022/11/12 14:15:49 UTC

[arrow-datafusion] branch master updated: Fix clippy by avoiding deprecated functions in chrono (#4189)

This is an automated email from the ASF dual-hosted git repository.

alamb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow-datafusion.git


The following commit(s) were added to refs/heads/master by this push:
     new c4cb8c2ba Fix clippy by avoiding deprecated functions in chrono (#4189)
c4cb8c2ba is described below

commit c4cb8c2ba222070bcac2705b490bf4cc2c54c43d
Author: Andrew Lamb <an...@nerdnetworks.org>
AuthorDate: Sat Nov 12 09:15:44 2022 -0500

    Fix clippy by avoiding deprecated functions in chrono (#4189)
    
    * Fix clippy by avoiding deprecated functions in chrono
    
    * Fixup
---
 datafusion/common/src/delta.rs                     | 207 ++++++++++++++++-----
 datafusion/common/src/scalar.rs                    |  11 +-
 datafusion/core/src/datasource/listing/helpers.rs  |  24 ++-
 datafusion/core/tests/parquet/row_group_pruning.rs |   4 +-
 datafusion/core/tests/sql/mod.rs                   |   4 +-
 datafusion/core/tests/sql/timestamp.rs             |   2 +-
 datafusion/optimizer/tests/integration-test.rs     |   4 +-
 .../physical-expr/src/datetime_expressions.rs      |   5 +-
 .../physical-expr/src/expressions/datetime.rs      |  22 +--
 9 files changed, 209 insertions(+), 74 deletions(-)

diff --git a/datafusion/common/src/delta.rs b/datafusion/common/src/delta.rs
index 1de0836fc..296460ed1 100644
--- a/datafusion/common/src/delta.rs
+++ b/datafusion/common/src/delta.rs
@@ -105,75 +105,186 @@ mod tests {
 
     #[test]
     fn test_shift_months() {
-        let base = NaiveDate::from_ymd(2020, 1, 31);
-
-        assert_eq!(shift_months(base, 0), NaiveDate::from_ymd(2020, 1, 31));
-        assert_eq!(shift_months(base, 1), NaiveDate::from_ymd(2020, 2, 29));
-        assert_eq!(shift_months(base, 2), NaiveDate::from_ymd(2020, 3, 31));
-        assert_eq!(shift_months(base, 3), NaiveDate::from_ymd(2020, 4, 30));
-        assert_eq!(shift_months(base, 4), NaiveDate::from_ymd(2020, 5, 31));
-        assert_eq!(shift_months(base, 5), NaiveDate::from_ymd(2020, 6, 30));
-        assert_eq!(shift_months(base, 6), NaiveDate::from_ymd(2020, 7, 31));
-        assert_eq!(shift_months(base, 7), NaiveDate::from_ymd(2020, 8, 31));
-        assert_eq!(shift_months(base, 8), NaiveDate::from_ymd(2020, 9, 30));
-        assert_eq!(shift_months(base, 9), NaiveDate::from_ymd(2020, 10, 31));
-        assert_eq!(shift_months(base, 10), NaiveDate::from_ymd(2020, 11, 30));
-        assert_eq!(shift_months(base, 11), NaiveDate::from_ymd(2020, 12, 31));
-        assert_eq!(shift_months(base, 12), NaiveDate::from_ymd(2021, 1, 31));
-        assert_eq!(shift_months(base, 13), NaiveDate::from_ymd(2021, 2, 28));
-
-        assert_eq!(shift_months(base, -1), NaiveDate::from_ymd(2019, 12, 31));
-        assert_eq!(shift_months(base, -2), NaiveDate::from_ymd(2019, 11, 30));
-        assert_eq!(shift_months(base, -3), NaiveDate::from_ymd(2019, 10, 31));
-        assert_eq!(shift_months(base, -4), NaiveDate::from_ymd(2019, 9, 30));
-        assert_eq!(shift_months(base, -5), NaiveDate::from_ymd(2019, 8, 31));
-        assert_eq!(shift_months(base, -6), NaiveDate::from_ymd(2019, 7, 31));
-        assert_eq!(shift_months(base, -7), NaiveDate::from_ymd(2019, 6, 30));
-        assert_eq!(shift_months(base, -8), NaiveDate::from_ymd(2019, 5, 31));
-        assert_eq!(shift_months(base, -9), NaiveDate::from_ymd(2019, 4, 30));
-        assert_eq!(shift_months(base, -10), NaiveDate::from_ymd(2019, 3, 31));
-        assert_eq!(shift_months(base, -11), NaiveDate::from_ymd(2019, 2, 28));
-        assert_eq!(shift_months(base, -12), NaiveDate::from_ymd(2019, 1, 31));
-        assert_eq!(shift_months(base, -13), NaiveDate::from_ymd(2018, 12, 31));
-
-        assert_eq!(shift_months(base, 1265), NaiveDate::from_ymd(2125, 6, 30));
+        let base = NaiveDate::from_ymd_opt(2020, 1, 31).unwrap();
+
+        assert_eq!(
+            shift_months(base, 0),
+            NaiveDate::from_ymd_opt(2020, 1, 31).unwrap()
+        );
+        assert_eq!(
+            shift_months(base, 1),
+            NaiveDate::from_ymd_opt(2020, 2, 29).unwrap()
+        );
+        assert_eq!(
+            shift_months(base, 2),
+            NaiveDate::from_ymd_opt(2020, 3, 31).unwrap()
+        );
+        assert_eq!(
+            shift_months(base, 3),
+            NaiveDate::from_ymd_opt(2020, 4, 30).unwrap()
+        );
+        assert_eq!(
+            shift_months(base, 4),
+            NaiveDate::from_ymd_opt(2020, 5, 31).unwrap()
+        );
+        assert_eq!(
+            shift_months(base, 5),
+            NaiveDate::from_ymd_opt(2020, 6, 30).unwrap()
+        );
+        assert_eq!(
+            shift_months(base, 6),
+            NaiveDate::from_ymd_opt(2020, 7, 31).unwrap()
+        );
+        assert_eq!(
+            shift_months(base, 7),
+            NaiveDate::from_ymd_opt(2020, 8, 31).unwrap()
+        );
+        assert_eq!(
+            shift_months(base, 8),
+            NaiveDate::from_ymd_opt(2020, 9, 30).unwrap()
+        );
+        assert_eq!(
+            shift_months(base, 9),
+            NaiveDate::from_ymd_opt(2020, 10, 31).unwrap()
+        );
+        assert_eq!(
+            shift_months(base, 10),
+            NaiveDate::from_ymd_opt(2020, 11, 30).unwrap()
+        );
+        assert_eq!(
+            shift_months(base, 11),
+            NaiveDate::from_ymd_opt(2020, 12, 31).unwrap()
+        );
+        assert_eq!(
+            shift_months(base, 12),
+            NaiveDate::from_ymd_opt(2021, 1, 31).unwrap()
+        );
+        assert_eq!(
+            shift_months(base, 13),
+            NaiveDate::from_ymd_opt(2021, 2, 28).unwrap()
+        );
+
+        assert_eq!(
+            shift_months(base, -1),
+            NaiveDate::from_ymd_opt(2019, 12, 31).unwrap()
+        );
+        assert_eq!(
+            shift_months(base, -2),
+            NaiveDate::from_ymd_opt(2019, 11, 30).unwrap()
+        );
+        assert_eq!(
+            shift_months(base, -3),
+            NaiveDate::from_ymd_opt(2019, 10, 31).unwrap()
+        );
+        assert_eq!(
+            shift_months(base, -4),
+            NaiveDate::from_ymd_opt(2019, 9, 30).unwrap()
+        );
+        assert_eq!(
+            shift_months(base, -5),
+            NaiveDate::from_ymd_opt(2019, 8, 31).unwrap()
+        );
+        assert_eq!(
+            shift_months(base, -6),
+            NaiveDate::from_ymd_opt(2019, 7, 31).unwrap()
+        );
+        assert_eq!(
+            shift_months(base, -7),
+            NaiveDate::from_ymd_opt(2019, 6, 30).unwrap()
+        );
+        assert_eq!(
+            shift_months(base, -8),
+            NaiveDate::from_ymd_opt(2019, 5, 31).unwrap()
+        );
+        assert_eq!(
+            shift_months(base, -9),
+            NaiveDate::from_ymd_opt(2019, 4, 30).unwrap()
+        );
+        assert_eq!(
+            shift_months(base, -10),
+            NaiveDate::from_ymd_opt(2019, 3, 31).unwrap()
+        );
+        assert_eq!(
+            shift_months(base, -11),
+            NaiveDate::from_ymd_opt(2019, 2, 28).unwrap()
+        );
+        assert_eq!(
+            shift_months(base, -12),
+            NaiveDate::from_ymd_opt(2019, 1, 31).unwrap()
+        );
+        assert_eq!(
+            shift_months(base, -13),
+            NaiveDate::from_ymd_opt(2018, 12, 31).unwrap()
+        );
+
+        assert_eq!(
+            shift_months(base, 1265),
+            NaiveDate::from_ymd_opt(2125, 6, 30).unwrap()
+        );
     }
 
     #[test]
     fn test_shift_months_with_overflow() {
-        let base = NaiveDate::from_ymd(2020, 12, 31);
+        let base = NaiveDate::from_ymd_opt(2020, 12, 31).unwrap();
 
         assert_eq!(shift_months(base, 0), base);
-        assert_eq!(shift_months(base, 1), NaiveDate::from_ymd(2021, 1, 31));
-        assert_eq!(shift_months(base, 2), NaiveDate::from_ymd(2021, 2, 28));
-        assert_eq!(shift_months(base, 12), NaiveDate::from_ymd(2021, 12, 31));
-        assert_eq!(shift_months(base, 18), NaiveDate::from_ymd(2022, 6, 30));
-
-        assert_eq!(shift_months(base, -1), NaiveDate::from_ymd(2020, 11, 30));
-        assert_eq!(shift_months(base, -2), NaiveDate::from_ymd(2020, 10, 31));
-        assert_eq!(shift_months(base, -10), NaiveDate::from_ymd(2020, 2, 29));
-        assert_eq!(shift_months(base, -12), NaiveDate::from_ymd(2019, 12, 31));
-        assert_eq!(shift_months(base, -18), NaiveDate::from_ymd(2019, 6, 30));
+        assert_eq!(
+            shift_months(base, 1),
+            NaiveDate::from_ymd_opt(2021, 1, 31).unwrap()
+        );
+        assert_eq!(
+            shift_months(base, 2),
+            NaiveDate::from_ymd_opt(2021, 2, 28).unwrap()
+        );
+        assert_eq!(
+            shift_months(base, 12),
+            NaiveDate::from_ymd_opt(2021, 12, 31).unwrap()
+        );
+        assert_eq!(
+            shift_months(base, 18),
+            NaiveDate::from_ymd_opt(2022, 6, 30).unwrap()
+        );
+
+        assert_eq!(
+            shift_months(base, -1),
+            NaiveDate::from_ymd_opt(2020, 11, 30).unwrap()
+        );
+        assert_eq!(
+            shift_months(base, -2),
+            NaiveDate::from_ymd_opt(2020, 10, 31).unwrap()
+        );
+        assert_eq!(
+            shift_months(base, -10),
+            NaiveDate::from_ymd_opt(2020, 2, 29).unwrap()
+        );
+        assert_eq!(
+            shift_months(base, -12),
+            NaiveDate::from_ymd_opt(2019, 12, 31).unwrap()
+        );
+        assert_eq!(
+            shift_months(base, -18),
+            NaiveDate::from_ymd_opt(2019, 6, 30).unwrap()
+        );
     }
 
     #[test]
     fn test_shift_months_datetime() {
-        let date = NaiveDate::from_ymd(2020, 1, 31);
-        let o_clock = NaiveTime::from_hms(1, 2, 3);
+        let date = NaiveDate::from_ymd_opt(2020, 1, 31).unwrap();
+        let o_clock = NaiveTime::from_hms_opt(1, 2, 3).unwrap();
 
         let base = NaiveDateTime::new(date, o_clock);
 
         assert_eq!(
             shift_months(base, 0).date(),
-            NaiveDate::from_ymd(2020, 1, 31)
+            NaiveDate::from_ymd_opt(2020, 1, 31).unwrap(),
         );
         assert_eq!(
             shift_months(base, 1).date(),
-            NaiveDate::from_ymd(2020, 2, 29)
+            NaiveDate::from_ymd_opt(2020, 2, 29).unwrap(),
         );
         assert_eq!(
             shift_months(base, 2).date(),
-            NaiveDate::from_ymd(2020, 3, 31)
+            NaiveDate::from_ymd_opt(2020, 3, 31).unwrap(),
         );
         assert_eq!(shift_months(base, 0).time(), o_clock);
         assert_eq!(shift_months(base, 1).time(), o_clock);
diff --git a/datafusion/common/src/scalar.rs b/datafusion/common/src/scalar.rs
index 5caac82bf..d95ba2199 100644
--- a/datafusion/common/src/scalar.rs
+++ b/datafusion/common/src/scalar.rs
@@ -525,7 +525,7 @@ macro_rules! get_sign {
 
 #[inline]
 pub fn date32_add(days: i32, scalar: &ScalarValue, sign: i32) -> Result<i32> {
-    let epoch = NaiveDate::from_ymd(1970, 1, 1);
+    let epoch = NaiveDate::from_ymd_opt(1970, 1, 1).unwrap();
     let prior = epoch.add(Duration::days(days as i64));
     let posterior = do_date_math(prior, scalar, sign)?;
     Ok(posterior.sub(epoch).num_days() as i32)
@@ -533,7 +533,7 @@ pub fn date32_add(days: i32, scalar: &ScalarValue, sign: i32) -> Result<i32> {
 
 #[inline]
 pub fn date64_add(ms: i64, scalar: &ScalarValue, sign: i32) -> Result<i64> {
-    let epoch = NaiveDate::from_ymd(1970, 1, 1);
+    let epoch = NaiveDate::from_ymd_opt(1970, 1, 1).unwrap();
     let prior = epoch.add(Duration::milliseconds(ms));
     let posterior = do_date_math(prior, scalar, sign)?;
     Ok(posterior.sub(epoch).num_milliseconds())
@@ -572,7 +572,12 @@ fn do_date_time_math(
     scalar: &ScalarValue,
     sign: i32,
 ) -> Result<NaiveDateTime> {
-    let prior = NaiveDateTime::from_timestamp(secs, nsecs);
+    let prior = NaiveDateTime::from_timestamp_opt(secs, nsecs).ok_or_else(|| {
+        DataFusionError::Internal(format!(
+            "Could not conert to NaiveDateTime: secs {} nsecs {} scalar {:?} sign {}",
+            secs, nsecs, scalar, sign
+        ))
+    })?;
     do_date_math(prior, scalar, sign)
 }
 
diff --git a/datafusion/core/src/datasource/listing/helpers.rs b/datafusion/core/src/datasource/listing/helpers.rs
index 23571c7f3..931ab0619 100644
--- a/datafusion/core/src/datasource/listing/helpers.rs
+++ b/datafusion/core/src/datasource/listing/helpers.rs
@@ -320,7 +320,7 @@ fn batches_to_paths(batches: &[RecordBatch]) -> Result<Vec<PartitionedFile>> {
                     object_meta: ObjectMeta {
                         location: Path::parse(key_array.value(row))
                             .map_err(|e| DataFusionError::External(Box::new(e)))?,
-                        last_modified: Utc.timestamp_millis(modified_array.value(row)),
+                        last_modified: to_timestamp_millis(modified_array.value(row))?,
                         size: length_array.value(row) as usize,
                     },
                     partition_values: (3..batch.columns().len())
@@ -336,6 +336,20 @@ fn batches_to_paths(batches: &[RecordBatch]) -> Result<Vec<PartitionedFile>> {
         .collect()
 }
 
+fn to_timestamp_millis(v: i64) -> Result<chrono::DateTime<Utc>> {
+    match Utc.timestamp_millis_opt(v) {
+        chrono::LocalResult::None => Err(DataFusionError::Execution(format!(
+            "Can not convert {} to UTC millisecond timestamp",
+            v
+        ))),
+        chrono::LocalResult::Single(v) => Ok(v),
+        chrono::LocalResult::Ambiguous(_, _) => Err(DataFusionError::Execution(format!(
+            "Ambiguous timestamp when converting {} to UTC millisecond timestamp",
+            v
+        ))),
+    }
+}
+
 /// Extract the partition values for the given `file_path` (in the given `table_path`)
 /// associated to the partitions defined by `table_partition_cols`
 fn parse_partitions_for_path<'a>(
@@ -594,12 +608,12 @@ mod tests {
         let files = vec![
             ObjectMeta {
                 location: Path::from("mybucket/tablepath/part1=val1/file.parquet"),
-                last_modified: Utc.timestamp_millis(1634722979123),
+                last_modified: to_timestamp_millis(1634722979123).unwrap(),
                 size: 100,
             },
             ObjectMeta {
                 location: Path::from("mybucket/tablepath/part1=val2/file.parquet"),
-                last_modified: Utc.timestamp_millis(0),
+                last_modified: to_timestamp_millis(0).unwrap(),
                 size: 100,
             },
         ];
@@ -625,12 +639,12 @@ mod tests {
         let files = vec![
             ObjectMeta {
                 location: Path::from("mybucket/tablepath/part1=val1/file.parquet"),
-                last_modified: Utc.timestamp_millis(1634722979123),
+                last_modified: to_timestamp_millis(1634722979123).unwrap(),
                 size: 100,
             },
             ObjectMeta {
                 location: Path::from("mybucket/tablepath/part1=val2/file.parquet"),
-                last_modified: Utc.timestamp_millis(0),
+                last_modified: to_timestamp_millis(0).unwrap(),
                 size: 100,
             },
         ];
diff --git a/datafusion/core/tests/parquet/row_group_pruning.rs b/datafusion/core/tests/parquet/row_group_pruning.rs
index 71503d249..c3de01b38 100644
--- a/datafusion/core/tests/parquet/row_group_pruning.rs
+++ b/datafusion/core/tests/parquet/row_group_pruning.rs
@@ -134,7 +134,7 @@ async fn prune_date64() {
     let date = "2020-01-02"
         .parse::<chrono::NaiveDate>()
         .unwrap()
-        .and_time(chrono::NaiveTime::from_hms(0, 0, 0));
+        .and_time(chrono::NaiveTime::from_hms_opt(0, 0, 0).unwrap());
     let date = ScalarValue::Date64(Some(date.timestamp_millis()));
 
     let output = ContextWithParquet::new(Scenario::Dates)
@@ -935,7 +935,7 @@ fn make_date_batch(offset: Duration) -> RecordBatch {
                 let t = t
                     .parse::<chrono::NaiveDate>()
                     .unwrap()
-                    .and_time(chrono::NaiveTime::from_hms(0, 0, 0));
+                    .and_time(chrono::NaiveTime::from_hms_opt(0, 0, 0).unwrap());
                 let t = t + offset;
                 t.timestamp_millis()
             })
diff --git a/datafusion/core/tests/sql/mod.rs b/datafusion/core/tests/sql/mod.rs
index 9c78bb325..c2d5726e2 100644
--- a/datafusion/core/tests/sql/mod.rs
+++ b/datafusion/core/tests/sql/mod.rs
@@ -580,7 +580,9 @@ async fn register_tpch_csv_data(
                 DataType::Date32 => {
                     let sb = col.as_any_mut().downcast_mut::<Date32Builder>().unwrap();
                     let dt = NaiveDate::parse_from_str(val.trim(), "%Y-%m-%d").unwrap();
-                    let dt = dt.sub(NaiveDate::from_ymd(1970, 1, 1)).num_days() as i32;
+                    let dt = dt
+                        .sub(NaiveDate::from_ymd_opt(1970, 1, 1).unwrap())
+                        .num_days() as i32;
                     sb.append_value(dt);
                 }
                 DataType::Int32 => {
diff --git a/datafusion/core/tests/sql/timestamp.rs b/datafusion/core/tests/sql/timestamp.rs
index 7fb8e109f..dec04f653 100644
--- a/datafusion/core/tests/sql/timestamp.rs
+++ b/datafusion/core/tests/sql/timestamp.rs
@@ -890,7 +890,7 @@ async fn group_by_timestamp_millis() -> Result<()> {
         ),
         Field::new("count", DataType::Int32, false),
     ]));
-    let base_dt = Utc.ymd(2018, 7, 1).and_hms(6, 0, 0); // 2018-Jul-01 06:00
+    let base_dt = Utc.with_ymd_and_hms(2018, 7, 1, 6, 0, 0).unwrap(); // 2018-Jul-01 06:00
     let hour1 = Duration::hours(1);
     let timestamps = vec![
         base_dt.timestamp_millis(),
diff --git a/datafusion/optimizer/tests/integration-test.rs b/datafusion/optimizer/tests/integration-test.rs
index 48cd831bd..779f156c0 100644
--- a/datafusion/optimizer/tests/integration-test.rs
+++ b/datafusion/optimizer/tests/integration-test.rs
@@ -270,8 +270,8 @@ fn test_sql(sql: &str) -> Result<LogicalPlan> {
     let plan = sql_to_rel.sql_statement_to_plan(statement.clone()).unwrap();
 
     // hard code the return value of now()
-    let now_time =
-        DateTime::<Utc>::from_utc(NaiveDateTime::from_timestamp(1666615693, 0), Utc);
+    let ts = NaiveDateTime::from_timestamp_opt(1666615693, 0).unwrap();
+    let now_time = DateTime::<Utc>::from_utc(ts, Utc);
     let mut config = OptimizerConfig::new()
         .with_skip_failing_rules(false)
         .with_query_execution_start_time(now_time);
diff --git a/datafusion/physical-expr/src/datetime_expressions.rs b/datafusion/physical-expr/src/datetime_expressions.rs
index 041d7c0ee..0a76edde5 100644
--- a/datafusion/physical-expr/src/datetime_expressions.rs
+++ b/datafusion/physical-expr/src/datetime_expressions.rs
@@ -195,7 +195,10 @@ pub fn make_current_date(
     now_ts: DateTime<Utc>,
 ) -> impl Fn(&[ColumnarValue]) -> Result<ColumnarValue> {
     let days = Some(
-        now_ts.num_days_from_ce() - NaiveDate::from_ymd(1970, 1, 1).num_days_from_ce(),
+        now_ts.num_days_from_ce()
+            - NaiveDate::from_ymd_opt(1970, 1, 1)
+                .unwrap()
+                .num_days_from_ce(),
     );
     move |_arg| Ok(ColumnarValue::Scalar(ScalarValue::Date32(days)))
 }
diff --git a/datafusion/physical-expr/src/expressions/datetime.rs b/datafusion/physical-expr/src/expressions/datetime.rs
index e8dffa238..9585e7ea0 100644
--- a/datafusion/physical-expr/src/expressions/datetime.rs
+++ b/datafusion/physical-expr/src/expressions/datetime.rs
@@ -268,42 +268,42 @@ mod tests {
 
     #[test]
     fn add_11_months() {
-        let prior = NaiveDate::from_ymd(2000, 1, 1);
+        let prior = NaiveDate::from_ymd_opt(2000, 1, 1).unwrap();
         let actual = shift_months(prior, 11);
         assert_eq!(format!("{:?}", actual).as_str(), "2000-12-01");
     }
 
     #[test]
     fn add_12_months() {
-        let prior = NaiveDate::from_ymd(2000, 1, 1);
+        let prior = NaiveDate::from_ymd_opt(2000, 1, 1).unwrap();
         let actual = shift_months(prior, 12);
         assert_eq!(format!("{:?}", actual).as_str(), "2001-01-01");
     }
 
     #[test]
     fn add_13_months() {
-        let prior = NaiveDate::from_ymd(2000, 1, 1);
+        let prior = NaiveDate::from_ymd_opt(2000, 1, 1).unwrap();
         let actual = shift_months(prior, 13);
         assert_eq!(format!("{:?}", actual).as_str(), "2001-02-01");
     }
 
     #[test]
     fn sub_11_months() {
-        let prior = NaiveDate::from_ymd(2000, 1, 1);
+        let prior = NaiveDate::from_ymd_opt(2000, 1, 1).unwrap();
         let actual = shift_months(prior, -11);
         assert_eq!(format!("{:?}", actual).as_str(), "1999-02-01");
     }
 
     #[test]
     fn sub_12_months() {
-        let prior = NaiveDate::from_ymd(2000, 1, 1);
+        let prior = NaiveDate::from_ymd_opt(2000, 1, 1).unwrap();
         let actual = shift_months(prior, -12);
         assert_eq!(format!("{:?}", actual).as_str(), "1999-01-01");
     }
 
     #[test]
     fn sub_13_months() {
-        let prior = NaiveDate::from_ymd(2000, 1, 1);
+        let prior = NaiveDate::from_ymd_opt(2000, 1, 1).unwrap();
         let actual = shift_months(prior, -13);
         assert_eq!(format!("{:?}", actual).as_str(), "1998-12-01");
     }
@@ -321,7 +321,7 @@ mod tests {
         // assert
         match res {
             ColumnarValue::Scalar(ScalarValue::Date32(Some(d))) => {
-                let epoch = NaiveDate::from_ymd(1970, 1, 1);
+                let epoch = NaiveDate::from_ymd_opt(1970, 1, 1).unwrap();
                 let res = epoch.add(Duration::days(d as i64));
                 assert_eq!(format!("{:?}", res).as_str(), "1970-01-02");
             }
@@ -346,7 +346,7 @@ mod tests {
         // assert
         match res {
             ColumnarValue::Scalar(ScalarValue::Date32(Some(d))) => {
-                let epoch = NaiveDate::from_ymd(1970, 1, 1);
+                let epoch = NaiveDate::from_ymd_opt(1970, 1, 1).unwrap();
                 let res = epoch.add(Duration::days(d as i64));
                 assert_eq!(format!("{:?}", res).as_str(), "1968-12-01");
             }
@@ -372,7 +372,7 @@ mod tests {
         // assert
         match res {
             ColumnarValue::Scalar(ScalarValue::Date64(Some(d))) => {
-                let epoch = NaiveDate::from_ymd(1970, 1, 1);
+                let epoch = NaiveDate::from_ymd_opt(1970, 1, 1).unwrap();
                 let res = epoch.add(Duration::milliseconds(d as i64));
                 assert_eq!(format!("{:?}", res).as_str(), "1969-12-16");
             }
@@ -397,7 +397,7 @@ mod tests {
         // assert
         match res {
             ColumnarValue::Scalar(ScalarValue::Date32(Some(d))) => {
-                let epoch = NaiveDate::from_ymd(1970, 1, 1);
+                let epoch = NaiveDate::from_ymd_opt(1970, 1, 1).unwrap();
                 let res = epoch.add(Duration::days(d as i64));
                 assert_eq!(format!("{:?}", res).as_str(), "1970-02-01");
             }
@@ -422,7 +422,7 @@ mod tests {
         // assert
         match res {
             ColumnarValue::Scalar(ScalarValue::Date32(Some(d))) => {
-                let epoch = NaiveDate::from_ymd(1970, 1, 1);
+                let epoch = NaiveDate::from_ymd_opt(1970, 1, 1).unwrap();
                 let res = epoch.add(Duration::days(d as i64));
                 assert_eq!(format!("{:?}", res).as_str(), "1968-12-17");
             }