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

Search Discussions

  • Heikki Linnakangas at Feb 25, 2009 at 1:44 pm

    Alan Li wrote:
    Running the following against HEAD and REL8_3_6:
    Same problem exists in 8.2 and 8.1 as well. The code in ruleutils.c is
    similar in 8.0 as well, except that the Assertion isn't there.
    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.
    Looks good to me, at least.

    --
    Heikki Linnakangas
    EnterpriseDB http://www.enterprisedb.com
  • Tom Lane at Feb 25, 2009 at 4:18 pm

    Alan Li writes:
    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:
    Thanks for the report. Looks like I forgot to consider the possibility
    that type coercion nodes would get inserted atop the CaseTestExpr.
    You can break the other paths here too if you try things like
    case foo when true then ...
    where foo is of a domain over boolean.

    Will fix.

    regards, tom lane

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
grouppgsql-hackers @
categoriespostgresql
postedFeb 25, '09 at 7:13a
activeFeb 25, '09 at 4:18p
posts3
users3
websitepostgresql.org...
irc#postgresql

People

Translate

site design / logo © 2021 Grokbase