summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeikki Linnakangas2015-03-26 21:10:10 +0000
committerHeikki Linnakangas2015-03-26 21:10:10 +0000
commit8816af65e4f8285d3ef73158b09490099921f870 (patch)
tree87402c00b071e4373d9a1f4989e50e23eb04f618
parent55b59eda13a742f8af913734e22ecc8a21754414 (diff)
Minor refactoring of btree_gist code.
The gbt_var_key_copy function was doing two different things depending on the boolean argument. Seems cleaner to have two separate functions. Remove unused argument from gbt_num_compress.
-rw-r--r--contrib/btree_gist/btree_bit.c2
-rw-r--r--contrib/btree_gist/btree_cash.c3
-rw-r--r--contrib/btree_gist/btree_date.c3
-rw-r--r--contrib/btree_gist/btree_float4.c3
-rw-r--r--contrib/btree_gist/btree_float8.c3
-rw-r--r--contrib/btree_gist/btree_int2.c3
-rw-r--r--contrib/btree_gist/btree_int4.c3
-rw-r--r--contrib/btree_gist/btree_int8.c3
-rw-r--r--contrib/btree_gist/btree_macaddr.c3
-rw-r--r--contrib/btree_gist/btree_numeric.c2
-rw-r--r--contrib/btree_gist/btree_oid.c3
-rw-r--r--contrib/btree_gist/btree_time.c3
-rw-r--r--contrib/btree_gist/btree_ts.c3
-rw-r--r--contrib/btree_gist/btree_utils_num.c4
-rw-r--r--contrib/btree_gist/btree_utils_num.h3
-rw-r--r--contrib/btree_gist/btree_utils_var.c57
-rw-r--r--contrib/btree_gist/btree_utils_var.h2
17 files changed, 50 insertions, 53 deletions
diff --git a/contrib/btree_gist/btree_bit.c b/contrib/btree_gist/btree_bit.c
index 76297515c5..af210439f0 100644
--- a/contrib/btree_gist/btree_bit.c
+++ b/contrib/btree_gist/btree_bit.c
@@ -99,7 +99,7 @@ gbt_bit_l2n(GBT_VARKEY *leaf)
o = gbt_bit_xfrm(r.lower);
r.upper = r.lower = o;
- out = gbt_var_key_copy(&r, TRUE);
+ out = gbt_var_key_copy(&r);
pfree(o);
return out;
diff --git a/contrib/btree_gist/btree_cash.c b/contrib/btree_gist/btree_cash.c
index 63f86ebeef..d9b53d5e34 100644
--- a/contrib/btree_gist/btree_cash.c
+++ b/contrib/btree_gist/btree_cash.c
@@ -119,9 +119,8 @@ Datum
gbt_cash_compress(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
- GISTENTRY *retval = NULL;
- PG_RETURN_POINTER(gbt_num_compress(retval, entry, &tinfo));
+ PG_RETURN_POINTER(gbt_num_compress(entry, &tinfo));
}
diff --git a/contrib/btree_gist/btree_date.c b/contrib/btree_gist/btree_date.c
index 7a4c6aa600..153e0eb9b6 100644
--- a/contrib/btree_gist/btree_date.c
+++ b/contrib/btree_gist/btree_date.c
@@ -130,9 +130,8 @@ Datum
gbt_date_compress(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
- GISTENTRY *retval = NULL;
- PG_RETURN_POINTER(gbt_num_compress(retval, entry, &tinfo));
+ PG_RETURN_POINTER(gbt_num_compress(entry, &tinfo));
}
diff --git a/contrib/btree_gist/btree_float4.c b/contrib/btree_gist/btree_float4.c
index 778d8dad84..6a1db380ea 100644
--- a/contrib/btree_gist/btree_float4.c
+++ b/contrib/btree_gist/btree_float4.c
@@ -112,9 +112,8 @@ Datum
gbt_float4_compress(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
- GISTENTRY *retval = NULL;
- PG_RETURN_POINTER(gbt_num_compress(retval, entry, &tinfo));
+ PG_RETURN_POINTER(gbt_num_compress(entry, &tinfo));
}
diff --git a/contrib/btree_gist/btree_float8.c b/contrib/btree_gist/btree_float8.c
index c898bf2d97..3b6661038a 100644
--- a/contrib/btree_gist/btree_float8.c
+++ b/contrib/btree_gist/btree_float8.c
@@ -119,9 +119,8 @@ Datum
gbt_float8_compress(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
- GISTENTRY *retval = NULL;
- PG_RETURN_POINTER(gbt_num_compress(retval, entry, &tinfo));
+ PG_RETURN_POINTER(gbt_num_compress(entry, &tinfo));
}
diff --git a/contrib/btree_gist/btree_int2.c b/contrib/btree_gist/btree_int2.c
index a88aae6453..8db533c6e5 100644
--- a/contrib/btree_gist/btree_int2.c
+++ b/contrib/btree_gist/btree_int2.c
@@ -119,9 +119,8 @@ Datum
gbt_int2_compress(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
- GISTENTRY *retval = NULL;
- PG_RETURN_POINTER(gbt_num_compress(retval, entry, &tinfo));
+ PG_RETURN_POINTER(gbt_num_compress(entry, &tinfo));
}
diff --git a/contrib/btree_gist/btree_int4.c b/contrib/btree_gist/btree_int4.c
index 889a512078..221301c001 100644
--- a/contrib/btree_gist/btree_int4.c
+++ b/contrib/btree_gist/btree_int4.c
@@ -120,9 +120,8 @@ Datum
gbt_int4_compress(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
- GISTENTRY *retval = NULL;
- PG_RETURN_POINTER(gbt_num_compress(retval, entry, &tinfo));
+ PG_RETURN_POINTER(gbt_num_compress(entry, &tinfo));
}
diff --git a/contrib/btree_gist/btree_int8.c b/contrib/btree_gist/btree_int8.c
index 8685cee176..9fade3c6d8 100644
--- a/contrib/btree_gist/btree_int8.c
+++ b/contrib/btree_gist/btree_int8.c
@@ -120,9 +120,8 @@ Datum
gbt_int8_compress(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
- GISTENTRY *retval = NULL;
- PG_RETURN_POINTER(gbt_num_compress(retval, entry, &tinfo));
+ PG_RETURN_POINTER(gbt_num_compress(entry, &tinfo));
}
diff --git a/contrib/btree_gist/btree_macaddr.c b/contrib/btree_gist/btree_macaddr.c
index ed58a1b742..69d7a72afb 100644
--- a/contrib/btree_gist/btree_macaddr.c
+++ b/contrib/btree_gist/btree_macaddr.c
@@ -110,9 +110,8 @@ Datum
gbt_macad_compress(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
- GISTENTRY *retval = NULL;
- PG_RETURN_POINTER(gbt_num_compress(retval, entry, &tinfo));
+ PG_RETURN_POINTER(gbt_num_compress(entry, &tinfo));
}
diff --git a/contrib/btree_gist/btree_numeric.c b/contrib/btree_gist/btree_numeric.c
index 02ccca8647..47b00209c8 100644
--- a/contrib/btree_gist/btree_numeric.c
+++ b/contrib/btree_gist/btree_numeric.c
@@ -170,7 +170,7 @@ gbt_numeric_penalty(PG_FUNCTION_ARGS)
uk;
rk = gbt_var_key_readable(org);
- uni = PointerGetDatum(gbt_var_key_copy(&rk, TRUE));
+ uni = PointerGetDatum(gbt_var_key_copy(&rk));
gbt_var_bin_union(&uni, newe, PG_GET_COLLATION(), &tinfo);
ok = gbt_var_key_readable(org);
uk = gbt_var_key_readable((GBT_VARKEY *) DatumGetPointer(uni));
diff --git a/contrib/btree_gist/btree_oid.c b/contrib/btree_gist/btree_oid.c
index f6b7bfa05b..751b35df8e 100644
--- a/contrib/btree_gist/btree_oid.c
+++ b/contrib/btree_gist/btree_oid.c
@@ -120,9 +120,8 @@ Datum
gbt_oid_compress(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
- GISTENTRY *retval = NULL;
- PG_RETURN_POINTER(gbt_num_compress(retval, entry, &tinfo));
+ PG_RETURN_POINTER(gbt_num_compress(entry, &tinfo));
}
diff --git a/contrib/btree_gist/btree_time.c b/contrib/btree_gist/btree_time.c
index cdf81711e7..a620e4a23c 100644
--- a/contrib/btree_gist/btree_time.c
+++ b/contrib/btree_gist/btree_time.c
@@ -157,9 +157,8 @@ Datum
gbt_time_compress(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
- GISTENTRY *retval = NULL;
- PG_RETURN_POINTER(gbt_num_compress(retval, entry, &tinfo));
+ PG_RETURN_POINTER(gbt_num_compress(entry, &tinfo));
}
diff --git a/contrib/btree_gist/btree_ts.c b/contrib/btree_gist/btree_ts.c
index d472d494c9..80bbe34ff6 100644
--- a/contrib/btree_gist/btree_ts.c
+++ b/contrib/btree_gist/btree_ts.c
@@ -212,9 +212,8 @@ Datum
gbt_ts_compress(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
- GISTENTRY *retval = NULL;
- PG_RETURN_POINTER(gbt_num_compress(retval, entry, &tinfo));
+ PG_RETURN_POINTER(gbt_num_compress(entry, &tinfo));
}
diff --git a/contrib/btree_gist/btree_utils_num.c b/contrib/btree_gist/btree_utils_num.c
index 7adf3aac48..86a7f486f9 100644
--- a/contrib/btree_gist/btree_utils_num.c
+++ b/contrib/btree_gist/btree_utils_num.c
@@ -11,8 +11,10 @@
GISTENTRY *
-gbt_num_compress(GISTENTRY *retval, GISTENTRY *entry, const gbtree_ninfo *tinfo)
+gbt_num_compress(GISTENTRY *entry, const gbtree_ninfo *tinfo)
{
+ GISTENTRY *retval;
+
if (entry->leafkey)
{
union
diff --git a/contrib/btree_gist/btree_utils_num.h b/contrib/btree_gist/btree_utils_num.h
index 0d79cd2a7f..05a313a131 100644
--- a/contrib/btree_gist/btree_utils_num.h
+++ b/contrib/btree_gist/btree_utils_num.h
@@ -128,8 +128,7 @@ extern float8 gbt_num_distance(const GBT_NUMKEY_R *key, const void *query,
extern GIST_SPLITVEC *gbt_num_picksplit(const GistEntryVector *entryvec, GIST_SPLITVEC *v,
const gbtree_ninfo *tinfo);
-extern GISTENTRY *gbt_num_compress(GISTENTRY *retval, GISTENTRY *entry,
- const gbtree_ninfo *tinfo);
+extern GISTENTRY *gbt_num_compress(GISTENTRY *entry, const gbtree_ninfo *tinfo);
extern void *gbt_num_union(GBT_NUMKEY *out, const GistEntryVector *entryvec,
diff --git a/contrib/btree_gist/btree_utils_var.c b/contrib/btree_gist/btree_utils_var.c
index 6ad33478d0..e664211198 100644
--- a/contrib/btree_gist/btree_utils_var.c
+++ b/contrib/btree_gist/btree_utils_var.c
@@ -66,26 +66,37 @@ gbt_var_key_readable(const GBT_VARKEY *k)
}
+/*
+ * Create a leaf-entry to store in the index, from a single Datum.
+ */
+static GBT_VARKEY *
+gbt_var_key_from_datum(const struct varlena *u)
+{
+ int32 lowersize = VARSIZE(u);
+ GBT_VARKEY *r;
+
+ r = (GBT_VARKEY *) palloc(lowersize + VARHDRSZ);
+ memcpy(VARDATA(r), u, lowersize);
+ SET_VARSIZE(r, lowersize + VARHDRSZ);
+
+ return r;
+}
+
+/*
+ * Create an entry to store in the index, from lower and upper bound.
+ */
GBT_VARKEY *
-gbt_var_key_copy(const GBT_VARKEY_R *u, bool force_node)
+gbt_var_key_copy(const GBT_VARKEY_R *u)
{
- GBT_VARKEY *r = NULL;
int32 lowersize = VARSIZE(u->lower);
int32 uppersize = VARSIZE(u->upper);
+ GBT_VARKEY *r;
+
+ r = (GBT_VARKEY *) palloc0(INTALIGN(lowersize) + uppersize + VARHDRSZ);
+ memcpy(VARDATA(r), u->lower, lowersize);
+ memcpy(VARDATA(r) + INTALIGN(lowersize), u->upper, uppersize);
+ SET_VARSIZE(r, INTALIGN(lowersize) + uppersize + VARHDRSZ);
- if (u->lower == u->upper && !force_node)
- { /* leaf key mode */
- r = (GBT_VARKEY *) palloc(lowersize + VARHDRSZ);
- memcpy(VARDATA(r), u->lower, lowersize);
- SET_VARSIZE(r, lowersize + VARHDRSZ);
- }
- else
- { /* node key mode */
- r = (GBT_VARKEY *) palloc0(INTALIGN(lowersize) + uppersize + VARHDRSZ);
- memcpy(VARDATA(r), u->lower, lowersize);
- memcpy(VARDATA(r) + INTALIGN(lowersize), u->upper, uppersize);
- SET_VARSIZE(r, INTALIGN(lowersize) + uppersize + VARHDRSZ);
- }
return r;
}
@@ -255,18 +266,17 @@ gbt_var_bin_union(Datum *u, GBT_VARKEY *e, Oid collation,
}
if (update)
- *u = PointerGetDatum(gbt_var_key_copy(&nr, TRUE));
+ *u = PointerGetDatum(gbt_var_key_copy(&nr));
}
else
{
nr.lower = eo.lower;
nr.upper = eo.upper;
- *u = PointerGetDatum(gbt_var_key_copy(&nr, TRUE));
+ *u = PointerGetDatum(gbt_var_key_copy(&nr));
}
}
-
GISTENTRY *
gbt_var_compress(GISTENTRY *entry, const gbtree_vinfo *tinfo)
{
@@ -274,12 +284,10 @@ gbt_var_compress(GISTENTRY *entry, const gbtree_vinfo *tinfo)
if (entry->leafkey)
{
- GBT_VARKEY *r = NULL;
- bytea *leaf = (bytea *) DatumGetPointer(PG_DETOAST_DATUM(entry->key));
- GBT_VARKEY_R u;
+ struct varlena *leaf = PG_DETOAST_DATUM(entry->key);
+ GBT_VARKEY *r;
- u.lower = u.upper = leaf;
- r = gbt_var_key_copy(&u, FALSE);
+ r = gbt_var_key_from_datum(leaf);
retval = palloc(sizeof(GISTENTRY));
gistentryinit(*retval, PointerGetDatum(r),
@@ -293,7 +301,6 @@ gbt_var_compress(GISTENTRY *entry, const gbtree_vinfo *tinfo)
}
-
GBT_VARKEY *
gbt_var_union(const GistEntryVector *entryvec, int32 *size, Oid collation,
const gbtree_vinfo *tinfo)
@@ -308,7 +315,7 @@ gbt_var_union(const GistEntryVector *entryvec, int32 *size, Oid collation,
cur = (GBT_VARKEY *) DatumGetPointer(entryvec->vector[0].key);
rk = gbt_var_key_readable(cur);
- out = PointerGetDatum(gbt_var_key_copy(&rk, TRUE));
+ out = PointerGetDatum(gbt_var_key_copy(&rk));
for (i = 1; i < numranges; i++)
{
diff --git a/contrib/btree_gist/btree_utils_var.h b/contrib/btree_gist/btree_utils_var.h
index 7a3eeec01a..9a7c4d1055 100644
--- a/contrib/btree_gist/btree_utils_var.h
+++ b/contrib/btree_gist/btree_utils_var.h
@@ -47,7 +47,7 @@ typedef struct
extern GBT_VARKEY_R gbt_var_key_readable(const GBT_VARKEY *k);
-extern GBT_VARKEY *gbt_var_key_copy(const GBT_VARKEY_R *u, bool force_node);
+extern GBT_VARKEY *gbt_var_key_copy(const GBT_VARKEY_R *u);
extern GISTENTRY *gbt_var_compress(GISTENTRY *entry, const gbtree_vinfo *tinfo);