edubraqd opened a new issue, #24892: URL: https://github.com/apache/datafusion/issues/24892
### Describe the bug Formatting a `ScalarValue::Date64` whose value is `i64::MIN` panics. The `Display` impl unwraps `chrono::Duration::try_milliseconds(v)`, which returns `None` for `i64::MIN` because that value is outside the range `chrono::Duration` can represent (`datafusion/common/src/scalar/mod.rs`, `Date64` arm of `impl fmt::Display for ScalarValue`). Any code path that prints such a literal hits it, e.g. plan display. ### To Reproduce ```sql EXPLAIN SELECT arrow_cast(-9223372036854775808, 'Date64'); ``` ```text thread 'main' panicked at datafusion/common/src/scalar/mod.rs:5661:82: called `Option::unwrap()` on a `None` value ``` Also reachable during execution, e.g. a RANGE window frame over a `Date64` column that contains `i64::MIN`: ```sql SELECT count(*) OVER (ORDER BY x RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING) FROM (VALUES (arrow_cast(9223372036854775807, 'Date64')), (arrow_cast(-9223372036854775808, 'Date64'))) t(x); ``` ### Expected behavior No panic. The neighbouring branch already maps an unrepresentable epoch offset to an empty string (added for apache/arrow-rs#7728); `i64::MIN` should behave the same way. ### Additional context Found while running a corpus of extreme-value literals against a debug build of `datafusion-cli`. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
