From 514ce7a331c5bea8e55b106d624e55732a002295 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Sun, 1 Oct 2006 17:23:38 +0000
Subject: [PATCH] Fix overly enthusiastic Assert introduced in 8.1: it's
 expecting a CaseTestExpr, but forgot that the optimizer is sometimes able to
 replace CaseTestExpr by Const.

---
 src/backend/utils/adt/ruleutils.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
index a88f5ef93c6..821cc99e9f2 100644
--- a/src/backend/utils/adt/ruleutils.c
+++ b/src/backend/utils/adt/ruleutils.c
@@ -2,7 +2,7 @@
  * ruleutils.c	- Functions to convert stored expressions/querytrees
  *				back to source text
  *
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.232 2006/08/21 00:57:25 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.233 2006/10/01 17:23:38 tgl Exp $
  **********************************************************************/
 
 #include "postgres.h"
@@ -3584,14 +3584,18 @@ get_rule_expr(Node *node, deparse_context *context,
 						 * the optimizer's simplify_boolean_equality() may
 						 * have reduced this to just "CaseTestExpr" or
 						 * "NOT CaseTestExpr", for which we have to show
-						 * "TRUE" or "FALSE".
+						 * "TRUE" or "FALSE".  Also, depending on context
+						 * the original CaseTestExpr might have been reduced
+						 * to a Const (but we won't see "WHEN Const").
 						 */
 						if (IsA(w, OpExpr))
 						{
 							Node	   *rhs;
 
 							Assert(IsA(linitial(((OpExpr *) w)->args),
-									   CaseTestExpr));
+									   CaseTestExpr) ||
+								   IsA(linitial(((OpExpr *) w)->args),
+									   Const));
 							rhs = (Node *) lsecond(((OpExpr *) w)->args);
 							get_rule_expr(rhs, context, false);
 						}
-- 
GitLab