pgsql: Fix unportable code in pgbench.

Started by Tom Lanealmost 7 years ago3 messageshackers
Jump to latest
#1Tom Lane
tgl@sss.pgh.pa.us

Fix unportable code in pgbench.

The buildfarm points out that UINT64_FORMAT might not work with sscanf;
it's calibrated for our printf implementation, which might not agree
with the platform-supplied sscanf. Fall back to just accepting an
unsigned long, which is already more than the documentation promises.

Oversight in e6c3ba7fb; back-patch to v11, as that was.

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/1a75c1d0c5d967ea2adcd7129092687cded4e7bf

Modified Files
--------------
src/bin/pgbench/pgbench.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)

#2Fabien COELHO
coelho@cri.ensmp.fr
In reply to: Tom Lane (#1)
Re: pgsql: Fix unportable code in pgbench.

Hello Tom,

Fix unportable code in pgbench.

Sorry for this unforseen issue... portability is a pain:-(

The buildfarm points out that UINT64_FORMAT might not work with sscanf;
it's calibrated for our printf implementation, which might not agree
with the platform-supplied sscanf. Fall back to just accepting an
unsigned long, which is already more than the documentation promises.

Yep, but ISTM that it is down to 32 bits, whereas the PRNG seed expects 48
bits a few lines below:

base_random_sequence.xseed[0] = iseed & 0xFFFF;
base_random_sequence.xseed[1] = (iseed >> 16) & 0xFFFF;
base_random_sequence.xseed[2] = (iseed >> 32) & 0xFFFF;

So the third short is now always 0. Hmmm. I'll propose another option over
the week-end.

--
Fabien.

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Fabien COELHO (#2)
Re: pgsql: Fix unportable code in pgbench.

Fabien COELHO <coelho@cri.ensmp.fr> writes:

Fix unportable code in pgbench.

Sorry for this unforseen issue... portability is a pain:-(

I think it's my fault, actually --- I don't remember how much of
that patch was yours.

Yep, but ISTM that it is down to 32 bits,

Only on 32-bit-long machines, which are a dwindling minority (except
for Windows, which I don't really care about).

So the third short is now always 0. Hmmm. I'll propose another option over
the week-end.

I suppose we could put pg_strtouint64 somewhere where pgbench can use it,
but TBH I don't think it's worth the trouble. The set of people using
the --random-seed=int option at all is darn near empty, I suspect,
and the documentation only says you can write an int there.

regards, tom lane