I'm thinking about exporting the raw parser and related modules as a C
library. Though this will not be an immediate benefit of PostgreSQL
itself, it will be a huge benefit for any PostgreSQL
applications/middle ware those need to parse SQL statements.
For example, pgpool-II parses queries to know if it's a read query or
not. In other case, it needs to know if a SELECT statement includes
any temporal constructor such as CURRENT_TIME_STAMP. These are not a
trivial job since SQL grammar is complex. For this purpose pgpool-II
copies PostgreSQL parser code and use it. Of course maintaining the
part is pain since PostgreSQL's parser will be changed from release to
I believe not only pgpool-II but some connection pooling middle wares
need SQL parser as well(pgbouncer?). Also any tool which accepts SQL
statement as its input would also need SQL parser(pgAdmin?). For them
exported raw parser will be a huge benefit.
The implementation will not be very difficult since pgpool-II has
already done most of necessary work for this:
- extract raw parser part from parser directory, which include gram.y,
scan.l and keywords.c
- extract utility functions needed to handle raw parse tree:
nodes/nodes.c makefunc.c etc.
- create an exportable version of memory manager
- create an exportable exception handling routines(i.e. elog)
- wrap all of above into a libXX*.so
I think those works are essentially a refactoring of existing raw
parser, and will not add performance degration nor maintenance cost.
SRA OSS, Inc. Japan
pgsql-hackers by date
|Next:||From: Heikki Linnakangas||Date: 2010-05-27 01:06:17|
|Subject: Re: functional call named notation clashes with SQL feature|
|Previous:||From: Robert Haas||Date: 2010-05-27 01:00:43|
|Subject: Re: Distclean does not remove gram.c|