Refactor planner's pathkeys data structure to create a separate, explicit

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

Commit: f41803bb39bc2949db200116a609fd242d0ec221
Author: Tom Lane <tgl@sss.pgh.pa.us>
Date: 2007-01-20T20:45:41Z
Releases: 8.3.0
Refactor planner's pathkeys data structure to create a separate, explicit
representation of equivalence classes of variables.  This is an extensive
rewrite, but it brings a number of benefits:
* planner no longer fails in the presence of "incomplete" operator families
that don't offer operators for every possible combination of datatypes.
* avoid generating and then discarding redundant equality clauses.
* remove bogus assumption that derived equalities always use operators
named "=".
* mergejoins can work with a variety of sort orders (e.g., descending) now,
instead of tying each mergejoinable operator to exactly one sort order.
* better recognition of redundant sort columns.
* can make use of equalities appearing underneath an outer join.

Files

PathChange+/−
doc/src/sgml/xoper.sgml modified +38 −54
src/backend/nodes/copyfuncs.c modified +19 −23
src/backend/nodes/equalfuncs.c modified +23 −7
src/backend/nodes/outfuncs.c modified +57 −33
src/backend/nodes/print.c modified +16 −7
src/backend/optimizer/path/allpaths.c modified +11 −1
src/backend/optimizer/path/costsize.c modified +33 −21
src/backend/optimizer/path/equivclass.c added +1662 −0
src/backend/optimizer/path/indxpath.c modified +144 −313
src/backend/optimizer/path/joinpath.c modified +48 −139
src/backend/optimizer/path/joinrels.c modified +5 −5
src/backend/optimizer/path/Makefile modified +2 −2
src/backend/optimizer/path/pathkeys.c modified +647 −876
src/backend/optimizer/plan/createplan.c modified +168 −39
src/backend/optimizer/plan/initsplan.c modified +312 −444
src/backend/optimizer/plan/planmain.c modified +19 −12
src/backend/optimizer/plan/planner.c modified +23 −14
src/backend/optimizer/prep/prepjointree.c modified +2 −1
src/backend/optimizer/prep/prepunion.c modified +3 −5
src/backend/optimizer/README modified +244 −207
src/backend/optimizer/util/joininfo.c modified +9 −35
src/backend/optimizer/util/pathnode.c modified +3 −15
src/backend/optimizer/util/relnode.c modified +69 −58
src/backend/optimizer/util/restrictinfo.c modified +27 −142
src/backend/parser/parse_agg.c modified +2 −1
src/backend/utils/adt/selfuncs.c modified +5 −6
src/backend/utils/cache/lsyscache.c modified +51 −148
src/include/nodes/nodes.h modified +4 −2
src/include/nodes/relation.h modified +143 −54
src/include/optimizer/joininfo.h modified +1 −4
src/include/optimizer/pathnode.h modified +1 −4
src/include/optimizer/paths.h modified +48 −11
src/include/optimizer/planmain.h modified +17 −5
src/include/optimizer/restrictinfo.h modified +2 −6
src/include/utils/lsyscache.h modified +2 −3