From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | pgsql-committers(at)postgresql(dot)org |
Subject: | pgsql: Improve handling of numeric-valued variables in pgbench. |
Date: | 2016-05-06 15:08:57 |
Message-ID: | E1ayhNB-00063B-Mt@gemulon.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-committers |
Improve handling of numeric-valued variables in pgbench.
The previous coding always stored variable values as strings, doing
conversion on-the-fly when a numeric value was needed or a number was to be
assigned. This was a bit inefficient and risked loss of precision for
floating-point values. The precision aspect had been hacked around by
printing doubles in "%.18e" format, which is ugly and has machine-dependent
results. Instead, arrange to preserve an assigned numeric value in the
original binary numeric format, converting to string only when and if
needed. When we do need to convert a double to string, convert in "%g"
format with DBL_DIG precision, which is the standard way to do it and
produces the least surprising results in most cases.
The implementation supports storing both a string value and a numeric
value for any one variable, with lazy conversion between them. I also
arranged for lazy re-sorting of the variable array when new variables are
added. That was mainly to allow a clean refactoring of putVariable()
into two levels of subroutine, but it may allow us to save a few sorts.
Discussion: <9188(dot)1462475559(at)sss(dot)pgh(dot)pa(dot)us>
Branch
------
master
Details
-------
http://git.postgresql.org/pg/commitdiff/9515299485a591b3a8f03c118d11809d01663665
Modified Files
--------------
src/bin/pgbench/pgbench.c | 274 +++++++++++++++++++++++++++++++---------------
1 file changed, 188 insertions(+), 86 deletions(-)
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2016-05-06 16:09:46 | pgsql: Fix possible read past end of string in to_timestamp(). |
Previous Message | Tom Lane | 2016-05-06 14:39:42 | pgsql: Docs: fix \crosstabview example. |