Skip to content

Commit

Permalink
feat: type coercion support date - date
Browse files Browse the repository at this point in the history
  • Loading branch information
jackwener committed Jun 7, 2023
1 parent 12b88ea commit d04679b
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 4 deletions.
2 changes: 1 addition & 1 deletion datafusion/core/tests/sqllogictests/test_files/dates.slt
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ select i_item_desc from test
where d3_date > now() + '5 days';

# DATE minus DATE
query error DataFusion error: Error during planning: Unsupported argument types\. Can not evaluate Date32 \- Date32
query error DataFusion error: Optimizer rule 'simplify_expressions' failed\ncaused by\nArrow error: Cast error: Cannot perform arithmetic operation between array of type Date32 and array of type Date32
SELECT DATE '2023-04-09' - DATE '2023-04-02';

# DATE minus Timestamp
Expand Down
10 changes: 7 additions & 3 deletions datafusion/expr/src/type_coercion/binary.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,7 @@ fn mathematics_temporal_result_type(
(Interval(_), Date64) => Some(rhs_type.clone()),
(Date64, Interval(_)) => Some(lhs_type.clone()),
// interval +/-
(Interval(YearMonth), Interval(YearMonth)) => Some(Interval(YearMonth)),
(Interval(DayTime), Interval(DayTime)) => Some(Interval(DayTime)),
(Interval(l), Interval(h)) if l == h => Some(lhs_type.clone()),
(Interval(_), Interval(_)) => Some(Interval(MonthDayNano)),
// timestamp - timestamp
(Timestamp(Second, _), Timestamp(Second, _))
Expand All @@ -68,7 +67,10 @@ fn mathematics_temporal_result_type(
Some(Interval(MonthDayNano))
}
(Timestamp(_, _), Timestamp(_, _)) => None,
// TODO: date minus date
// date - date
(Date32, Date32) => Some(Interval(DayTime)),
(Date64, Date64) => Some(Interval(MonthDayNano)),
(Date32, Date64) | (Date64, Date32) => Some(Interval(MonthDayNano)),
// date - timestamp, timestamp - date
(Date32, Timestamp(_, _))
| (Timestamp(_, _), Date32)
Expand Down Expand Up @@ -738,6 +740,8 @@ fn temporal_coercion(lhs_type: &DataType, rhs_type: &DataType) -> Option<DataTyp
(Interval(YearMonth), Interval(YearMonth)) => Some(Interval(YearMonth)),
(Interval(DayTime), Interval(DayTime)) => Some(Interval(DayTime)),
(Interval(_), Interval(_)) => Some(Interval(MonthDayNano)),
(Date32, Date32) => Some(Date32),
(Date64, Date64) => Some(Date64),
(Date64, Date32) | (Date32, Date64) => Some(Date64),
(Utf8, Date32) | (Date32, Utf8) => Some(Date32),
(Utf8, Date64) | (Date64, Utf8) => Some(Date64),
Expand Down

0 comments on commit d04679b

Please sign in to comment.