From 49896f211cf0f0d017c9559f4a1b207ee74f3e9b Mon Sep 17 00:00:00 2001 From: haohuaijin Date: Sun, 29 Mar 2026 20:05:00 +0800 Subject: [PATCH 1/2] fix: date overflow panic --- datafusion/expr-common/src/interval_arithmetic.rs | 2 ++ .../test_files/datetime/arith_date_interval.slt | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/datafusion/expr-common/src/interval_arithmetic.rs b/datafusion/expr-common/src/interval_arithmetic.rs index 0f88723d116f5..883c721080611 100644 --- a/datafusion/expr-common/src/interval_arithmetic.rs +++ b/datafusion/expr-common/src/interval_arithmetic.rs @@ -49,6 +49,8 @@ macro_rules! get_extreme_value { DataType::Int64 => ScalarValue::Int64(Some(i64::$extreme)), DataType::Float32 => ScalarValue::Float32(Some(f32::$extreme)), DataType::Float64 => ScalarValue::Float64(Some(f64::$extreme)), + DataType::Date32 => ScalarValue::Date32(Some(i32::$extreme)), + DataType::Date64 => ScalarValue::Date64(Some(i64::$extreme)), DataType::Duration(TimeUnit::Second) => { ScalarValue::DurationSecond(Some(i64::$extreme)) } diff --git a/datafusion/sqllogictest/test_files/datetime/arith_date_interval.slt b/datafusion/sqllogictest/test_files/datetime/arith_date_interval.slt index ad2e7ed496f79..866bdf482d4c3 100644 --- a/datafusion/sqllogictest/test_files/datetime/arith_date_interval.slt +++ b/datafusion/sqllogictest/test_files/datetime/arith_date_interval.slt @@ -35,3 +35,9 @@ query T SELECT arrow_typeof('2001-09-28'::date - interval '25 hour') ---- Date32 + +query error Arrow error: Compute error: Date arithmetic overflow +SELECT DATE '2020-01-01' + INTERVAL '999999' YEAR + +query error Arrow error: Compute error: Date arithmetic overflow +SELECT DATE '2020-01-01' - INTERVAL '999999' YEAR From 16b2f342e73d807a71a2f50fbbf2073fec1d8419 Mon Sep 17 00:00:00 2001 From: haohuaijin Date: Mon, 30 Mar 2026 18:31:11 +0800 Subject: [PATCH 2/2] update --- .../test_files/datetime/arith_date_interval.slt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/datafusion/sqllogictest/test_files/datetime/arith_date_interval.slt b/datafusion/sqllogictest/test_files/datetime/arith_date_interval.slt index 866bdf482d4c3..01e1939996dfc 100644 --- a/datafusion/sqllogictest/test_files/datetime/arith_date_interval.slt +++ b/datafusion/sqllogictest/test_files/datetime/arith_date_interval.slt @@ -37,7 +37,13 @@ SELECT arrow_typeof('2001-09-28'::date - interval '25 hour') Date32 query error Arrow error: Compute error: Date arithmetic overflow -SELECT DATE '2020-01-01' + INTERVAL '999999' YEAR +SELECT arrow_cast('2020-01-01', 'Date32') + INTERVAL '999999' YEAR query error Arrow error: Compute error: Date arithmetic overflow -SELECT DATE '2020-01-01' - INTERVAL '999999' YEAR +SELECT arrow_cast('2020-01-01', 'Date32') - INTERVAL '999999' YEAR + +query error Arrow error: Compute error: Date arithmetic overflow +SELECT arrow_cast('2020-01-01', 'Date64') + INTERVAL '999999' YEAR + +query error Arrow error: Compute error: Date arithmetic overflow +SELECT arrow_cast('2020-01-01', 'Date64') - INTERVAL '999999' YEAR