Re: BUG #14446: make_date with negative year - Mailing list pgsql-bugs

From Alvaro Herrera
Subject Re: BUG #14446: make_date with negative year
Date
Msg-id 20161204134050.vsfjbwub6u6jljax@alvherre.pgsql
Whole thread Raw
In response to BUG #14446: make_date with negative year  (abelisto@gmail.com)
Responses Re: BUG #14446: make_date with negative year
List pgsql-bugs
abelisto@gmail.com wrote:

> Bug reference:      14446
> Logged by:          Andy Abelisto
> Email address:      abelisto@gmail.com
> PostgreSQL version: 9.5.5
> Operating system:   Linux Mint
> Description:
>
> with t(x) as (values('1111-11-11 BC'::date)) select make_date(extract(year
> from x)::int, extract(month from x)::int, extract(day from x)::int) from
> t;
> ERROR:  date field value out of range: -1111-11-11

make_date() has:

    /*
     * Note: we'll reject zero or negative year values.  Perhaps negatives
     * should be allowed to represent BC years?
     */
    dterr = ValidateDate(DTK_DATE_M, false, false, false, &tm);

With the attached patch it becomes (needs docs, tests):

with t(x) as (values('1111-11-11 BC'::date),
        ('00001-11-11 bc'),
        ('00001-11-11'),
        ('1111-11-11')
)
select make_date(extract(year
from x)::int, extract(month from x)::int, extract(day from x)::int) from
t;
   make_date
───────────────
 1111-11-11 BC
 0001-11-11 BC
 0001-11-11
 1111-11-11
(4 filas)

--
Álvaro Herrera                https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

Attachment

pgsql-bugs by date:

Previous
From: abelisto@gmail.com
Date:
Subject: BUG #14446: make_date with negative year
Next
From: Pavel Stehule
Date:
Subject: Re: BUG #14446: make_date with negative year