pgsql: Fix ecpg bugs caused by missing semicolons in the backendgramma - Mailing list pgsql-committers

From Tom Lane
Subject pgsql: Fix ecpg bugs caused by missing semicolons in the backendgramma
Date
Msg-id E1gxxwr-0001rY-SN@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Fix ecpg bugs caused by missing semicolons in the backend grammar.

The Bison documentation clearly states that a semicolon is required
after every grammar rule, and our scripts that generate ecpg's
grammar from the backend's implicitly assumed this is true.  But it
turns out that only ancient versions of Bison actually enforce that.
There have been a couple of rules without trailing semicolons in
gram.y for some time, and as a consequence, ecpg's grammar was faulty
and produced wrong output for the affected statements.

To fix, add the missing semis, and add some cross-checks to ecpg's
scripts so that they'll bleat if we mess this up again.

The cases that were broken were:
* "SET variable = DEFAULT" (but not "SET variable TO DEFAULT"),
  as well as allied syntaxes such as ALTER SYSTEM SET ... DEFAULT.
  These produced syntactically invalid output that the server
  would reject.
* Multiple type names in DROP TYPE/DOMAIN commands.  Only the
  first type name would be listed in the emitted command.

Per report from Daisuke Higuchi.  Back-patch to all supported versions.

Discussion: https://postgr.es/m/1803D792815FC24D871C00D17AE95905DB51CE@g01jpexmbkw24

Branch
------
REL9_4_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/53c2bb78db9f9bb47de14d61fc8b2a71cf1052ca

Modified Files
--------------
src/backend/parser/gram.y                  |  1 +
src/interfaces/ecpg/preproc/check_rules.pl | 12 ++++++++++--
src/interfaces/ecpg/preproc/parse.pl       |  8 ++++++++
3 files changed, 19 insertions(+), 2 deletions(-)


pgsql-committers by date:

Previous
From: Thomas Munro
Date:
Subject: pgsql: Tolerate EINVAL when calling fsync() on a directory.
Next
From: Thomas Munro
Date:
Subject: pgsql: Fix inconsistent out-of-memory error reporting in dsa.c.