mirror of
https://github.com/postgres/postgres.git
synced 2025-06-11 20:28:21 +03:00
Add stratnum GiST support function
This is support function 12 for the GiST AM and translates "well-known" RT*StrategyNumber values into whatever strategy number is used by the opclass (since no particular numbers are actually required). We will use this to support temporal PRIMARY KEY/UNIQUE/FOREIGN KEY/FOR PORTION OF functionality. This commit adds two implementations, one for internal GiST opclasses (just an identity function) and another for btree_gist opclasses. It updates btree_gist from 1.7 to 1.8, adding the support function for all its opclasses. Author: Paul A. Jungwirth <pj@illuminatedcomputing.com> Reviewed-by: Peter Eisentraut <peter@eisentraut.org> Reviewed-by: jian he <jian.universality@gmail.com> Discussion: https://www.postgresql.org/message-id/flat/CA+renyUApHgSZF9-nd-a0+OPGharLQLO=mDHcY4_qQ0+noCUVg@mail.gmail.com
This commit is contained in:
@ -3,6 +3,7 @@
|
||||
*/
|
||||
#include "postgres.h"
|
||||
|
||||
#include "access/stratnum.h"
|
||||
#include "utils/builtins.h"
|
||||
|
||||
PG_MODULE_MAGIC;
|
||||
@ -10,6 +11,7 @@ PG_MODULE_MAGIC;
|
||||
PG_FUNCTION_INFO_V1(gbt_decompress);
|
||||
PG_FUNCTION_INFO_V1(gbtreekey_in);
|
||||
PG_FUNCTION_INFO_V1(gbtreekey_out);
|
||||
PG_FUNCTION_INFO_V1(gist_stratnum_btree);
|
||||
|
||||
/**************************************************
|
||||
* In/Out for keys
|
||||
@ -51,3 +53,28 @@ gbt_decompress(PG_FUNCTION_ARGS)
|
||||
{
|
||||
PG_RETURN_POINTER(PG_GETARG_POINTER(0));
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns the btree number for equals, otherwise invalid.
|
||||
*/
|
||||
Datum
|
||||
gist_stratnum_btree(PG_FUNCTION_ARGS)
|
||||
{
|
||||
StrategyNumber strat = PG_GETARG_UINT16(0);
|
||||
|
||||
switch (strat)
|
||||
{
|
||||
case RTEqualStrategyNumber:
|
||||
PG_RETURN_UINT16(BTEqualStrategyNumber);
|
||||
case RTLessStrategyNumber:
|
||||
PG_RETURN_UINT16(BTLessStrategyNumber);
|
||||
case RTLessEqualStrategyNumber:
|
||||
PG_RETURN_UINT16(BTLessEqualStrategyNumber);
|
||||
case RTGreaterStrategyNumber:
|
||||
PG_RETURN_UINT16(BTGreaterStrategyNumber);
|
||||
case RTGreaterEqualStrategyNumber:
|
||||
PG_RETURN_UINT16(BTGreaterEqualStrategyNumber);
|
||||
default:
|
||||
PG_RETURN_UINT16(InvalidStrategy);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user