0001-ltree-gist-siglen-fix-v2.patch
application/octet-stream
Filename: 0001-ltree-gist-siglen-fix-v2.patch
Type: application/octet-stream
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch v2-0001
Subject: ltree gist siglen fix
| File | + | − |
|---|---|---|
| contrib/ltree/ltree_gist.c | 6 | 6 |
| contrib/ltree/ltree.h | 6 | 5 |
From d744504a8af81d9137079285476d5e6efc53f8bf Mon Sep 17 00:00:00 2001
From: Alexander Korotkov <akorotkov@postgresql.org>
Date: Tue, 8 Mar 2022 01:19:46 +0300
Subject: [PATCH] ltree gist siglen fix
---
contrib/ltree/ltree.h | 11 ++++++-----
contrib/ltree/ltree_gist.c | 12 ++++++------
2 files changed, 12 insertions(+), 11 deletions(-)
diff --git a/contrib/ltree/ltree.h b/contrib/ltree/ltree.h
index 5b4be5e680a..e3fd45a4153 100644
--- a/contrib/ltree/ltree.h
+++ b/contrib/ltree/ltree.h
@@ -229,11 +229,11 @@ int ltree_strncasecmp(const char *a, const char *b, size_t s);
/* 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_ASIGLEN() (PG_HAS_OPCLASS_OPTIONS() ? \
+ ((LtreeGistOptions *) PG_GET_OPCLASS_OPTIONS())->siglen : \
+ LTREE_ASIGLEN_DEFAULT)
typedef unsigned char *BITVECP;
@@ -294,6 +294,7 @@ extern ltree_gist *ltree_gist_alloc(bool isalltrue, BITVECP sign, int siglen,
#define LTREE_GET_ASIGLEN() (PG_HAS_OPCLASS_OPTIONS() ? \
((LtreeGistOptions *) PG_GET_OPCLASS_OPTIONS())->siglen : \
LTREE_ASIGLEN_DEFAULT)
+#define BITBYTE 8
#define ASIGLENBIT(siglen) ((siglen) * BITBYTE)
#define ALOOPBYTE(siglen) \
diff --git a/contrib/ltree/ltree_gist.c b/contrib/ltree/ltree_gist.c
index 7c39ed4298e..36874e9c726 100644
--- a/contrib/ltree/ltree_gist.c
+++ b/contrib/ltree/ltree_gist.c
@@ -130,7 +130,7 @@ ltree_same(PG_FUNCTION_ARGS)
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))
@@ -190,7 +190,7 @@ ltree_union(PG_FUNCTION_ARGS)
{
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;
@@ -260,7 +260,7 @@ ltree_penalty(PG_FUNCTION_ARGS)
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;
@@ -292,7 +292,7 @@ ltree_picksplit(PG_FUNCTION_ARGS)
{
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;
@@ -618,7 +618,7 @@ ltree_consistent(PG_FUNCTION_ARGS)
/* 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;
@@ -724,7 +724,7 @@ ltree_gist_options(PG_FUNCTION_ARGS)
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();
--
2.24.3 (Apple Git-128)