Add support for nearest-neighbor (KNN) searches to SP-GiST
authorAlexander Korotkov <akorotkov@postgresql.org>
Tue, 18 Sep 2018 22:54:10 +0000 (01:54 +0300)
committerAlexander Korotkov <akorotkov@postgresql.org>
Tue, 18 Sep 2018 22:54:10 +0000 (01:54 +0300)
commit2a6368343ff43743ddd90d0f4c2d0ac03e18aa85
treecfe7805a40c662e0962965aa1f263ec44e6d1eff
parentd0cfc3d6a44af1756ca5be8cb2414da7b8bf20d5
Add support for nearest-neighbor (KNN) searches to SP-GiST

Currently, KNN searches were supported only by GiST.  SP-GiST also capable to
support them.  This commit implements that support.  SP-GiST scan stack is
replaced with queue, which serves as stack if no ordering is specified.  KNN
support is provided for three SP-GIST opclasses: quad_point_ops, kd_point_ops
and poly_ops (catversion is bumped).  Some common parts between GiST and SP-GiST
KNNs are extracted into separate functions.

Discussion: https://postgr.es/m/570825e8-47d0-4732-2bf6-88d67d2d51c8%40postgrespro.ru
Author: Nikita Glukhov, Alexander Korotkov based on GSoC work by Vlad Sterzhanov
Review: Andrey Borodin, Alexander Korotkov
29 files changed:
doc/src/sgml/indices.sgml
doc/src/sgml/spgist.sgml
doc/src/sgml/xindex.sgml
src/backend/access/gist/gistget.c
src/backend/access/gist/gistutil.c
src/backend/access/index/indexam.c
src/backend/access/spgist/Makefile
src/backend/access/spgist/README
src/backend/access/spgist/spgkdtreeproc.c
src/backend/access/spgist/spgproc.c [new file with mode: 0644]
src/backend/access/spgist/spgquadtreeproc.c
src/backend/access/spgist/spgscan.c
src/backend/access/spgist/spgutils.c
src/backend/access/spgist/spgvalidate.c
src/backend/utils/adt/geo_spgist.c
src/backend/utils/cache/lsyscache.c
src/include/access/genam.h
src/include/access/spgist.h
src/include/access/spgist_private.h
src/include/catalog/catversion.h
src/include/catalog/pg_amop.dat
src/include/utils/lsyscache.h
src/test/regress/expected/amutils.out
src/test/regress/expected/create_index.out
src/test/regress/expected/opr_sanity.out
src/test/regress/expected/polygon.out
src/test/regress/sql/amutils.sql
src/test/regress/sql/create_index.sql
src/test/regress/sql/polygon.sql