IN clauses appearing at top level of WHERE can now be handled as joins.

Tom Lane <tgl@sss.pgh.pa.us>

Commit: bdfbfde1b168b3332c4cdac34ac86a80aaf4d442
Author: Tom Lane <tgl@sss.pgh.pa.us>
Date: 2003-01-20T18:55:07Z
Releases: 7.4.1
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.

Files

PathChange+/−
doc/src/sgml/release.sgml modified +2 −1
src/backend/executor/nodeHashjoin.c modified +11 −1
src/backend/executor/nodeMergejoin.c modified +12 −4
src/backend/executor/nodeNestloop.c modified +11 −1
src/backend/nodes/copyfuncs.c modified +22 −4
src/backend/nodes/equalfuncs.c modified +17 −4
src/backend/nodes/list.c modified +5 −5
src/backend/nodes/outfuncs.c modified +29 −1
src/backend/optimizer/geqo/geqo_eval.c modified +11 −4
src/backend/optimizer/geqo/geqo_main.c modified +14 −9
src/backend/optimizer/path/allpaths.c modified +5 −1
src/backend/optimizer/path/costsize.c modified +38 −8
src/backend/optimizer/path/indxpath.c modified +4 −2
src/backend/optimizer/path/joinpath.c modified +110 −177
src/backend/optimizer/path/joinrels.c modified +144 −7
src/backend/optimizer/plan/createplan.c modified +144 −1
src/backend/optimizer/plan/initsplan.c modified +9 −4
src/backend/optimizer/plan/planmain.c modified +3 −1
src/backend/optimizer/plan/planner.c modified +43 −486
src/backend/optimizer/plan/setrefs.c modified +92 −29
src/backend/optimizer/plan/subselect.c modified +132 −15
src/backend/optimizer/prep/Makefile modified +2 −2
src/backend/optimizer/prep/prepjointree.c added +680 −0
src/backend/optimizer/prep/prepunion.c modified +46 −24
src/backend/optimizer/README modified +1 −0
src/backend/optimizer/util/clauses.c modified +23 −1
src/backend/optimizer/util/joininfo.c modified +12 −23
src/backend/optimizer/util/pathnode.c modified +109 −1
src/backend/optimizer/util/relnode.c modified +7 −11
src/backend/optimizer/util/tlist.c modified +23 −1
src/backend/optimizer/util/var.c modified +148 −5
src/backend/rewrite/rewriteManip.c modified +55 −5
src/backend/utils/adt/selfuncs.c modified +6 −9
src/include/nodes/nodes.h modified +15 −4
src/include/nodes/parsenodes.h modified +2 −1
src/include/nodes/pg_list.h modified +3 −2
src/include/nodes/relation.h modified +42 −1
src/include/optimizer/joininfo.h modified +2 −1
src/include/optimizer/pathnode.h modified +4 −1
src/include/optimizer/planmain.h modified +3 −1
src/include/optimizer/planner.h modified +1 −4
src/include/optimizer/prep.h modified +11 −1
src/include/optimizer/subselect.h modified +7 −1
src/include/optimizer/tlist.h modified +3 −1
src/include/optimizer/var.h modified +5 −3
src/include/utils/selfuncs.h modified +2 −2
src/test/regress/expected/subselect.out modified +6 −6