Support UPDATE/DELETE WHERE CURRENT OF cursor_name, per SQL standard.

Tom Lane <tgl@sss.pgh.pa.us>

Commit: 6808f1b1de0ebcd4af558ba84c3226b2027f55ea
Author: Tom Lane <tgl@sss.pgh.pa.us>
Date: 2007-06-11T01:16:30Z
Releases: 8.3.0
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.

Files

PathChange+/−
doc/src/sgml/ref/declare.sgml modified +68 −81
doc/src/sgml/ref/delete.sgml modified +27 −5
doc/src/sgml/ref/update.sgml modified +25 −2
src/backend/executor/execCurrent.c added +185 −0
src/backend/executor/execMain.c modified +19 −1
src/backend/executor/execQual.c modified +42 −1
src/backend/executor/Makefile modified +2 −2
src/backend/executor/nodeTidscan.c modified +22 −3
src/backend/nodes/copyfuncs.c modified +18 −1
src/backend/nodes/equalfuncs.c modified +13 −1
src/backend/nodes/outfuncs.c modified +13 −1
src/backend/nodes/readfuncs.c modified +17 −1
src/backend/optimizer/path/clausesel.c modified +11 −1
src/backend/optimizer/path/costsize.c modified +17 −3
src/backend/optimizer/path/tidpath.c modified +13 −1
src/backend/optimizer/plan/setrefs.c modified +10 −1
src/backend/optimizer/prep/prepunion.c modified +9 −1
src/backend/optimizer/util/clauses.c modified +3 −1
src/backend/optimizer/util/var.c modified +41 −1
src/backend/parser/analyze.c modified +5 −5
src/backend/parser/gram.y modified +19 −6
src/backend/parser/keywords.c modified +2 −1
src/backend/parser/parse_expr.c modified +19 −1
src/backend/rewrite/rewriteManip.c modified +54 −2
src/backend/utils/adt/ruleutils.c modified +7 −1
src/include/executor/executor.h modified +8 −1
src/include/nodes/nodes.h modified +2 −1
src/include/nodes/primnodes.h modified +16 −1
src/test/regress/expected/portals.out modified +173 −0
src/test/regress/sql/portals.sql modified +80 −0