aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--contrib/btree_gist/btree_cash.c1
-rw-r--r--contrib/btree_gist/btree_date.c1
-rw-r--r--contrib/btree_gist/btree_float4.c1
-rw-r--r--contrib/btree_gist/btree_float8.c1
-rw-r--r--contrib/btree_gist/btree_inet.c1
-rw-r--r--contrib/btree_gist/btree_int2.c1
-rw-r--r--contrib/btree_gist/btree_int4.c1
-rw-r--r--contrib/btree_gist/btree_int8.c1
-rw-r--r--contrib/btree_gist/btree_interval.c5
-rw-r--r--contrib/btree_gist/btree_macaddr.c1
-rw-r--r--contrib/btree_gist/btree_oid.c1
-rw-r--r--contrib/btree_gist/btree_time.c1
-rw-r--r--contrib/btree_gist/btree_ts.c1
-rw-r--r--contrib/btree_gist/btree_utils_num.c6
-rw-r--r--contrib/btree_gist/btree_utils_num.h3
15 files changed, 22 insertions, 4 deletions
diff --git a/contrib/btree_gist/btree_cash.c b/contrib/btree_gist/btree_cash.c
index 8de3716c945..63f86ebeefe 100644
--- a/contrib/btree_gist/btree_cash.c
+++ b/contrib/btree_gist/btree_cash.c
@@ -78,6 +78,7 @@ static const gbtree_ninfo tinfo =
{
gbt_t_cash,
sizeof(Cash),
+ 16, /* sizeof(gbtreekey16) */
gbt_cashgt,
gbt_cashge,
gbt_casheq,
diff --git a/contrib/btree_gist/btree_date.c b/contrib/btree_gist/btree_date.c
index 9cab7ec42f5..7a4c6aa6003 100644
--- a/contrib/btree_gist/btree_date.c
+++ b/contrib/btree_gist/btree_date.c
@@ -96,6 +96,7 @@ static const gbtree_ninfo tinfo =
{
gbt_t_date,
sizeof(DateADT),
+ 8, /* sizeof(gbtreekey8) */
gbt_dategt,
gbt_datege,
gbt_dateeq,
diff --git a/contrib/btree_gist/btree_float4.c b/contrib/btree_gist/btree_float4.c
index 55e1c4c1c6d..778d8dad844 100644
--- a/contrib/btree_gist/btree_float4.c
+++ b/contrib/btree_gist/btree_float4.c
@@ -77,6 +77,7 @@ static const gbtree_ninfo tinfo =
{
gbt_t_float4,
sizeof(float4),
+ 8, /* sizeof(gbtreekey8) */
gbt_float4gt,
gbt_float4ge,
gbt_float4eq,
diff --git a/contrib/btree_gist/btree_float8.c b/contrib/btree_gist/btree_float8.c
index 62271dec84a..c898bf2d975 100644
--- a/contrib/btree_gist/btree_float8.c
+++ b/contrib/btree_gist/btree_float8.c
@@ -85,6 +85,7 @@ static const gbtree_ninfo tinfo =
{
gbt_t_float8,
sizeof(float8),
+ 16, /* sizeof(gbtreekey16) */
gbt_float8gt,
gbt_float8ge,
gbt_float8eq,
diff --git a/contrib/btree_gist/btree_inet.c b/contrib/btree_gist/btree_inet.c
index 24ae6bf3693..822786125d9 100644
--- a/contrib/btree_gist/btree_inet.c
+++ b/contrib/btree_gist/btree_inet.c
@@ -74,6 +74,7 @@ static const gbtree_ninfo tinfo =
{
gbt_t_inet,
sizeof(double),
+ 16, /* sizeof(gbtreekey16) */
gbt_inetgt,
gbt_inetge,
gbt_ineteq,
diff --git a/contrib/btree_gist/btree_int2.c b/contrib/btree_gist/btree_int2.c
index d51ad0c2ab2..a88aae64537 100644
--- a/contrib/btree_gist/btree_int2.c
+++ b/contrib/btree_gist/btree_int2.c
@@ -77,6 +77,7 @@ static const gbtree_ninfo tinfo =
{
gbt_t_int2,
sizeof(int16),
+ 4, /* sizeof(gbtreekey4) */
gbt_int2gt,
gbt_int2ge,
gbt_int2eq,
diff --git a/contrib/btree_gist/btree_int4.c b/contrib/btree_gist/btree_int4.c
index e7641f22847..889a5120783 100644
--- a/contrib/btree_gist/btree_int4.c
+++ b/contrib/btree_gist/btree_int4.c
@@ -78,6 +78,7 @@ static const gbtree_ninfo tinfo =
{
gbt_t_int4,
sizeof(int32),
+ 8, /* sizeof(gbtreekey8) */
gbt_int4gt,
gbt_int4ge,
gbt_int4eq,
diff --git a/contrib/btree_gist/btree_int8.c b/contrib/btree_gist/btree_int8.c
index 8bc8cb5fdf7..8685cee1760 100644
--- a/contrib/btree_gist/btree_int8.c
+++ b/contrib/btree_gist/btree_int8.c
@@ -78,6 +78,7 @@ static const gbtree_ninfo tinfo =
{
gbt_t_int8,
sizeof(int64),
+ 16, /* sizeof(gbtreekey16) */
gbt_int8gt,
gbt_int8ge,
gbt_int8eq,
diff --git a/contrib/btree_gist/btree_interval.c b/contrib/btree_gist/btree_interval.c
index 93a341eb77e..68d80e8e0ae 100644
--- a/contrib/btree_gist/btree_interval.c
+++ b/contrib/btree_gist/btree_interval.c
@@ -87,7 +87,9 @@ gbt_intv_dist(const void *a, const void *b)
/*
* INTERVALSIZE should be the actual size-on-disk of an Interval, as shown
* in pg_type. This might be less than sizeof(Interval) if the compiler
- * insists on adding alignment padding at the end of the struct.
+ * insists on adding alignment padding at the end of the struct. (Note:
+ * this concern is obsolete with the current definition of Interval, but
+ * was real before a separate "day" field was added to it.)
*/
#define INTERVALSIZE 16
@@ -95,6 +97,7 @@ static const gbtree_ninfo tinfo =
{
gbt_t_intv,
sizeof(Interval),
+ 32, /* sizeof(gbtreekey32) */
gbt_intvgt,
gbt_intvge,
gbt_intveq,
diff --git a/contrib/btree_gist/btree_macaddr.c b/contrib/btree_gist/btree_macaddr.c
index 6255564ac5a..244b95154bb 100644
--- a/contrib/btree_gist/btree_macaddr.c
+++ b/contrib/btree_gist/btree_macaddr.c
@@ -74,6 +74,7 @@ static const gbtree_ninfo tinfo =
{
gbt_t_macad,
sizeof(macaddr),
+ 16, /* sizeof(gbtreekey16) */
gbt_macadgt,
gbt_macadge,
gbt_macadeq,
diff --git a/contrib/btree_gist/btree_oid.c b/contrib/btree_gist/btree_oid.c
index dcd0765417b..f6b7bfa05b7 100644
--- a/contrib/btree_gist/btree_oid.c
+++ b/contrib/btree_gist/btree_oid.c
@@ -84,6 +84,7 @@ static const gbtree_ninfo tinfo =
{
gbt_t_oid,
sizeof(Oid),
+ 8, /* sizeof(gbtreekey8) */
gbt_oidgt,
gbt_oidge,
gbt_oideq,
diff --git a/contrib/btree_gist/btree_time.c b/contrib/btree_gist/btree_time.c
index e0e32428e22..cdf81711e76 100644
--- a/contrib/btree_gist/btree_time.c
+++ b/contrib/btree_gist/btree_time.c
@@ -124,6 +124,7 @@ static const gbtree_ninfo tinfo =
{
gbt_t_time,
sizeof(TimeADT),
+ 16, /* sizeof(gbtreekey16) */
gbt_timegt,
gbt_timege,
gbt_timeeq,
diff --git a/contrib/btree_gist/btree_ts.c b/contrib/btree_gist/btree_ts.c
index 10f325d6720..a13dcc8beaa 100644
--- a/contrib/btree_gist/btree_ts.c
+++ b/contrib/btree_gist/btree_ts.c
@@ -127,6 +127,7 @@ static const gbtree_ninfo tinfo =
{
gbt_t_ts,
sizeof(Timestamp),
+ 16, /* sizeof(gbtreekey16) */
gbt_tsgt,
gbt_tsge,
gbt_tseq,
diff --git a/contrib/btree_gist/btree_utils_num.c b/contrib/btree_gist/btree_utils_num.c
index 5e52ab542bf..505633c98b8 100644
--- a/contrib/btree_gist/btree_utils_num.c
+++ b/contrib/btree_gist/btree_utils_num.c
@@ -28,7 +28,7 @@ gbt_num_compress(GISTENTRY *retval, GISTENTRY *entry, const gbtree_ninfo *tinfo)
Cash ch;
} v;
- GBT_NUMKEY *r = (GBT_NUMKEY *) palloc0(2 * tinfo->size);
+ GBT_NUMKEY *r = (GBT_NUMKEY *) palloc0(tinfo->indexsize);
void *leaf = NULL;
switch (tinfo->t)
@@ -77,6 +77,8 @@ gbt_num_compress(GISTENTRY *retval, GISTENTRY *entry, const gbtree_ninfo *tinfo)
leaf = DatumGetPointer(entry->key);
}
+ Assert(tinfo->indexsize >= 2 * tinfo->size);
+
memcpy((void *) &r[0], leaf, tinfo->size);
memcpy((void *) &r[tinfo->size], leaf, tinfo->size);
retval = palloc(sizeof(GISTENTRY));
@@ -165,7 +167,7 @@ gbt_num_bin_union(Datum *u, GBT_NUMKEY *e, const gbtree_ninfo *tinfo)
if (!DatumGetPointer(*u))
{
- *u = PointerGetDatum(palloc(2 * tinfo->size));
+ *u = PointerGetDatum(palloc0(tinfo->indexsize));
memcpy((void *) &(((GBT_NUMKEY *) DatumGetPointer(*u))[0]), (void *) rd.lower, tinfo->size);
memcpy((void *) &(((GBT_NUMKEY *) DatumGetPointer(*u))[tinfo->size]), (void *) rd.upper, tinfo->size);
}
diff --git a/contrib/btree_gist/btree_utils_num.h b/contrib/btree_gist/btree_utils_num.h
index d7a61d22426..0d79cd2a7f7 100644
--- a/contrib/btree_gist/btree_utils_num.h
+++ b/contrib/btree_gist/btree_utils_num.h
@@ -37,7 +37,8 @@ typedef struct
/* Attribs */
enum gbtree_type t; /* data type */
- int32 size; /* size of type , 0 means variable */
+ int32 size; /* size of type, 0 means variable */
+ int32 indexsize; /* size of datums stored in index */
/* Methods */