diff --git a/native/core/src/execution/planner.rs b/native/core/src/execution/planner.rs index 5accd31609..fcd146d4a3 100644 --- a/native/core/src/execution/planner.rs +++ b/native/core/src/execution/planner.rs @@ -417,6 +417,9 @@ impl PhysicalPlanner { DataType::Duration(TimeUnit::Microsecond) => { ScalarValue::DurationMicrosecond(None) } + DataType::Interval(arrow::datatypes::IntervalUnit::MonthDayNano) => { + ScalarValue::IntervalMonthDayNano(None) + } dt => { return Err(GeneralError(format!("{dt:?} is not supported in Comet"))) } diff --git a/spark/src/test/resources/sql-tests/expressions/datetime/calendar_interval.sql b/spark/src/test/resources/sql-tests/expressions/datetime/calendar_interval.sql index 796e6354ac..6eaa9648f2 100644 --- a/spark/src/test/resources/sql-tests/expressions/datetime/calendar_interval.sql +++ b/spark/src/test/resources/sql-tests/expressions/datetime/calendar_interval.sql @@ -18,6 +18,20 @@ -- Config: spark.comet.exec.localTableScan.enabled=true -- Config: spark.comet.shuffle.mode=native +statement +CREATE TABLE test_null_interval(id int) USING parquet + +statement +INSERT INTO test_null_interval VALUES (1) + +-- Null calendar interval literal in a projection over a real scan. +query +SELECT CAST(NULL AS INTERVAL) FROM test_null_interval + +-- NullPropagation folds make_interval with a null argument to a null interval literal. +query +SELECT make_interval(NULL, 2, 3, 4, 5, 6, 7.008009) FROM test_null_interval + query SELECT * FROM VALUES (make_interval(1, 2, 3, 4, 5, 6, 7.008009)),