• Tom Lane's avatar
    Fix datetime input to behave correctly for Feb 29 in years BC. · 05506fc4
    Tom Lane authored
    Formerly, DecodeDate attempted to verify the day-of-the-month exactly, but
    it was under the misapprehension that it would know whether we were looking
    at a BC year or not.  In reality this check can't be made until the calling
    function (eg DecodeDateTime) has processed all the fields.  So, split the
    BC adjustment and validity checks out into a new function ValidateDate that
    is called only after processing all the fields.  In passing, this patch
    makes DecodeTimeOnly work for BC inputs, which it never did before.
    
    (The historical veracity of all this is nonexistent, of course, but if
    we're going to say we support proleptic Gregorian calendar then we should
    do it correctly.  In any case the unpatched code is broken because it could
    emit dates that it would then reject on re-inputting.)
    
    Per report from Bernd Helmle.  Back-patch as far as 8.0; in 7.x we were
    not using our own calendar support and so this seems a bit too risky
    to put into 7.4.
    05506fc4
datetime.c 95.8 KB