/* GiST support for ltree */
-#define SIGLEN_MAX GISTMaxIndexKeySize
-#define SIGLEN_DEFAULT (2 * sizeof(int32))
#define BITBYTE 8
-#define SIGLEN (sizeof(int32) * SIGLENINT)
#define SIGLENBIT(siglen) ((siglen) * BITBYTE)
+#define LTREE_SIGLEN_DEFAULT (2 * sizeof(int32))
+#define LTREE_SIGLEN_MAX GISTMaxIndexKeySize
+#define LTREE_GET_SIGLEN() (PG_HAS_OPCLASS_OPTIONS() ? \
+ ((LtreeGistOptions *) PG_GET_OPCLASS_OPTIONS())->siglen : \
+ LTREE_SIGLEN_DEFAULT)
typedef unsigned char *BITVECP;
ltree_gist *a = (ltree_gist *) PG_GETARG_POINTER(0);
ltree_gist *b = (ltree_gist *) PG_GETARG_POINTER(1);
bool *result = (bool *) PG_GETARG_POINTER(2);
- int siglen = LTREE_GET_ASIGLEN();
+ int siglen = LTREE_GET_SIGLEN();
*result = false;
if (LTG_ISONENODE(a) != LTG_ISONENODE(b))
{
GistEntryVector *entryvec = (GistEntryVector *) PG_GETARG_POINTER(0);
int *size = (int *) PG_GETARG_POINTER(1);
- int siglen = LTREE_GET_ASIGLEN();
+ int siglen = LTREE_GET_SIGLEN();
BITVECP base = palloc0(siglen);
int32 i,
j;
ltree_gist *origval = (ltree_gist *) DatumGetPointer(((GISTENTRY *) PG_GETARG_POINTER(0))->key);
ltree_gist *newval = (ltree_gist *) DatumGetPointer(((GISTENTRY *) PG_GETARG_POINTER(1))->key);
float *penalty = (float *) PG_GETARG_POINTER(2);
- int siglen = LTREE_GET_ASIGLEN();
+ int siglen = LTREE_GET_SIGLEN();
int32 cmpr,
cmpl;
{
GistEntryVector *entryvec = (GistEntryVector *) PG_GETARG_POINTER(0);
GIST_SPLITVEC *v = (GIST_SPLITVEC *) PG_GETARG_POINTER(1);
- int siglen = LTREE_GET_ASIGLEN();
+ int siglen = LTREE_GET_SIGLEN();
OffsetNumber j;
int32 i;
RIX *array;
/* Oid subtype = PG_GETARG_OID(3); */
bool *recheck = (bool *) PG_GETARG_POINTER(4);
- int siglen = LTREE_GET_ASIGLEN();
+ int siglen = LTREE_GET_SIGLEN();
ltree_gist *key = (ltree_gist *) DatumGetPointer(entry->key);
void *query = NULL;
bool res = false;
init_local_reloptions(relopts, sizeof(LtreeGistOptions));
add_local_int_reloption(relopts, "siglen",
"signature length in bytes",
- SIGLEN_DEFAULT, 1, SIGLEN_MAX,
+ LTREE_SIGLEN_DEFAULT, 1, LTREE_SIGLEN_MAX,
offsetof(LtreeGistOptions, siglen));
PG_RETURN_VOID();