mirror of
https://github.com/postgres/postgres.git
synced 2025-10-21 02:52:47 +03:00
Add optional compression method to SP-GiST
Patch allows to have different types of column and value stored in leaf tuples of SP-GiST. The main application of feature is to transform complex column type to simple indexed type or for truncating too long value, transformation could be lossy. Simple example: polygons are converted to their bounding boxes, this opclass follows. Authors: me, Heikki Linnakangas, Alexander Korotkov, Nikita Glukhov Reviewed-By: all authors + Darafei Praliaskouski Discussions: https://www.postgresql.org/message-id/5447B3FF.2080406@sigaev.ru https://www.postgresql.org/message-id/flat/54907069.1030506@sigaev.ru#54907069.1030506@sigaev.ru
This commit is contained in:
@@ -30,7 +30,9 @@
|
||||
#define SPGIST_PICKSPLIT_PROC 3
|
||||
#define SPGIST_INNER_CONSISTENT_PROC 4
|
||||
#define SPGIST_LEAF_CONSISTENT_PROC 5
|
||||
#define SPGISTNProc 5
|
||||
#define SPGIST_COMPRESS_PROC 6
|
||||
#define SPGISTNRequiredProc 5
|
||||
#define SPGISTNProc 6
|
||||
|
||||
/*
|
||||
* Argument structs for spg_config method
|
||||
@@ -44,6 +46,7 @@ typedef struct spgConfigOut
|
||||
{
|
||||
Oid prefixType; /* Data type of inner-tuple prefixes */
|
||||
Oid labelType; /* Data type of inner-tuple node labels */
|
||||
Oid leafType; /* Data type of leaf-tuple values */
|
||||
bool canReturnData; /* Opclass can reconstruct original data */
|
||||
bool longValuesOK; /* Opclass can cope with values > 1 page */
|
||||
} spgConfigOut;
|
||||
|
@@ -119,7 +119,8 @@ typedef struct SpGistState
|
||||
{
|
||||
spgConfigOut config; /* filled in by opclass config method */
|
||||
|
||||
SpGistTypeDesc attType; /* type of input data and leaf values */
|
||||
SpGistTypeDesc attType; /* type of values to be indexed/restored */
|
||||
SpGistTypeDesc attLeafType; /* type of leaf-tuple values */
|
||||
SpGistTypeDesc attPrefixType; /* type of inner-tuple prefix values */
|
||||
SpGistTypeDesc attLabelType; /* type of node label values */
|
||||
|
||||
@@ -178,7 +179,8 @@ typedef struct SpGistCache
|
||||
{
|
||||
spgConfigOut config; /* filled in by opclass config method */
|
||||
|
||||
SpGistTypeDesc attType; /* type of input data and leaf values */
|
||||
SpGistTypeDesc attType; /* type of values to be indexed/restored */
|
||||
SpGistTypeDesc attLeafType; /* type of leaf-tuple values */
|
||||
SpGistTypeDesc attPrefixType; /* type of inner-tuple prefix values */
|
||||
SpGistTypeDesc attLabelType; /* type of node label values */
|
||||
|
||||
@@ -300,7 +302,7 @@ typedef SpGistLeafTupleData *SpGistLeafTuple;
|
||||
|
||||
#define SGLTHDRSZ MAXALIGN(sizeof(SpGistLeafTupleData))
|
||||
#define SGLTDATAPTR(x) (((char *) (x)) + SGLTHDRSZ)
|
||||
#define SGLTDATUM(x, s) ((s)->attType.attbyval ? \
|
||||
#define SGLTDATUM(x, s) ((s)->attLeafType.attbyval ? \
|
||||
*(Datum *) SGLTDATAPTR(x) : \
|
||||
PointerGetDatum(SGLTDATAPTR(x)))
|
||||
|
||||
|
Reference in New Issue
Block a user