aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/ruleutils.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2001-01-03 22:01:05 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2001-01-03 22:01:05 +0000
commit60500d58bc7d54afc6d1b64d352f6fa97021f0b5 (patch)
tree5f12dfb930a0cf9474364160919ccd22eccd5f96 /src/backend/utils/adt/ruleutils.c
parent676cf18c5b7a704dbeb71cc90a52e04c3316c9cf (diff)
downloadpostgresql-60500d58bc7d54afc6d1b64d352f6fa97021f0b5.tar.gz
postgresql-60500d58bc7d54afc6d1b64d352f6fa97021f0b5.zip
Fix breakage of rules using NOTIFY actions, per bug report and patch
from sergiop@sinectis.com.ar.
Diffstat (limited to 'src/backend/utils/adt/ruleutils.c')
-rw-r--r--src/backend/utils/adt/ruleutils.c27
1 files changed, 26 insertions, 1 deletions
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
index 99818c324ac..3f9264308dd 100644
--- a/src/backend/utils/adt/ruleutils.c
+++ b/src/backend/utils/adt/ruleutils.c
@@ -3,7 +3,7 @@
* back to source text
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/ruleutils.c,v 1.70 2000/11/18 04:40:18 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/ruleutils.c,v 1.71 2001/01/03 22:01:05 tgl Exp $
*
* This software is copyrighted by Jan Wieck - Hamburg.
*
@@ -97,6 +97,7 @@ static void get_select_query_def(Query *query, deparse_context *context);
static void get_insert_query_def(Query *query, deparse_context *context);
static void get_update_query_def(Query *query, deparse_context *context);
static void get_delete_query_def(Query *query, deparse_context *context);
+static void get_utility_query_def(Query *query, deparse_context *context);
static void get_basic_select_query(Query *query, deparse_context *context);
static void get_setop_query(Node *setOp, Query *query,
deparse_context *context, bool toplevel);
@@ -874,6 +875,10 @@ get_query_def(Query *query, StringInfo buf, List *parentrtables)
appendStringInfo(buf, "NOTHING");
break;
+ case CMD_UTILITY:
+ get_utility_query_def(query, &context);
+ break;
+
default:
elog(ERROR, "get_ruledef of %s: query command type %d not implemented yet",
rulename, query->commandType);
@@ -1310,6 +1315,26 @@ get_delete_query_def(Query *query, deparse_context *context)
}
}
+
+/* ----------
+ * get_utility_query_def - Parse back a UTILITY parsetree
+ * ----------
+ */
+static void
+get_utility_query_def(Query *query, deparse_context *context)
+{
+ StringInfo buf = context->buf;
+
+ if (query->utilityStmt && IsA(query->utilityStmt, NotifyStmt))
+ {
+ NotifyStmt *stmt = (NotifyStmt *) query->utilityStmt;
+ appendStringInfo(buf, "NOTIFY %s", quote_identifier(stmt->relname));
+ }
+ else
+ elog(ERROR, "get_utility_query_def: unexpected statement type");
+}
+
+
/*
* Find the RTE referenced by a (possibly nonlocal) Var.
*/