aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/ruleutils.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2007-06-11 22:22:42 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2007-06-11 22:22:42 +0000
commita9545b3aef0d41fdb84bc6a30fa2e563020acad2 (patch)
tree4b6f9353cf6846a6b1ce2b96ddbf2ffbf2a42d58 /src/backend/utils/adt/ruleutils.c
parentbdc71c2cb162297f7f69d8d2be113c2689f5bd6e (diff)
downloadpostgresql-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.c14
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: