diff --git a/imgsmlr.c b/imgsmlr.c index 84ee11f..21551e7 100755 --- a/imgsmlr.c +++ b/imgsmlr.c @@ -13,6 +13,11 @@ *------------------------------------------------------------------------- */ #include "postgres.h" +#ifdef PG_VERSION_NUM +#if PG_VERSION_NUM >= 160000 +#include "varatt.h" +#endif +#endif #include "c.h" #include "fmgr.h" diff --git a/imgsmlr.h b/imgsmlr.h index 9ee8cae..6810b39 100755 --- a/imgsmlr.h +++ b/imgsmlr.h @@ -37,3 +37,13 @@ typedef struct #define CHECK_SIGNATURE_KEY(key) Assert(VARSIZE_ANY_EXHDR(key) == sizeof(Signature) || VARSIZE_ANY_EXHDR(key) == 2 * sizeof(Signature)); #endif /* IMGSMLR_H */ + + +#ifndef FALSE +#define FALSE (0) +#endif + + +#ifndef TRUE +#define TRUE (!FALSE) +#endif diff --git a/imgsmlr_idx.c b/imgsmlr_idx.c index d85fbd0..81e0c97 100755 --- a/imgsmlr_idx.c +++ b/imgsmlr_idx.c @@ -13,6 +13,13 @@ *------------------------------------------------------------------------- */ #include "postgres.h" + +#ifdef PG_VERSION_NUM +#if PG_VERSION_NUM >= 160000 +#include "varatt.h" +#endif +#endif + #include "fmgr.h" #include "imgsmlr.h" #include "access/gist.h" @@ -77,19 +84,22 @@ signature_compress(PG_FUNCTION_ARGS) Datum signature_decompress(PG_FUNCTION_ARGS) { - GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0); - bytea *key = DatumGetByteaP(PG_DETOAST_DATUM(entry->key)); - - if (key != DatumGetByteaP(entry->key)) - { - GISTENTRY *retval = (GISTENTRY *) palloc(sizeof(GISTENTRY)); - - gistentryinit(*retval, PointerGetDatum(key), - entry->rel, entry->page, - entry->offset, FALSE); - PG_RETURN_POINTER(retval); - } - PG_RETURN_POINTER(entry); + GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0); + bytea *detoastedKey = DatumGetByteaP(entry->key); + bytea *key = (bytea *) entry->key; + + // Variable key is the original entry->key before detoasting, and it’s compared with the + // detoasted key. If they’re different, a new GISTENTRY is created. Otherwise, the original entry is returned. + if (key != detoastedKey) + { + GISTENTRY *retval = (GISTENTRY *) palloc(sizeof(GISTENTRY)); + + gistentryinit(*retval, PointerGetDatum(key), + entry->rel, entry->page, + entry->offset, FALSE); + PG_RETURN_POINTER(retval); + } + PG_RETURN_POINTER(entry); } Datum
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: