Change snapshot type to be determined by enum rather than callback.
authorAndres Freund <andres@anarazel.de>
Tue, 22 Jan 2019 01:03:15 +0000 (17:03 -0800)
committerAndres Freund <andres@anarazel.de>
Tue, 22 Jan 2019 01:03:15 +0000 (17:03 -0800)
commit63746189b23815415cacc715fdc4f6b991f1a5e7
tree7211c6834820f094a41744e60ef73deaae8f6548
parent8f9e934ab746907abbeeed06a1a9b995e5b4d339
Change snapshot type to be determined by enum rather than callback.

This is in preparation for allowing the same snapshot be used for
different table AMs. With the current callback based approach we would
need one callback for each supported AM, which clearly would not be
extensible.  Thus add a new Snapshot->snapshot_type field, and move
the dispatch into HeapTupleSatisfiesVisibility() (which is now a
function). Later work will then dispatch calls to
HeapTupleSatisfiesVisibility() and other AMs visibility functions
depending on the type of the table.  The central SnapshotType enum
also seems like a good location to centralize documentation about the
intended behaviour of various types of snapshots.

As tqual.h isn't included by bufmgr.h any more (as HeapTupleSatisfies*
isn't referenced by TestForOldSnapshot() anymore) a few files now need
to include it directly.

Author: Andres Freund, loosely based on earlier work by Haribabu Kommi
Discussion:
    https://postgr.es/m/20180703070645.wchpu5muyto5n647@alap3.anarazel.de
    https://postgr.es/m/20160812231527.GA690404@alvherre.pgsql
contrib/amcheck/verify_nbtree.c
contrib/pg_visibility/pg_visibility.c
src/backend/access/nbtree/nbtsort.c
src/backend/replication/logical/snapbuild.c
src/backend/utils/time/snapmgr.c
src/backend/utils/time/tqual.c
src/include/storage/bufmgr.h
src/include/utils/snapshot.h
src/include/utils/tqual.h
src/tools/pgindent/typedefs.list