Thread: pgsql: Refactor planner's pathkeys data structure to create a separate,
pgsql: Refactor planner's pathkeys data structure to create a separate,
From
tgl@postgresql.org (Tom Lane)
Date:
Log Message: ----------- 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. Modified Files: -------------- pgsql/doc/src/sgml: xoper.sgml (r1.37 -> r1.38) (http://developer.postgresql.org/cvsweb.cgi/pgsql/doc/src/sgml/xoper.sgml.diff?r1=1.37&r2=1.38) pgsql/src/backend/nodes: copyfuncs.c (r1.361 -> r1.362) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/nodes/copyfuncs.c.diff?r1=1.361&r2=1.362) equalfuncs.c (r1.295 -> r1.296) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/nodes/equalfuncs.c.diff?r1=1.295&r2=1.296) outfuncs.c (r1.293 -> r1.294) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/nodes/outfuncs.c.diff?r1=1.293&r2=1.294) print.c (r1.82 -> r1.83) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/nodes/print.c.diff?r1=1.82&r2=1.83) pgsql/src/backend/optimizer: README (r1.35 -> r1.36) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/README.diff?r1=1.35&r2=1.36) pgsql/src/backend/optimizer/path: Makefile (r1.17 -> r1.18) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/path/Makefile.diff?r1=1.17&r2=1.18) allpaths.c (r1.156 -> r1.157) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/path/allpaths.c.diff?r1=1.156&r2=1.157) costsize.c (r1.174 -> r1.175) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/path/costsize.c.diff?r1=1.174&r2=1.175) indxpath.c (r1.215 -> r1.216) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/path/indxpath.c.diff?r1=1.215&r2=1.216) joinpath.c (r1.110 -> r1.111) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/path/joinpath.c.diff?r1=1.110&r2=1.111) joinrels.c (r1.83 -> r1.84) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/path/joinrels.c.diff?r1=1.83&r2=1.84) pathkeys.c (r1.81 -> r1.82) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/path/pathkeys.c.diff?r1=1.81&r2=1.82) pgsql/src/backend/optimizer/plan: createplan.c (r1.221 -> r1.222) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/plan/createplan.c.diff?r1=1.221&r2=1.222) initsplan.c (r1.127 -> r1.128) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/plan/initsplan.c.diff?r1=1.127&r2=1.128) planmain.c (r1.98 -> r1.99) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/plan/planmain.c.diff?r1=1.98&r2=1.99) planner.c (r1.211 -> r1.212) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/plan/planner.c.diff?r1=1.211&r2=1.212) pgsql/src/backend/optimizer/prep: prepjointree.c (r1.45 -> r1.46) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/prep/prepjointree.c.diff?r1=1.45&r2=1.46) prepunion.c (r1.135 -> r1.136) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/prep/prepunion.c.diff?r1=1.135&r2=1.136) pgsql/src/backend/optimizer/util: joininfo.c (r1.46 -> r1.47) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/util/joininfo.c.diff?r1=1.46&r2=1.47) pathnode.c (r1.136 -> r1.137) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/util/pathnode.c.diff?r1=1.136&r2=1.137) relnode.c (r1.84 -> r1.85) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/util/relnode.c.diff?r1=1.84&r2=1.85) restrictinfo.c (r1.51 -> r1.52) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/util/restrictinfo.c.diff?r1=1.51&r2=1.52) pgsql/src/backend/parser: parse_agg.c (r1.75 -> r1.76) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/parser/parse_agg.c.diff?r1=1.75&r2=1.76) pgsql/src/backend/utils/adt: selfuncs.c (r1.219 -> r1.220) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/selfuncs.c.diff?r1=1.219&r2=1.220) pgsql/src/backend/utils/cache: lsyscache.c (r1.143 -> r1.144) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/cache/lsyscache.c.diff?r1=1.143&r2=1.144) pgsql/src/include/nodes: nodes.h (r1.191 -> r1.192) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/nodes/nodes.h.diff?r1=1.191&r2=1.192) relation.h (r1.132 -> r1.133) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/nodes/relation.h.diff?r1=1.132&r2=1.133) pgsql/src/include/optimizer: joininfo.h (r1.33 -> r1.34) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/optimizer/joininfo.h.diff?r1=1.33&r2=1.34) pathnode.h (r1.75 -> r1.76) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/optimizer/pathnode.h.diff?r1=1.75&r2=1.76) paths.h (r1.94 -> r1.95) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/optimizer/paths.h.diff?r1=1.94&r2=1.95) planmain.h (r1.97 -> r1.98) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/optimizer/planmain.h.diff?r1=1.97&r2=1.98) restrictinfo.h (r1.39 -> r1.40) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/optimizer/restrictinfo.h.diff?r1=1.39&r2=1.40) pgsql/src/include/utils: lsyscache.h (r1.112 -> r1.113) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/utils/lsyscache.h.diff?r1=1.112&r2=1.113) Added Files: ----------- pgsql/src/backend/optimizer/path: equivclass.c (r1.1) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/path/equivclass.c?rev=1.1&content-type=text/x-cvsweb-markup)