pgsql: Fix bug around assignment expressions containing indirections.

From: Andres Freund <andres(at)anarazel(dot)de>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Fix bug around assignment expressions containing indirections.
Date: 2015-07-24 09:58:06
Message-ID: E1ZIZjy-0005Ec-W1@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Fix bug around assignment expressions containing indirections.

Handling of assigned-to expressions with indirection (e.g. set f1[1] =
3) was broken for ON CONFLICT DO UPDATE. The problem was that
ParseState was consulted to determine if an INSERT-appropriate or
UPDATE-appropriate behavior should be used when transforming expressions
with indirections. When the wrong path was taken the old row was
substituted with NULL, leading to wrong results..

To fix remove p_is_update and only use p_is_insert to decide how to
transform the assignment expression, and uset p_is_insert while parsing
the on conflict statement. This isn't particularly pretty, but it's not
any worse than before.

Author: Peter Geoghegan, slightly edited by me
Discussion: CAM3SWZS8RPvA=KFxADZWw3wAHnnbxMxDzkEC6fNaFc7zSm411w(at)mail(dot)gmail(dot)com
Backpatch: 9.5, where the feature was introduced

Branch
------
REL9_5_STABLE

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

Modified Files
--------------
src/backend/parser/analyze.c | 8 +++++++-
src/include/parser/parse_node.h | 1 -
src/test/regress/expected/arrays.out | 21 +++++++++++++++++++++
src/test/regress/sql/arrays.sql | 13 +++++++++++++
4 files changed, 41 insertions(+), 2 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Andrew Dunstan 2015-07-24 13:47:56 pgsql: Fix treatment of nulls in jsonb_agg and jsonb_object_agg
Previous Message Andres Freund 2015-07-24 09:58:05 pgsql: Fix bug around assignment expressions containing indirections.