From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | pgsql-committers(at)postgresql(dot)org |
Subject: | pgsql: Improve handling of array elements as getdiag_targets and cursor |
Date: | 2016-12-13 21:33:17 |
Message-ID: | E1cGuhJ-0003CQ-59@gemulon.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-committers |
Improve handling of array elements as getdiag_targets and cursor_variables.
There's no good reason why plpgsql's GET DIAGNOSTICS statement can't
support an array element as target variable, since the execution code
already uses the generic exec_assign_value() function to assign to it.
Hence, refactor the grammar to allow that, by making getdiag_target
depend on the assign_var production.
Ideally we'd also let a cursor_variable expand to an element of a
refcursor[] array, but that's substantially harder since those statements
also have to handle bound-cursor-variable cases. For now, just make sure
the reported error is sensible, ie "cursor variable must be a simple
variable" not "variable must be of type cursor or refcursor". The latter
was quite confusing from the user's viewpoint, since what he wrote
satisfies the claimed restriction.
Per bug #14463 from Zhou Digoal. Given the lack of previous complaints,
I see no need for a back-patch.
Discussion: https://postgr.es/m/20161213152548.14897.81245@wrigleys.postgresql.org
Branch
------
master
Details
-------
http://git.postgresql.org/pg/commitdiff/55caaaeba877eac1feb6481fb413fa04ae9046ac
Modified Files
--------------
src/pl/plpgsql/src/pl_gram.y | 35 +++++++++++++++++++++--------------
src/test/regress/expected/plpgsql.out | 10 ++++++----
src/test/regress/sql/plpgsql.sql | 10 ++++++----
3 files changed, 33 insertions(+), 22 deletions(-)
From | Date | Subject | |
---|---|---|---|
Next Message | Kevin Grittner | 2016-12-14 01:20:27 | pgsql: Back-patch fcff8a575198478023ada8a48e13b50f70054766 as a bug fix |
Previous Message | Tom Lane | 2016-12-13 18:20:51 | pgsql: Prevent planagg.c from failing on queries containing CTEs. |