Describe the bug
Window functions whose leading ORDER BY key is Time32 or Time64 fail during type coercion, even when no frame clause is specified.
An ORDER BY window defaults to RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW. These free bounds only need to compare order-key values, and time values are orderable.
To Reproduce
Run:
cargo run --quiet -p datafusion-cli -- -q -c \
"SELECT x, COUNT(*) OVER (ORDER BY x) FROM (VALUES (arrow_cast('01:00:00', 'Time64(Microsecond)')), (arrow_cast('02:00:00', 'Time64(Microsecond)')), (arrow_cast('02:00:00', 'Time64(Microsecond)'))) AS t(x) ORDER BY x;"
It fails with an internal error:
Error: type_coercion
caused by
Internal error: Cannot run range queries on datatype: Time64(Microsecond).
Expected behavior
The query should succeed and treat equal time values as peers:
01:00:00 1
02:00:00 3
02:00:00 3
Free RANGE frames whose bounds are only UNBOUNDED or CURRENT ROW should support time order keys. Finite offsets such as INTERVAL '1' HOUR PRECEDING should remain unsupported because time/interval arithmetic wraps around the 24-hour clock, but they should produce a planning error rather than an internal error.
Additional context
The same problem affects Time32(Second), Time32(Millisecond), Time64(Microsecond), Time64(Nanosecond), and dictionary-wrapped time values. This is analogous to the binary order-key issue fixed in #24357.
Describe the bug
Window functions whose leading
ORDER BYkey isTime32orTime64fail during type coercion, even when no frame clause is specified.An
ORDER BYwindow defaults toRANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW. These free bounds only need to compare order-key values, and time values are orderable.To Reproduce
Run:
cargo run --quiet -p datafusion-cli -- -q -c \ "SELECT x, COUNT(*) OVER (ORDER BY x) FROM (VALUES (arrow_cast('01:00:00', 'Time64(Microsecond)')), (arrow_cast('02:00:00', 'Time64(Microsecond)')), (arrow_cast('02:00:00', 'Time64(Microsecond)'))) AS t(x) ORDER BY x;"It fails with an internal error:
Expected behavior
The query should succeed and treat equal time values as peers:
Free
RANGEframes whose bounds are onlyUNBOUNDEDorCURRENT ROWshould support time order keys. Finite offsets such asINTERVAL '1' HOUR PRECEDINGshould remain unsupported because time/interval arithmetic wraps around the 24-hour clock, but they should produce a planning error rather than an internal error.Additional context
The same problem affects
Time32(Second),Time32(Millisecond),Time64(Microsecond),Time64(Nanosecond), and dictionary-wrapped time values. This is analogous to the binary order-key issue fixed in #24357.