This enhances the numeric type input function, adding support for hexadecimal, octal, and binary integers of any size, up to the limits of the numeric type.
Since 6fcda9aba8, such non-decimal integers have been accepted by the parser as integer literals and passed through to numeric_in(). This commit gives numeric_in() the ability to handle them.
While at it, simplify the handling of NaN and infinities, reducing the number of calls to pg_strncasecmp(), and arrange for pg_strncasecmp() to not be called at all for regular numbers. This gives a significant performance improvement for decimal inputs, more than offsetting the small performance hit of checking for non-decimal input.
Discussion: https://postgr.es/m/CAEZATCV8XShnmT9HZy25C%2Bo78CVOFmUN5EM9FRAZ5xvYTggPMg%40mail.gmail.com
6dfacbf72b Add non-decimal integer support to type numeric.
src/backend/utils/adt/numeric.c | 360 +++++++++++++++++++++++++------
src/test/regress/expected/numeric.out | 78 +++++--
src/test/regress/expected/numerology.out | 48 +++--
src/test/regress/sql/numeric.sql | 14 ++
4 files changed, 405 insertions(+), 95 deletions(-)
Upstream: git.postgresql.org