pgsql: pgbench: Support double constants and functions.

Started by Robert Haasabout 10 years ago5 messageshackers
Jump to latest
#1Robert Haas
robertmhaas@gmail.com

pgbench: Support double constants and functions.

The new functions are pi(), random(), random_exponential(),
random_gaussian(), and sqrt(). I was worried that this would be
slower than before, but, if anything, it actually turns out to be
slightly faster, because we now express the built-in pgbench scripts
using fewer lines; each \setrandom can be merged into a subsequent
\set.

Fabien Coelho

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/86c43f4e22c0771fd0cc6bce2799802c894ee2ec

Modified Files
--------------
doc/src/sgml/ref/pgbench.sgml | 283 +++++++++++++++++---------
src/bin/pgbench/exprparse.y | 43 +++-
src/bin/pgbench/exprscan.l | 5 +
src/bin/pgbench/pgbench.c | 450 ++++++++++++++++++++++++++++++++++--------
src/bin/pgbench/pgbench.h | 35 +++-
5 files changed, 624 insertions(+), 192 deletions(-)

--
Sent via pgsql-committers mailing list (pgsql-committers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-committers

#2Michael Paquier
michael@paquier.xyz
In reply to: Robert Haas (#1)
Re: [COMMITTERS] pgsql: pgbench: Support double constants and functions.

On Tue, Mar 29, 2016 at 9:52 AM, Robert Haas <rhaas@postgresql.org> wrote:

pgbench: Support double constants and functions.

The new functions are pi(), random(), random_exponential(),
random_gaussian(), and sqrt(). I was worried that this would be
slower than before, but, if anything, it actually turns out to be
slightly faster, because we now express the built-in pgbench scripts
using fewer lines; each \setrandom can be merged into a subsequent
\set.

Buildfarm is complaining about a couple of things here:
src/bin/pgbench/exprparse.c(139): error C2365: 'DOUBLE' :
redefinition; previous definition was 'typedef'
[C:\buildfarm\buildenv\HEAD\pgsql.build\pgbench.vcxproj]
src/bin/pgbench/pgbench.c(1046): error C2065: 'INT64_MIN' :
undeclared identifier
[C:\buildfarm\buildenv\HEAD\pgsql.build\pgbench.vcxproj]
src/bin/pgbench/exprparse.c(139): error C2086: 'yytokentype DOUBLE'
: redefinition [C:\buildfarm\buildenv\HEAD\pgsql.build\pgbench.vcxproj]
src/bin/pgbench/pgbench.c(1046): error C2065: 'INT64_MAX' :
undeclared identifier
[C:\buildfarm\buildenv\HEAD\pgsql.build\pgbench.vcxproj]
src/bin/pgbench/exprscan.l(131): error C2275: 'DOUBLE' : illegal use
of this type as an expression (src/bin/pgbench/exprparse.c)
[C:\buildfarm\buildenv\HEAD\pgsql.build\pgbench.vcxproj]

Instead of INT64_MIN and INT64_MAX, I think that it would be better to
use PG_INT64_MIN and PG_INT64_MAX. Note as well that DOUBLE is an
existing variable type in VS (while INTEGER is not), and it is true
that it is not directly documented:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms221627%28v=vs.85%29.aspx
A way to fix compilation here is to rename those tokens to something
that will never conflict, like in the attached to DOUBLE_VAR and
INTEGER_VAR, both exprparse.y and exprparse.l need an update.
--
Michael

Attachments:

pgbench-fix-vs.patchbinary/octet-stream; name=pgbench-fix-vs.patchDownload+8-8
#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Michael Paquier (#2)
Re: [COMMITTERS] pgsql: pgbench: Support double constants and functions.

Michael Paquier <michael.paquier@gmail.com> writes:

On Tue, Mar 29, 2016 at 9:52 AM, Robert Haas <rhaas@postgresql.org> wrote:

pgbench: Support double constants and functions.

Instead of INT64_MIN and INT64_MAX, I think that it would be better to
use PG_INT64_MIN and PG_INT64_MAX.

Indeed.

Note as well that DOUBLE is an
existing variable type in VS (while INTEGER is not),

Ooops; that one was harder to foresee.

A way to fix compilation here is to rename those tokens to something
that will never conflict, like in the attached to DOUBLE_VAR and
INTEGER_VAR, both exprparse.y and exprparse.l need an update.

Agreed, but these symbols represent constants not variables, so
I used DOUBLE_CONST and INTEGER_CONST instead. Pushed with those
corrections, so that we can get back to looking at my own bugs :-(

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#4Michael Paquier
michael@paquier.xyz
In reply to: Tom Lane (#3)
Re: [COMMITTERS] pgsql: pgbench: Support double constants and functions.

On Tue, Mar 29, 2016 at 1:56 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Michael Paquier <michael.paquier@gmail.com> writes:

On Tue, Mar 29, 2016 at 9:52 AM, Robert Haas <rhaas@postgresql.org> wrote:

pgbench: Support double constants and functions.

Instead of INT64_MIN and INT64_MAX, I think that it would be better to
use PG_INT64_MIN and PG_INT64_MAX.

Indeed.

Note as well that DOUBLE is an
existing variable type in VS (while INTEGER is not),

Ooops; that one was harder to foresee.

Thanks for the push.

A way to fix compilation here is to rename those tokens to something
that will never conflict, like in the attached to DOUBLE_VAR and
INTEGER_VAR, both exprparse.y and exprparse.l need an update.

Agreed, but these symbols represent constants not variables, so
I used DOUBLE_CONST and INTEGER_CONST instead. Pushed with those
corrections, so that we can get back to looking at my own bugs :-(

I think I know what's going on here...
--
Michael

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#5Robert Haas
robertmhaas@gmail.com
In reply to: Tom Lane (#3)
Re: [COMMITTERS] pgsql: pgbench: Support double constants and functions.

On Tue, Mar 29, 2016 at 12:56 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Michael Paquier <michael.paquier@gmail.com> writes:

On Tue, Mar 29, 2016 at 9:52 AM, Robert Haas <rhaas@postgresql.org> wrote:

pgbench: Support double constants and functions.

Instead of INT64_MIN and INT64_MAX, I think that it would be better to
use PG_INT64_MIN and PG_INT64_MAX.

Indeed.

Note as well that DOUBLE is an
existing variable type in VS (while INTEGER is not),

Ooops; that one was harder to foresee.

A way to fix compilation here is to rename those tokens to something
that will never conflict, like in the attached to DOUBLE_VAR and
INTEGER_VAR, both exprparse.y and exprparse.l need an update.

Agreed, but these symbols represent constants not variables, so
I used DOUBLE_CONST and INTEGER_CONST instead. Pushed with those
corrections, so that we can get back to looking at my own bugs :-(

Oops. Thanks for cleaning up my mess.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers