You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Zhenghua Gao (Jira)" <ji...@apache.org> on 2019/11/21 09:11:00 UTC
[jira] [Created] (CALCITE-3529) TIMESTAMPDIFF function may overflow
when handle unit of MICROSECOND/NANOSECOND
Zhenghua Gao created CALCITE-3529:
-------------------------------------
Summary: TIMESTAMPDIFF function may overflow when handle unit of MICROSECOND/NANOSECOND
Key: CALCITE-3529
URL: https://issues.apache.org/jira/browse/CALCITE-3529
Project: Calcite
Issue Type: Bug
Components: core
Affects Versions: 1.21.0
Reporter: Zhenghua Gao
For unit of NANOSECOND, the TIMESTAMPDIFF function returns a BIGINT, which may overflow since BIGINT can't cover the huge range of nanosecond.
For unit of MICROSECOND, the TIMESTAMPDIFF function returns a INTEGER, which may overflow too.
TIMESTAMPDIFF(MICROSECOND, TIMESTAMP '9999-12-31 23:59:59.999', TIMESTAMP '0001-01-01 00:00:00.000') should returns '315537897599999000' [1], calcite returns '879764032'.
TIMESTAMPDIFF(NANOSECOND, TIMESTAMP '9999-12-31 23:59:59.999', TIMESTAMP '0001-01-01 00:00:00.000') should returns '315537897599999000*000*' which is bigger than LONG.MAX_VALUE, calcite returns '-1943248345937622528'.
My suggestion is:
# Change the return type to BIGINT for unit of MICROSECOND
# Disable support for unit of NANOSECOND or give a RISK message in the document of TIMESTAMPDIFF
[1] the value is calculated by MySQL 5.6 from [http://sqlfiddle.com/]
--
This message was sent by Atlassian Jira
(v8.3.4#803005)