Thread: pgsql: Make pgbench's expression lexer reentrant.

pgsql: Make pgbench's expression lexer reentrant.

From
Tom Lane
Date:
Make pgbench's expression lexer reentrant.

This is a necessary preliminary step for making it play with psqlscan.l
given the way I set up the lexer input-buffer sharing mechanism in commit
0ea9efbe9ec1bf07.

I've not tried to make it *actually* reentrant; there's still some static
variables laying about.  But flex thinks it's reentrant, and that's what
counts.

In support of that, fix exprparse.y to pass through the yyscan_t from the
caller.  Also do some minor code beautification, like not casting away
const.

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/429ee5a822db0e8faf669d77c810f1eeaaff1ab4

Modified Files
--------------
src/bin/pgbench/exprparse.y | 57 ++++++++++++++++++++-----------
src/bin/pgbench/exprscan.l  | 83 ++++++++++++++++++++++++++++-----------------
src/bin/pgbench/pgbench.c   | 15 +++++---
src/bin/pgbench/pgbench.h   | 26 +++++++++-----
4 files changed, 117 insertions(+), 64 deletions(-)


Re: pgsql: Make pgbench's expression lexer reentrant.

From
Andres Freund
Date:
Hi Tom,

On 2016-03-19 20:35:48 +0000, Tom Lane wrote:
> Make pgbench's expression lexer reentrant.
>
> This is a necessary preliminary step for making it play with psqlscan.l
> given the way I set up the lexer input-buffer sharing mechanism in commit
> 0ea9efbe9ec1bf07.
>
> I've not tried to make it *actually* reentrant; there's still some static
> variables laying about.  But flex thinks it's reentrant, and that's what
> counts.
>
> In support of that, fix exprparse.y to pass through the yyscan_t from the
> caller.  Also do some minor code beautification, like not casting away
> const.

This appears to have caused build failures on gaur, prairiedog, and
pademelon

http://pgbuildfarm.org/cgi-bin/show_log.pl?nm=gaur&dt=2016-03-20%2005%3A53%3A21
http://pgbuildfarm.org/cgi-bin/show_log.pl?nm=prairiedog&dt=2016-03-19%2023%3A21%3A23
http://pgbuildfarm.org/cgi-bin/show_log.pl?nm=pademelon&dt=2016-03-20%2007%3A59%3A38

Not sure you saw those already.

- Andres


Re: pgsql: Make pgbench's expression lexer reentrant.

From
Tom Lane
Date:
Andres Freund <andres@anarazel.de> writes:
> On 2016-03-19 20:35:48 +0000, Tom Lane wrote:
>> Make pgbench's expression lexer reentrant.

> This appears to have caused build failures on gaur, prairiedog, and
> pademelon

Yeah, I know.  I have a plan for fixing it but wanted to get the
main pgbench parsing rewrite pushed first.

The problem seems to be that the ancient bison version these critters
are using has a bug for the combination of a reentrant lexer and a
non-reentrant parser.  Which it's not so surprising they'd not have
tested.  I think it won't be too painful to dodge this by making the
parser reentrant too (bison %pure-parser), and will look into that
this evening.

            regards, tom lane