• Tom Lane's avatar
    Improve handling of array elements as getdiag_targets and cursor_variables. · 55caaaeb
    Tom Lane authored
    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
    55caaaeb
pl_gram.y 103 KB