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 ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers