Thread: [COMMITTERS] pgsql: Improve handling of array elements as getdiag_targets andcursor
[COMMITTERS] pgsql: Improve handling of array elements as getdiag_targets andcursor
From
Tom Lane
Date:
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(-)