mirror of
https://github.com/postgres/postgres.git
synced 2025-06-27 23:21:58 +03:00
Commit7406ab623f
added a gist support function that we internally refer to by the symbol GIST_STRATNUM_PROC. This translated from "well-known" strategy numbers to opfamily-specific strategy numbers. However, we later (commit630f9a43ce
) changed this to fit into index-AM-level compare type mapping, so this function actually now maps from compare type to opfamily-specific strategy numbers. So this name is no longer fitting. Moreover, the index AM level also supports the opposite, a function to map from strategy number to compare type. This is currently not supported in gist, but one might wonder what this function is supposed to be called when it is added. This patch changes the naming of the gist-level functionality to be more in line with the index-AM-level functionality. This makes sense because these are essentially the same thing on different levels. This also changes the names of the externally visible functions that are provided for use as such a support function. Reviewed-by: Paul A Jungwirth <pj@illuminatedcomputing.com> Discussion: https://www.postgresql.org/message-id/37ebb1d9-9036-485f-a215-e55435689917%40eisentraut.org
85 lines
1.8 KiB
C
85 lines
1.8 KiB
C
/*
|
|
* contrib/btree_gist/btree_gist.c
|
|
*/
|
|
#include "postgres.h"
|
|
|
|
#include "access/cmptype.h"
|
|
#include "access/stratnum.h"
|
|
#include "utils/builtins.h"
|
|
|
|
PG_MODULE_MAGIC_EXT(
|
|
.name = "btree_gist",
|
|
.version = PG_VERSION
|
|
);
|
|
|
|
PG_FUNCTION_INFO_V1(gbt_decompress);
|
|
PG_FUNCTION_INFO_V1(gbtreekey_in);
|
|
PG_FUNCTION_INFO_V1(gbtreekey_out);
|
|
PG_FUNCTION_INFO_V1(gist_translate_cmptype_btree);
|
|
|
|
/**************************************************
|
|
* In/Out for keys
|
|
**************************************************/
|
|
|
|
|
|
Datum
|
|
gbtreekey_in(PG_FUNCTION_ARGS)
|
|
{
|
|
Oid typioparam = PG_GETARG_OID(1);
|
|
|
|
ereport(ERROR,
|
|
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
|
errmsg("cannot accept a value of type %s",
|
|
format_type_extended(typioparam, -1,
|
|
FORMAT_TYPE_ALLOW_INVALID))));
|
|
|
|
PG_RETURN_VOID(); /* keep compiler quiet */
|
|
}
|
|
|
|
Datum
|
|
gbtreekey_out(PG_FUNCTION_ARGS)
|
|
{
|
|
/* Sadly, we do not receive any indication of the specific type */
|
|
ereport(ERROR,
|
|
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
|
errmsg("cannot display a value of type %s", "gbtreekey?")));
|
|
|
|
PG_RETURN_VOID(); /* keep compiler quiet */
|
|
}
|
|
|
|
|
|
/*
|
|
** GiST DeCompress methods
|
|
** do not do anything.
|
|
*/
|
|
Datum
|
|
gbt_decompress(PG_FUNCTION_ARGS)
|
|
{
|
|
PG_RETURN_POINTER(PG_GETARG_POINTER(0));
|
|
}
|
|
|
|
/*
|
|
* Returns the btree number for supported operators, otherwise invalid.
|
|
*/
|
|
Datum
|
|
gist_translate_cmptype_btree(PG_FUNCTION_ARGS)
|
|
{
|
|
CompareType cmptype = PG_GETARG_INT32(0);
|
|
|
|
switch (cmptype)
|
|
{
|
|
case COMPARE_EQ:
|
|
PG_RETURN_UINT16(BTEqualStrategyNumber);
|
|
case COMPARE_LT:
|
|
PG_RETURN_UINT16(BTLessStrategyNumber);
|
|
case COMPARE_LE:
|
|
PG_RETURN_UINT16(BTLessEqualStrategyNumber);
|
|
case COMPARE_GT:
|
|
PG_RETURN_UINT16(BTGreaterStrategyNumber);
|
|
case COMPARE_GE:
|
|
PG_RETURN_UINT16(BTGreaterEqualStrategyNumber);
|
|
default:
|
|
PG_RETURN_UINT16(InvalidStrategy);
|
|
}
|
|
}
|