mirror of
https://github.com/postgres/postgres.git
synced 2025-10-21 02:52:47 +03:00
Add equalimage B-Tree support functions.
Invent the concept of a B-Tree equalimage ("equality implies image equality") support function, registered as support function 4. This indicates whether it is safe (or not safe) to apply optimizations that assume that any two datums considered equal by an operator class's order method must be interchangeable without any loss of semantic information. This is static information about an operator class and a collation. Register an equalimage routine for almost all of the existing B-Tree opclasses. We only need two trivial routines for all of the opclasses that are included with the core distribution. There is one routine for opclasses that index non-collatable types (which returns 'true' unconditionally), plus another routine for collatable types (which returns 'true' when the collation is a deterministic collation). This patch is infrastructure for an upcoming patch that adds B-Tree deduplication. Author: Peter Geoghegan, Anastasia Lubennikova Discussion: https://postgr.es/m/CAH2-Wzn3Ee49Gmxb7V1VJ3-AC8fWn-Fr8pfWQebHe8rYRxt5OQ@mail.gmail.com
This commit is contained in:
@@ -387,12 +387,17 @@ typedef struct BTMetaPageData
|
||||
* an operator class may choose to offer a third amproc procedure
|
||||
* (BTINRANGE_PROC), independently of whether it offers sortsupport.
|
||||
* For full details, see doc/src/sgml/btree.sgml.
|
||||
*
|
||||
* To facilitate B-Tree deduplication, an operator class may choose to
|
||||
* offer a forth amproc procedure (BTEQUALIMAGE_PROC). For full details,
|
||||
* see doc/src/sgml/btree.sgml.
|
||||
*/
|
||||
|
||||
#define BTORDER_PROC 1
|
||||
#define BTSORTSUPPORT_PROC 2
|
||||
#define BTINRANGE_PROC 3
|
||||
#define BTNProcs 3
|
||||
#define BTEQUALIMAGE_PROC 4
|
||||
#define BTNProcs 4
|
||||
|
||||
/*
|
||||
* We need to be able to tell the difference between read and write
|
||||
@@ -829,6 +834,7 @@ extern bool _bt_check_natts(Relation rel, bool heapkeyspace, Page page,
|
||||
OffsetNumber offnum);
|
||||
extern void _bt_check_third_page(Relation rel, Relation heap,
|
||||
bool needheaptidspace, Page page, IndexTuple newtup);
|
||||
extern bool _bt_allequalimage(Relation rel, bool debugmessage);
|
||||
|
||||
/*
|
||||
* prototypes for functions in nbtvalidate.c
|
||||
|
Reference in New Issue
Block a user