diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2007-06-11 01:16:30 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2007-06-11 01:16:30 +0000 |
commit | 6808f1b1de0ebcd4af558ba84c3226b2027f55ea (patch) | |
tree | ebd12580d3aaca6ec79b5d99563a1eff02451e88 /src/backend/utils/adt/ruleutils.c | |
parent | 85d72f05167b87bc44464b2eabea8538f1fd1e45 (diff) | |
download | postgresql-6808f1b1de0ebcd4af558ba84c3226b2027f55ea.tar.gz postgresql-6808f1b1de0ebcd4af558ba84c3226b2027f55ea.zip |
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.
Diffstat (limited to 'src/backend/utils/adt/ruleutils.c')
-rw-r--r-- | src/backend/utils/adt/ruleutils.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index 78be35ef36d..c6f6b882487 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.259 2007/06/05 21:31:06 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.260 2007/06/11 01:16:29 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -3086,6 +3086,7 @@ isSimpleNode(Node *node, Node *parentNode, int prettyFlags) case T_Param: case T_CoerceToDomainValue: case T_SetToDefault: + case T_CurrentOfExpr: /* single words: always simple */ return true; @@ -4134,6 +4135,11 @@ get_rule_expr(Node *node, deparse_context *context, appendStringInfo(buf, "DEFAULT"); break; + case T_CurrentOfExpr: + appendStringInfo(buf, "CURRENT OF %s", + quote_identifier(((CurrentOfExpr *) node)->cursor_name)); + break; + case T_List: { char *sep; |