]> granicus.if.org Git - postgresql/commit
IN clauses appearing at top level of WHERE can now be handled as joins.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 20 Jan 2003 18:55:07 +0000 (18:55 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 20 Jan 2003 18:55:07 +0000 (18:55 +0000)
commitbdfbfde1b168b3332c4cdac34ac86a80aaf4d442
treef35bf1af04733069f3a6b0a2698ac10dbd6544ed
parentbe2b660ecd5ca205570825633e7b8479379ddc64
IN clauses appearing at top level of WHERE can now be handled as joins.
There are two implementation techniques: the executor understands a new
JOIN_IN jointype, which emits at most one matching row per left-hand row,
or the result of the IN's sub-select can be fed through a DISTINCT filter
and then joined as an ordinary relation.
Along the way, some minor code cleanup in the optimizer; notably, break
out most of the jointree-rearrangement preprocessing in planner.c and
put it in a new file prep/prepjointree.c.
47 files changed:
doc/src/sgml/release.sgml
src/backend/executor/nodeHashjoin.c
src/backend/executor/nodeMergejoin.c
src/backend/executor/nodeNestloop.c
src/backend/nodes/copyfuncs.c
src/backend/nodes/equalfuncs.c
src/backend/nodes/list.c
src/backend/nodes/outfuncs.c
src/backend/optimizer/README
src/backend/optimizer/geqo/geqo_eval.c
src/backend/optimizer/geqo/geqo_main.c
src/backend/optimizer/path/allpaths.c
src/backend/optimizer/path/costsize.c
src/backend/optimizer/path/indxpath.c
src/backend/optimizer/path/joinpath.c
src/backend/optimizer/path/joinrels.c
src/backend/optimizer/plan/createplan.c
src/backend/optimizer/plan/initsplan.c
src/backend/optimizer/plan/planmain.c
src/backend/optimizer/plan/planner.c
src/backend/optimizer/plan/setrefs.c
src/backend/optimizer/plan/subselect.c
src/backend/optimizer/prep/Makefile
src/backend/optimizer/prep/prepjointree.c [new file with mode: 0644]
src/backend/optimizer/prep/prepunion.c
src/backend/optimizer/util/clauses.c
src/backend/optimizer/util/joininfo.c
src/backend/optimizer/util/pathnode.c
src/backend/optimizer/util/relnode.c
src/backend/optimizer/util/tlist.c
src/backend/optimizer/util/var.c
src/backend/rewrite/rewriteManip.c
src/backend/utils/adt/selfuncs.c
src/include/nodes/nodes.h
src/include/nodes/parsenodes.h
src/include/nodes/pg_list.h
src/include/nodes/relation.h
src/include/optimizer/joininfo.h
src/include/optimizer/pathnode.h
src/include/optimizer/planmain.h
src/include/optimizer/planner.h
src/include/optimizer/prep.h
src/include/optimizer/subselect.h
src/include/optimizer/tlist.h
src/include/optimizer/var.h
src/include/utils/selfuncs.h
src/test/regress/expected/subselect.out