Add non-decimal integer support to type numeric

Enterprise / PostgreSQL - Dean Rasheed [gmail.com] - 23 January 2023 19:21 UTC

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


  • Share