diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2007-06-11 22:22:42 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2007-06-11 22:22:42 +0000 |
commit | a9545b3aef0d41fdb84bc6a30fa2e563020acad2 (patch) | |
tree | 4b6f9353cf6846a6b1ce2b96ddbf2ffbf2a42d58 /src/backend/utils/adt/ruleutils.c | |
parent | bdc71c2cb162297f7f69d8d2be113c2689f5bd6e (diff) | |
download | postgresql-a9545b3aef0d41fdb84bc6a30fa2e563020acad2.tar.gz postgresql-a9545b3aef0d41fdb84bc6a30fa2e563020acad2.zip |
Improve UPDATE/DELETE WHERE CURRENT OF so that they can be used from plpgsql
with a plpgsql-defined cursor. The underlying mechanism for this is that the
main SQL engine will now take "WHERE CURRENT OF $n" where $n is a refcursor
parameter. Not sure if we should document that fact or consider it an
implementation detail. Per discussion with Pavel Stehule.
Diffstat (limited to 'src/backend/utils/adt/ruleutils.c')
-rw-r--r-- | src/backend/utils/adt/ruleutils.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index c6f6b882487..49c7821cef0 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.260 2007/06/11 01:16:29 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.261 2007/06/11 22:22:42 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -4136,8 +4136,16 @@ get_rule_expr(Node *node, deparse_context *context, break; case T_CurrentOfExpr: - appendStringInfo(buf, "CURRENT OF %s", - quote_identifier(((CurrentOfExpr *) node)->cursor_name)); + { + CurrentOfExpr *cexpr = (CurrentOfExpr *) node; + + if (cexpr->cursor_name) + appendStringInfo(buf, "CURRENT OF %s", + quote_identifier(cexpr->cursor_name)); + else + appendStringInfo(buf, "CURRENT OF $%d", + cexpr->cursor_param); + } break; case T_List: |