Thread: Assertion failure in new outer/semi/anti join code

Assertion failure in new outer/semi/anti join code

From
Gregory Stark
Date:
The following query causes an assertion failure on CVS head:

SELECT * FROM (SELECT 1 AS i) AS a WHERE NOT EXISTS (SELECT 1 WHERE 1 <> i);

TRAP: FailedAssertion("!(!bms_is_empty(min_righthand))", File: "initsplan.c", Line: 685)

Looks like it's assuming there's at least one relation on each side of the
join. Incidentally originally triggered with a VALUES clause but I think by
the point the code runs that distinction is long gone.

--  Gregory Stark EnterpriseDB          http://www.enterprisedb.com Ask me about EnterpriseDB's Slony Replication
support!


Re: Assertion failure in new outer/semi/anti join code

From
Tom Lane
Date:
Gregory Stark <stark@enterprisedb.com> writes:
> The following query causes an assertion failure on CVS head:

> SELECT * FROM (SELECT 1 AS i) AS a WHERE NOT EXISTS (SELECT 1 WHERE 1 <> i);

Fixed, thanks for the report.

> Looks like it's assuming there's at least one relation on each side of the
> join.

Yeah.  I don't think we can remove that assumption easily; best to just
not try to optimize this case.
        regards, tom lane