[ 
https://issues.apache.org/jira/browse/CALCITE-3881?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Zhenghua Gao updated CALCITE-3881:
----------------------------------
    Description: 
SqlFunctions#addMonths use DateTimeUtils#ymdToUnixDate to calculate the 
JDN(julian day number). But in some corner cases it yields incorrent results. 
The root cause is: the algorithm of DateTimeUtils#ymdToUnixDate requires 
reasonable month(1 to 12)[1], but SqlFunctions#addMonths may pass in a month 
out of the reasonable range.

BTW: I didn't find the reference of the original paper of the algorithm, but an 
jdn explanation. Please correct me if anyone can find the original paper.

 

The following case can reproduce the bug:

addMonth('2019-09-01', 6) should yield '2020-03-01'
{code:java}
@Test public void testAddMonths() { 
  checkAddMonths(2019, 9, 1, 2020, 3, 1, 6); 
} {code}
 

[1] 
[http://www.cs.utsa.edu/~cs1063/projects/Spring2011/Project1/jdn-explanation.html]

  was:
SqlFunctions#addMonths use DateTimeUtils#ymdToUnixDate to calculate the 
JDN(julian day number). But in some corner cases it yields incorrent results. 
The root cause is: the algorithm of DateTimeUtils#ymdToUnixDate requires 
reasonable month(1 to 12)[1], but SqlFunctions#addMonths may pass in a month 
out of the reasonable range.

BTW: I didn't find the reference of the original paper of the algorithm, but an 
jdn explanation. Please correct me if anyone can find the original paper.

 

The following case can reproduce the bug:
{code:java}
@Test public void testAddMonths() { 
  checkAddMonths(2019, 9, 1, 2020, 3, 1, 6); 
} {code}
 

[1] 
[http://www.cs.utsa.edu/~cs1063/projects/Spring2011/Project1/jdn-explanation.html]


> SqlFunctions#addMonths yields incorrect results in some corner case
> -------------------------------------------------------------------
>
>                 Key: CALCITE-3881
>                 URL: https://issues.apache.org/jira/browse/CALCITE-3881
>             Project: Calcite
>          Issue Type: Bug
>          Components: avatica
>    Affects Versions: avatica-1.16.0
>            Reporter: Zhenghua Gao
>            Priority: Major
>
> SqlFunctions#addMonths use DateTimeUtils#ymdToUnixDate to calculate the 
> JDN(julian day number). But in some corner cases it yields incorrent results. 
> The root cause is: the algorithm of DateTimeUtils#ymdToUnixDate requires 
> reasonable month(1 to 12)[1], but SqlFunctions#addMonths may pass in a month 
> out of the reasonable range.
> BTW: I didn't find the reference of the original paper of the algorithm, but 
> an jdn explanation. Please correct me if anyone can find the original paper.
>  
> The following case can reproduce the bug:
> addMonth('2019-09-01', 6) should yield '2020-03-01'
> {code:java}
> @Test public void testAddMonths() { 
>   checkAddMonths(2019, 9, 1, 2020, 3, 1, 6); 
> } {code}
>  
> [1] 
> [http://www.cs.utsa.edu/~cs1063/projects/Spring2011/Project1/jdn-explanation.html]



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

Reply via email to