Support UPDATE/DELETE WHERE CURRENT OF cursor_name, per SQL standard.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 11 Jun 2007 01:16:30 +0000 (01:16 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 11 Jun 2007 01:16:30 +0000 (01:16 +0000)
commitbad6f4cc66587a54262f1b4104264e56a24df11f
treea339b0a8566fcdbd8db6a163b2a64fec8a91ee0b
parentbd89423af9a52828a0e0f74eddbfc377c989fa18
Support UPDATE/DELETE WHERE CURRENT OF cursor_name, per SQL standard.

Along the way, allow FOR UPDATE in non-WITH-HOLD cursors; there may once
have been a reason to disallow that, but it seems to work now, and it's
really rather necessary if you want to select a row via a cursor and then
update it in a concurrent-safe fashion.

Original patch by Arul Shaji, rather heavily editorialized by Tom Lane.
30 files changed:
doc/src/sgml/ref/declare.sgml
doc/src/sgml/ref/delete.sgml
doc/src/sgml/ref/update.sgml
src/backend/executor/Makefile
src/backend/executor/execCurrent.c [new file with mode: 0644]
src/backend/executor/execMain.c
src/backend/executor/execQual.c
src/backend/executor/nodeTidscan.c
src/backend/nodes/copyfuncs.c
src/backend/nodes/equalfuncs.c
src/backend/nodes/outfuncs.c
src/backend/nodes/readfuncs.c
src/backend/optimizer/path/clausesel.c
src/backend/optimizer/path/costsize.c
src/backend/optimizer/path/tidpath.c
src/backend/optimizer/plan/setrefs.c
src/backend/optimizer/prep/prepunion.c
src/backend/optimizer/util/clauses.c
src/backend/optimizer/util/var.c
src/backend/parser/analyze.c
src/backend/parser/gram.y
src/backend/parser/keywords.c
src/backend/parser/parse_expr.c
src/backend/rewrite/rewriteManip.c
src/backend/utils/adt/ruleutils.c
src/include/executor/executor.h
src/include/nodes/nodes.h
src/include/nodes/primnodes.h
src/test/regress/expected/portals.out
src/test/regress/sql/portals.sql