From c9c8d53d800d173961b7b56365f4e41dfeeff707 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Sat, 27 Jan 2001 01:44:20 +0000
Subject: [PATCH] Refuse to try to attach a condition to a NOTIFY or other
 utility statement, rather than coredumping (as prior 7.1 code did) or
 silently dropping the condition (as 7.0 did).  This is annoying but there
 doesn't seem to be any good way to fix it, short of a major querytree
 restructuring.

---
 src/backend/rewrite/rewriteManip.c | 30 +++++++++++++++++++++++++++++-
 1 file changed, 29 insertions(+), 1 deletion(-)

diff --git a/src/backend/rewrite/rewriteManip.c b/src/backend/rewrite/rewriteManip.c
index 072204167f8..d83dafa3c63 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.54 2001/01/24 19:43:05 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteManip.c,v 1.55 2001/01/27 01:44:20 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -589,6 +589,20 @@ AddQual(Query *parsetree, Node *qual)
 	if (qual == NULL)
 		return;
 
+	if (parsetree->commandType == CMD_UTILITY)
+	{
+		/*
+		 * 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.
+		 */
+		if (parsetree->utilityStmt && IsA(parsetree->utilityStmt, NotifyStmt))
+			elog(ERROR, "Conditional NOTIFY is not implemented");
+		else
+			elog(ERROR, "Conditional utility statements are not implemented");
+	}
+
 	/* INTERSECT want's the original, but we need to copy - Jan */
 	copy = copyObject(qual);
 
@@ -616,6 +630,20 @@ AddHavingQual(Query *parsetree, Node *havingQual)
 	if (havingQual == NULL)
 		return;
 
+	if (parsetree->commandType == CMD_UTILITY)
+	{
+		/*
+		 * 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.
+		 */
+		if (parsetree->utilityStmt && IsA(parsetree->utilityStmt, NotifyStmt))
+			elog(ERROR, "Conditional NOTIFY is not implemented");
+		else
+			elog(ERROR, "Conditional utility statements are not implemented");
+	}
+
 	/* INTERSECT want's the original, but we need to copy - Jan */
 	copy = copyObject(havingQual);