Create a "sort support" interface API for faster sorting.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 7 Dec 2011 05:18:38 +0000 (00:18 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 7 Dec 2011 05:19:39 +0000 (00:19 -0500)
commitc6e3ac11b60ac4a8942ab964252d51c1c0bd8845
treefa9ffffed5b31d01a007f447368fd9479bba3aef
parentd2a662182eac1069ff3874a1db499508a13c6bca
Create a "sort support" interface API for faster sorting.

This patch creates an API whereby a btree index opclass can optionally
provide non-SQL-callable support functions for sorting.  In the initial
patch, we only use this to provide a directly-callable comparator function,
which can be invoked with a bit less overhead than the traditional
SQL-callable comparator.  While that should be of value in itself, the real
reason for doing this is to provide a datatype-extensible framework for
more aggressive optimizations, as in Peter Geoghegan's recent work.

Robert Haas and Tom Lane
30 files changed:
doc/src/sgml/ref/alter_opfamily.sgml
doc/src/sgml/ref/create_opclass.sgml
doc/src/sgml/xindex.sgml
src/backend/access/nbtree/nbtcompare.c
src/backend/commands/analyze.c
src/backend/commands/opclasscmds.c
src/backend/executor/nodeMergeAppend.c
src/backend/executor/nodeMergejoin.c
src/backend/utils/adt/date.c
src/backend/utils/adt/float.c
src/backend/utils/adt/timestamp.c
src/backend/utils/cache/lsyscache.c
src/backend/utils/sort/Makefile
src/backend/utils/sort/sortsupport.c [new file with mode: 0644]
src/backend/utils/sort/tuplesort.c
src/bin/pg_dump/pg_dump.c
src/include/access/nbtree.h
src/include/catalog/catversion.h
src/include/catalog/pg_am.h
src/include/catalog/pg_amproc.h
src/include/catalog/pg_proc.h
src/include/nodes/execnodes.h
src/include/utils/builtins.h
src/include/utils/date.h
src/include/utils/lsyscache.h
src/include/utils/sortsupport.h [new file with mode: 0644]
src/include/utils/timestamp.h
src/include/utils/tuplesort.h
src/test/regress/expected/opr_sanity.out
src/test/regress/sql/opr_sanity.sql