pgsql: Repair planner bug introduced in 8.2 by ability to rearrange

From: tgl(at)postgresql(dot)org (Tom Lane)
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Repair planner bug introduced in 8.2 by ability to rearrange
Date: 2007-05-22 23:24:09
Message-ID: 20070522232409.5D6A89FB22C@postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Log Message:
-----------
Repair planner bug introduced in 8.2 by ability to rearrange outer joins:
in cases where a sub-SELECT inserts a WHERE clause between two outer joins,
that clause may prevent us from re-ordering the two outer joins. The code
was considering only the joins' own ON-conditions in determining reordering
safety, which is not good enough. Add a "delay_upper_joins" flag to
OuterJoinInfo to flag that we have detected such a clause and higher-level
outer joins shouldn't be permitted to commute with this one. (This might
seem overly coarse, but given the current rules for OJ reordering, it's
sufficient AFAICT.)

The failure case is actually pretty narrow: it needs a WHERE clause within
the RHS of a left join that checks the RHS of a lower left join, but is not
strict for that RHS (else we'd have simplified the lower join to a plain
join). Even then no failure will be manifest unless the planner chooses to
rearrange the join order.

Per bug report from Adam Terrey.

Tags:
----
REL8_2_STABLE

Modified Files:
--------------
pgsql/src/backend/nodes:
copyfuncs.c (r1.353 -> r1.353.2.1)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/nodes/copyfuncs.c.diff?r1=1.353&r2=1.353.2.1)
equalfuncs.c (r1.287 -> r1.287.2.1)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/nodes/equalfuncs.c.diff?r1=1.287&r2=1.287.2.1)
outfuncs.c (r1.285.2.1 -> r1.285.2.2)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/nodes/outfuncs.c.diff?r1=1.285.2.1&r2=1.285.2.2)
pgsql/src/backend/optimizer/plan:
initsplan.c (r1.123.2.4 -> r1.123.2.5)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/plan/initsplan.c.diff?r1=1.123.2.4&r2=1.123.2.5)
pgsql/src/include/nodes:
relation.h (r1.128.2.2 -> r1.128.2.3)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/nodes/relation.h.diff?r1=1.128.2.2&r2=1.128.2.3)
pgsql/src/test/regress/expected:
join.out (r1.28.2.1 -> r1.28.2.2)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/expected/join.out.diff?r1=1.28.2.1&r2=1.28.2.2)
join_1.out (r1.10.2.1 -> r1.10.2.2)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/expected/join_1.out.diff?r1=1.10.2.1&r2=1.10.2.2)
pgsql/src/test/regress/sql:
join.sql (r1.19.2.1 -> r1.19.2.2)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/sql/join.sql.diff?r1=1.19.2.1&r2=1.19.2.2)

Browse pgsql-committers by date

  From Date Subject
Next Message User Mha 2007-05-23 03:09:17 pginstaller - pginst: Update French translation, from Guillaume Lelarge,
Previous Message Tom Lane 2007-05-22 23:23:59 pgsql: Repair planner bug introduced in 8.2 by ability to rearrange