mirror of
https://github.com/postgres/postgres.git
synced 2025-11-04 20:11:56 +03:00
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
This commit is contained in:
@@ -345,7 +345,7 @@ libpqrcv_identify_system(WalReceiverConn *conn, TimeLineID *primary_tli,
|
||||
ntuples, nfields, 3, 1)));
|
||||
}
|
||||
primary_sysid = pstrdup(PQgetvalue(res, 0, 0));
|
||||
*primary_tli = pg_atoi(PQgetvalue(res, 0, 1), 4, 0);
|
||||
*primary_tli = pg_strtoint32(PQgetvalue(res, 0, 1));
|
||||
PQclear(res);
|
||||
|
||||
*server_version = PQserverVersion(conn->streamConn);
|
||||
@@ -480,7 +480,7 @@ libpqrcv_endstreaming(WalReceiverConn *conn, TimeLineID *next_tli)
|
||||
if (PQnfields(res) < 2 || PQntuples(res) != 1)
|
||||
ereport(ERROR,
|
||||
(errmsg("unexpected result set after end-of-streaming")));
|
||||
*next_tli = pg_atoi(PQgetvalue(res, 0, 0), sizeof(uint32), 0);
|
||||
*next_tli = pg_strtoint32(PQgetvalue(res, 0, 0));
|
||||
PQclear(res);
|
||||
|
||||
/* the result set should be followed by CommandComplete */
|
||||
|
||||
Reference in New Issue
Block a user