From 514ce7a331c5bea8e55b106d624e55732a002295 Mon Sep 17 00:00:00 2001 From: Tom Lane 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 a88f5ef93c..821cc99e9f 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); }