Fix UPDATE/DELETE ... WHERE CURRENT OF on a table with virtual columns.

Formerly, attempting to use WHERE CURRENT OF to update or delete from
a table with virtual generated columns would fail with the error
"WHERE CURRENT OF on a view is not implemented".

The reason was that the check preventing WHERE CURRENT OF from being
used on a view was in replace_rte_variables_mutator(), which presumed
that the only way it could get there was as part of rewriting a query
on a view. That is no longer the case, since replace_rte_variables()
is now also used to expand the virtual generated columns of a table.

Fix by doing the check for WHERE CURRENT OF on a view at parse time.
This is safe, since it is no longer possible for the relkind to change
after the query is parsed (as of b23cd185f).

Reported-by: Satyanarayana Narlapuram <[email protected]>
Author: Satyanarayana Narlapuram <[email protected]>
Author: Dean Rasheed <[email protected]>
Discussion: 
https://postgr.es/m/CAHg+QDc_TwzSgb=b_qgnlt3mvzdmrk23rlb+rkansqkdf40...@mail.gmail.com
Backpatch-through: 18

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/5548a969b65d4e0d5045d9db0bcac062a9a3e3c7

Modified Files
--------------
src/backend/parser/analyze.c                    | 16 +++++++++++++
src/backend/rewrite/rewriteManip.c              | 19 ----------------
src/test/regress/expected/generated_virtual.out | 30 +++++++++++++++++++++++++
src/test/regress/expected/portals.out           | 11 +++++++++
src/test/regress/sql/generated_virtual.sql      | 15 +++++++++++++
src/test/regress/sql/portals.sql                |  5 +++++
6 files changed, 77 insertions(+), 19 deletions(-)

Reply via email to