aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/ruleutils.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2005-05-30 01:57:27 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2005-05-30 01:57:27 +0000
commit0832fb74dfc4128e6b2a7b38f84cbc4dd4bb46e5 (patch)
tree22677e61d576bf7e2cf397318364135249f15e32 /src/backend/utils/adt/ruleutils.c
parentcfd9be939e9c516243c5b6a49ad1e1a9a38f1052 (diff)
downloadpostgresql-0832fb74dfc4128e6b2a7b38f84cbc4dd4bb46e5.tar.gz
postgresql-0832fb74dfc4128e6b2a7b38f84cbc4dd4bb46e5.zip
Fix longstanding oversight in ruleutils.c: it doesn't regurgitate
a FOR UPDATE clause, if one is present.
Diffstat (limited to 'src/backend/utils/adt/ruleutils.c')
-rw-r--r--src/backend/utils/adt/ruleutils.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
index 56813eec39d..d10459a9bfe 100644
--- a/src/backend/utils/adt/ruleutils.c
+++ b/src/backend/utils/adt/ruleutils.c
@@ -3,7 +3,7 @@
* back to source text
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.196 2005/05/27 00:57:49 neilc Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.197 2005/05/30 01:57:27 tgl Exp $
*
* This software is copyrighted by Jan Wieck - Hamburg.
*
@@ -1919,6 +1919,28 @@ get_select_query_def(Query *query, deparse_context *context,
else
get_rule_expr(query->limitCount, context, false);
}
+
+ /* Add the FOR UPDATE/SHARE clause if present */
+ if (query->rowMarks != NIL)
+ {
+ if (query->forUpdate)
+ appendContextKeyword(context, " FOR UPDATE OF ",
+ -PRETTYINDENT_STD, PRETTYINDENT_STD, 0);
+ else
+ appendContextKeyword(context, " FOR SHARE OF ",
+ -PRETTYINDENT_STD, PRETTYINDENT_STD, 0);
+ sep = "";
+ foreach(l, query->rowMarks)
+ {
+ int rtindex = lfirst_int(l);
+ RangeTblEntry *rte = rt_fetch(rtindex, query->rtable);
+
+ appendStringInfo(buf, "%s%s",
+ sep,
+ quote_identifier(rte->eref->aliasname));
+ sep = ", ";
+ }
+ }
}
static void