pgsql: Teach planner about some cases where a restriction clause can be
| От | tgl@svr1.postgresql.org (Tom Lane) |
|---|---|
| Тема | pgsql: Teach planner about some cases where a restriction clause can be |
| Дата | |
| Msg-id | 20050702230043.5A23E5296E@svr1.postgresql.org обсуждение исходный текст |
| Список | pgsql-committers |
Log Message:
-----------
Teach planner about some cases where a restriction clause can be
propagated inside an outer join. In particular, given
LEFT JOIN ON (A = B) WHERE A = constant, we cannot conclude that
B = constant at the top level (B might be null instead), but we
can nonetheless put a restriction B = constant into the quals for
B's relation, since no inner-side rows not meeting that condition
can contribute to the final result. Similarly, given
FULL JOIN USING (J) WHERE J = constant, we can't directly conclude
that either input J variable = constant, but it's OK to push such
quals into each input rel. Per recent gripe from Kim Bisgaard.
Along the way, remove 'valid_everywhere' flag from RestrictInfo,
as on closer analysis it was not being used for anything, and was
defined backwards anyway.
Modified Files:
--------------
pgsql/src/backend/nodes:
copyfuncs.c (r1.310 -> r1.311)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/nodes/copyfuncs.c.diff?r1=1.310&r2=1.311)
equalfuncs.c (r1.247 -> r1.248)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/nodes/equalfuncs.c.diff?r1=1.247&r2=1.248)
outfuncs.c (r1.257 -> r1.258)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/nodes/outfuncs.c.diff?r1=1.257&r2=1.258)
pgsql/src/backend/optimizer/path:
indxpath.c (r1.185 -> r1.186)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/path/indxpath.c.diff?r1=1.185&r2=1.186)
orindxpath.c (r1.72 -> r1.73)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/path/orindxpath.c.diff?r1=1.72&r2=1.73)
pathkeys.c (r1.68 -> r1.69)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/path/pathkeys.c.diff?r1=1.68&r2=1.69)
pgsql/src/backend/optimizer/plan:
createplan.c (r1.192 -> r1.193)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/plan/createplan.c.diff?r1=1.192&r2=1.193)
initsplan.c (r1.107 -> r1.108)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/plan/initsplan.c.diff?r1=1.107&r2=1.108)
planmain.c (r1.85 -> r1.86)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/plan/planmain.c.diff?r1=1.85&r2=1.86)
planner.c (r1.189 -> r1.190)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/plan/planner.c.diff?r1=1.189&r2=1.190)
pgsql/src/backend/optimizer/util:
restrictinfo.c (r1.37 -> r1.38)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/util/restrictinfo.c.diff?r1=1.37&r2=1.38)
pgsql/src/include/nodes:
relation.h (r1.115 -> r1.116)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/nodes/relation.h.diff?r1=1.115&r2=1.116)
pgsql/src/include/optimizer:
restrictinfo.h (r1.31 -> r1.32)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/optimizer/restrictinfo.h.diff?r1=1.31&r2=1.32)
В списке pgsql-committers по дате отправления: