Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
None
Description
The expression simplification currently has a small set of functions which it knows are commutative (IsBinaryAssociativeCommutative). "add" (and "add_checked" are in this list. This should be ok for add(timestamp,duration) since this boils down to add(int64,int64) which is commutative. However, the way the kernels are currently implemented, we are getting the incorrect output type.
Concretely, we have kernels:
add_checked<Timestamp,Duration>() -> types[0] add_checked<Duration,Timestamp>() -> types[1]
A call is made with expression field_ref("x") + duration_literal. This call is bound to add_checked<Timestamp, Duration>. However, the expression is then simplified to duration_literal + field_ref("x"). Oddly enough, the math in this case is correct, since it is just addition, but the output type is not. It assigns an output type of duration instead of timestamp.
Attachments
Issue Links
- links to