diff options
author | Andres Freund | 2018-07-22 21:58:01 +0000 |
---|---|---|
committer | Andres Freund | 2018-07-22 21:58:23 +0000 |
commit | 86eaf208ea048936df6be77276a246d3f92e9620 (patch) | |
tree | d0b7d529bba5f072457c003c951d05ca2aa90caa /contrib/spi/refint.c | |
parent | 3522d0eaba5a976f09a48810dd25dff6ab3565df (diff) |
Hand code string to integer conversion for performance.
As benchmarks show, using libc's string-to-integer conversion is
pretty slow. At least part of the reason for that is that strtol[l]
have to be more generic than what largely is required inside pg.
This patch considerably speeds up int2/int4 input (int8 already was
already using hand-rolled code).
Most of the existing pg_atoi callers have been converted. But as one
requires pg_atoi's custom delimiter functionality, and as it seems
likely that there's external pg_atoi users, it seems sensible to just
keep pg_atoi around.
Author: Andres Freund
Reviewed-By: Robert Haas
Discussion: https://postgr.es/m/20171208214437.qgn6zdltyq5hmjpk@alap3.anarazel.de
Diffstat (limited to 'contrib/spi/refint.c')
-rw-r--r-- | contrib/spi/refint.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/contrib/spi/refint.c b/contrib/spi/refint.c index b065ffa400d..f90f2bce0ea 100644 --- a/contrib/spi/refint.c +++ b/contrib/spi/refint.c @@ -306,7 +306,7 @@ check_foreign_key(PG_FUNCTION_ARGS) /* internal error */ elog(ERROR, "check_foreign_key: too short %d (< 5) list of arguments", nargs); - nrefs = pg_atoi(args[0], sizeof(int), 0); + nrefs = pg_strtoint32(args[0]); if (nrefs < 1) /* internal error */ elog(ERROR, "check_foreign_key: %d (< 1) number of references specified", nrefs); |