diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2001-01-03 22:01:05 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2001-01-03 22:01:05 +0000 |
commit | 60500d58bc7d54afc6d1b64d352f6fa97021f0b5 (patch) | |
tree | 5f12dfb930a0cf9474364160919ccd22eccd5f96 /src/backend/utils/adt/ruleutils.c | |
parent | 676cf18c5b7a704dbeb71cc90a52e04c3316c9cf (diff) | |
download | postgresql-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.c | 27 |
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. */ |