Running the following against HEAD and REL8_3_6: create table foo (a varchar(500)); create view bar as select case foo.a when '1' then 'foo' else 'bar' end as fa from foo; \d bar
Causes as assertion in the backend: TRAP: FailedAssertion("!(((((Node*)(((list_head(((OpExpr *) w)->args))->data.ptr_value)))->type) == T_CaseTestExpr) || ((((Node*)(((list_head(((OpExpr *) w)->args))->data.ptr_value)))->type) == T_Const))", File: "ruleutils.c", Line: 4587 ) LOG: server process (PID 28408) was terminated by signal 6: Aborted Attached is a simple patch that appears to fix this problem, not sure if it suffices in general. Alan
*** a/src/backend/utils/adt/ruleutils.c --- b/src/backend/utils/adt/ruleutils.c *************** get_rule_expr(Node *node, deparse_contex *** 4582,4592 **** Node *rhs; Assert(IsA(linitial(((OpExpr *) w)->args), CaseTestExpr) || IsA(linitial(((OpExpr *) w)->args), ! Const)); rhs = (Node *) lsecond(((OpExpr *) w)->args); get_rule_expr(rhs, context, false); } else if (IsA(w, CaseTestExpr)) appendStringInfo(buf, "TRUE"); --- 4582,4594 ---- Node *rhs; Assert(IsA(linitial(((OpExpr *) w)->args), CaseTestExpr) || IsA(linitial(((OpExpr *) w)->args), ! Const) || ! IsA(linitial(((OpExpr *) w)->args), ! RelabelType)); rhs = (Node *) lsecond(((OpExpr *) w)->args); get_rule_expr(rhs, context, false); } else if (IsA(w, CaseTestExpr)) appendStringInfo(buf, "TRUE");
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers