pgsql: Don't mess up pstate->p_next_resno in transformOnConflictClause(

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Don't mess up pstate->p_next_resno in transformOnConflictClause(
Date: 2016-12-04 20:03:06
Message-ID: E1cDd06-0002k2-VK@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Don't mess up pstate->p_next_resno in transformOnConflictClause().

transformOnConflictClause incremented p_next_resno while generating the
phony targetlist for the EXCLUDED pseudo-rel. Then that field got
incremented some more during transformTargetList, possibly leading to
free_parsestate concluding that we'd overrun the allowed length of a tlist,
as reported by Justin Pryzby.

We could fix this by resetting p_next_resno to 1 after using it for the
EXCLUDED pseudo-rel tlist, but it seems easier and less coupled to other
places if we just don't use that field at all in this loop. (Note that
this doesn't change anything about the resnos that end up appearing in
the main target list, because those are all replaced with target-column
numbers by updateTargetListEntry.)

In passing, fix incorrect type OID assigned to the whole-row Var for
"EXCLUDED.*" (somehow this escaped having any bad consequences so far,
but it's certainly wrong); remove useless assignment to var->location;
pstrdup the column names in case of a relcache flush; and improve
nearby comments.

Back-patch to 9.5 where ON CONFLICT was introduced.

Report: https://postgr.es/m/20161204163237.GA8030@telsasoft.com

Branch
------
REL9_6_STABLE

Details
-------
http://git.postgresql.org/pg/commitdiff/da05d0ebc637a84ba41a172b32552557ebad199f

Modified Files
--------------
src/backend/parser/analyze.c | 27 ++++++++++++---------------
1 file changed, 12 insertions(+), 15 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Michael Paquier 2016-12-05 01:24:56 Re: pgsql: Add putenv support for msvcrt from Visual Studio 2013
Previous Message Noah Misch 2016-12-04 05:26:14 pgsql: Document recipe for testing compatibility with old Perl.