From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | pgsql-committers(at)lists(dot)postgresql(dot)org |
Subject: | pgsql: Improve parser's reporting of statement start locations. |
Date: | 2024-10-22 15:36:31 |
Message-ID: | E1t3Gvw-001vQ3-7E@gemulon.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-committers |
Improve parser's reporting of statement start locations.
Up to now, the parser's reporting of a statement's stmt_location
included any preceding whitespace or comments. This isn't really
desirable but was done to avoid accounting honestly for nonterminals
that reduce to empty. It causes problems for pg_stat_statements,
which partially compensates by manually stripping whitespace, but
is not bright enough to strip /*-style comments. There will be
more problems with an upcoming patch to improve reporting of errors
in extension scripts, so it's time to do something about this.
The thing we have to do to make it work right is to adjust
YYLLOC_DEFAULT to scan the inputs of each production to find the
first one that has a valid location (i.e., did not reduce to
empty). In theory this adds a little bit of per-reduction overhead,
but in practice it's negligible. I checked by measuring the time
to run raw_parser() on the contents of information_schema.sql, and
there was basically no change.
Having done that, we can rely on any nonterminal that didn't reduce
to completely empty to have a correct starting location, and we don't
need the kluges the stmtmulti production formerly used.
This should have a side benefit of allowing parse error reports to
include an error position in some cases where they formerly failed to
do so, due to trying to report the position of an empty nonterminal.
I did not go looking for an example though. The one previously known
case where that could happen (OptSchemaEltList) no longer needs the
kluge it had; but I rather doubt that that was the only case.
Discussion: https://postgr.es/m/ZvV1ClhnbJLCz7Sm@msg.df7cb.de
Branch
------
master
Details
-------
https://git.postgresql.org/pg/commitdiff/14e5680eee19df8b41ef77330d0b3857f498e4f7
Modified Files
--------------
contrib/pg_stat_statements/expected/select.out | 5 +-
contrib/pg_stat_statements/sql/select.sql | 3 +-
src/backend/nodes/queryjumblefuncs.c | 6 +++
src/backend/parser/gram.y | 66 +++++++++-----------------
4 files changed, 34 insertions(+), 46 deletions(-)
From | Date | Subject | |
---|---|---|---|
Next Message | Jeff Davis | 2024-10-22 19:48:13 | pgsql: Change pg_*_relation_stats() functions to return type to void. |
Previous Message | Fujii Masao | 2024-10-22 14:58:42 | pgsql: ecpg: Refactor ecpg_log() to skip unnecessary calls to ECPGget_s |