mirror of
https://github.com/postgres/postgres.git
synced 2025-11-18 02:02:55 +03:00
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.
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/nodes/outfuncs.c,v 1.309 2007/06/05 21:31:04 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/nodes/outfuncs.c,v 1.310 2007/06/11 01:16:22 tgl Exp $
|
||||
*
|
||||
* NOTES
|
||||
* Every node type that can appear in stored rules' parsetrees *must*
|
||||
@@ -1058,6 +1058,15 @@ _outSetToDefault(StringInfo str, SetToDefault *node)
|
||||
WRITE_INT_FIELD(typeMod);
|
||||
}
|
||||
|
||||
static void
|
||||
_outCurrentOfExpr(StringInfo str, CurrentOfExpr *node)
|
||||
{
|
||||
WRITE_NODE_TYPE("CURRENTOFEXPR");
|
||||
|
||||
WRITE_UINT_FIELD(cvarno);
|
||||
WRITE_STRING_FIELD(cursor_name);
|
||||
}
|
||||
|
||||
static void
|
||||
_outTargetEntry(StringInfo str, TargetEntry *node)
|
||||
{
|
||||
@@ -2229,6 +2238,9 @@ _outNode(StringInfo str, void *obj)
|
||||
case T_SetToDefault:
|
||||
_outSetToDefault(str, obj);
|
||||
break;
|
||||
case T_CurrentOfExpr:
|
||||
_outCurrentOfExpr(str, obj);
|
||||
break;
|
||||
case T_TargetEntry:
|
||||
_outTargetEntry(str, obj);
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user