Vladimir Ozerov created CALCITE-4543:
----------------------------------------

             Summary: Interval literal looses a fractional second when it has 
scale greater than 3
                 Key: CALCITE-4543
                 URL: https://issues.apache.org/jira/browse/CALCITE-4543
             Project: Calcite
          Issue Type: Bug
          Components: core
    Affects Versions: 1.26.0
            Reporter: Vladimir Ozerov


The allowed fractional second precision for literals is between 1 and 9, with 
the default value set to 6. The relevant constants are defined in the 
{{SqlTypeName}} class, see {{DEFAULT_INTERVAL_FRACTIONAL_SECOND_PRECISION}} and 
{{MAX_INTERVAL_FRACTIONAL_SECOND_PRECISION}}.

At the same time, the {{DAY-SECOND}} literals are converted to milliseconds 
during actual processing, see {{SqlParserUtil.intervalToMillis}}. As a result, 
the sub-millisecond part is lost silently:
{code}
CAST('2021-01-01 10:00:00' as TIMESTAMP) + INTERVAL '0.001' SECOND => 
2021-01-01 10:00:00.001
CAST('2021-01-01 10:00:00' as TIMESTAMP) + INTERVAL '0.0001' SECOND => 
2021-01-01 10:00:00.0
{code}

There are two possible solutions here, which are orthogonal to each other:
# Since Apache Calcite claims to support up to 9 fractional positions, it 
should work with nanoseconds, rather than milliseconds.
# Provide a way for products to override the default and maximum scale for 
intervals.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to