• Tom Lane's avatar
    Remove bogus dependencies on NUMERIC_MAX_PRECISION. · 9389fbd0
    Tom Lane authored
    NUMERIC_MAX_PRECISION is a purely arbitrary constraint on the precision
    and scale you can write in a numeric typmod.  It might once have had
    something to do with the allowed range of a typmod-less numeric value,
    but at least since 9.1 we've allowed, and documented that we allowed,
    any value that would physically fit in the numeric storage format;
    which is something over 100000 decimal digits, not 1000.
    
    Hence, get rid of numeric_in()'s use of NUMERIC_MAX_PRECISION as a limit
    on the allowed range of the exponent in scientific-format input.  That was
    especially silly in view of the fact that you can enter larger numbers as
    long as you don't use 'e' to do it.  Just constrain the value enough to
    avoid localized overflow, and let make_result be the final arbiter of what
    is too large.  Likewise adjust ecpg's equivalent of this code.
    
    Also get rid of numeric_recv()'s use of NUMERIC_MAX_PRECISION to limit the
    number of base-NBASE digits it would accept.  That created a dump/restore
    hazard for binary COPY without doing anything useful; the wire-format
    limit on number of digits (65535) is about as tight as we would want.
    
    In HEAD, also get rid of pg_size_bytes()'s unnecessary intimacy with what
    the numeric range limit is.  That code doesn't exist in the back branches.
    
    Per gripe from Aravind Kumar.  Back-patch to all supported branches,
    since they all contain the documentation claim about allowed range of
    NUMERIC (cf commit cabf5d84).
    
    Discussion: <2895.1471195721@sss.pgh.pa.us>
    9389fbd0
numeric.c 208 KB