sepuri sai krishna created SPARK-59859:
------------------------------------------

             Summary: Fail on overflow in date_add and date_sub instead of 
wrapping around
                 Key: SPARK-59859
                 URL: https://issues.apache.org/jira/browse/SPARK-59859
             Project: Spark
          Issue Type: Bug
          Components: SQL
    Affects Versions: 5.0.0
            Reporter: sepuri sai krishna


{{date_add}} and {{date_sub}} (and the {{date + int}} / {{date - int}} 
operators, {{dateadd}}, {{try_add}} and {{try_subtract}} on dates) add the 
number of days to the date with plain {{Int}} arithmetic, so a result outside 
the {{Int}} range silently wraps around and returns a wrong date. This happens 
with ANSI mode on and off, and in both codegen and interpreted mode:

{code:sql}
SELECT date_add(DATE'2020-01-01', 2147483647);    -- -5877591-06-21
SELECT date_sub(DATE'1900-01-01', 2147483647);    -- +5881510-07-14
SELECT try_add(DATE'2020-01-01', 2147483647);     -- -5877591-06-21, not NULL
{code}

Adding a positive number of days returns a date millions of years in the past. 
Since the wrapped value is still a valid {{DATE}}, nothing downstream notices.

Similar operations already fail on overflow instead, with ANSI mode on and off:
{code:sql}
SELECT add_months(DATE'2020-01-01', 2147483647);                   -- 
[ARITHMETIC_OVERFLOW]
SELECT DATE'2020-01-01' + make_dt_interval(2147483647, 0, 0, 0);   -- 
[INTERVAL_ARITHMETIC_OVERFLOW]
{code}

{{DateAdd}} and {{DateSub}} should fail with {{DATETIME_OVERFLOW}} in this 
case, as {{TIMESTAMPADD}} does since SPARK-38481. {{try_add}} and 
{{try_subtract}} then return NULL, as documented.




--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to