diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/rewrite/rewriteManip.c | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/src/backend/rewrite/rewriteManip.c b/src/backend/rewrite/rewriteManip.c index 45115b8d045..238897d58eb 100644 --- a/src/backend/rewrite/rewriteManip.c +++ b/src/backend/rewrite/rewriteManip.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteManip.c,v 1.57 2001/04/18 20:42:55 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteManip.c,v 1.58 2001/09/07 20:52:31 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -592,15 +592,21 @@ AddQual(Query *parsetree, Node *qual) if (parsetree->commandType == CMD_UTILITY) { - /* - * Noplace to put the qual on a utility statement. + * There's noplace to put the qual on a utility statement. + * + * If it's a NOTIFY, silently ignore the qual; this means that the + * NOTIFY will execute, whether or not there are any qualifying rows. + * While clearly wrong, this is much more useful than refusing to + * execute the rule at all, and extra NOTIFY events are harmless for + * typical uses of NOTIFY. * - * For now, we expect utility stmt to be a NOTIFY, so give a specific - * error message for that case. + * If it isn't a NOTIFY, error out, since unconditional execution + * of other utility stmts is unlikely to be wanted. (This case is + * not currently allowed anyway, but keep the test for safety.) */ if (parsetree->utilityStmt && IsA(parsetree->utilityStmt, NotifyStmt)) - elog(ERROR, "Conditional NOTIFY is not implemented"); + return; else elog(ERROR, "Conditional utility statements are not implemented"); } @@ -634,15 +640,13 @@ AddHavingQual(Query *parsetree, Node *havingQual) if (parsetree->commandType == CMD_UTILITY) { - /* - * Noplace to put the qual on a utility statement. + * There's noplace to put the qual on a utility statement. * - * For now, we expect utility stmt to be a NOTIFY, so give a specific - * error message for that case. + * See comments in AddQual for motivation. */ if (parsetree->utilityStmt && IsA(parsetree->utilityStmt, NotifyStmt)) - elog(ERROR, "Conditional NOTIFY is not implemented"); + return; else elog(ERROR, "Conditional utility statements are not implemented"); } |