aboutsummaryrefslogtreecommitdiff
path: root/contrib/btree_gist/btree_utils_var.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/btree_gist/btree_utils_var.c')
-rw-r--r--contrib/btree_gist/btree_utils_var.c61
1 files changed, 14 insertions, 47 deletions
diff --git a/contrib/btree_gist/btree_utils_var.c b/contrib/btree_gist/btree_utils_var.c
index d751a11f0eb..720381428f2 100644
--- a/contrib/btree_gist/btree_utils_var.c
+++ b/contrib/btree_gist/btree_utils_var.c
@@ -9,21 +9,21 @@ Datum gbt_var_decompress(PG_FUNCTION_ARGS);
Datum
gbt_var_decompress(PG_FUNCTION_ARGS)
{
- GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
- GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(PG_DETOAST_DATUM(entry->key));
+ GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
+ GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(PG_DETOAST_DATUM(entry->key));
- if (key != (GBT_VARKEY *) DatumGetPointer(entry->key))
- {
- GISTENTRY *retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
+ if (key != (GBT_VARKEY *) DatumGetPointer(entry->key))
+ {
+ GISTENTRY *retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
- gistentryinit(*retval, PointerGetDatum(key),
- entry->rel, entry->page,
- entry->offset, VARSIZE(key), FALSE);
+ gistentryinit(*retval, PointerGetDatum(key),
+ entry->rel, entry->page,
+ entry->offset, VARSIZE(key), FALSE);
- PG_RETURN_POINTER(retval);
- }
+ PG_RETURN_POINTER(retval);
+ }
- PG_RETURN_POINTER(entry);
+ PG_RETURN_POINTER(entry);
}
/* Returns a better readable representaion of variable key ( sets pointer ) */
@@ -216,7 +216,6 @@ gbt_var_bin_union(Datum *u, GBT_VARKEY * e, const gbtree_vinfo * tinfo)
GBT_VARKEY_R nr;
GBT_VARKEY_R eo = gbt_var_key_readable(e);
-
if (eo.lower == eo.upper) /* leaf */
{
tmp = gbt_var_leaf2node(e, tinfo);
@@ -235,20 +234,16 @@ gbt_var_bin_union(Datum *u, GBT_VARKEY * e, const gbtree_vinfo * tinfo)
nr.upper = ro.upper;
nk = gbt_var_key_copy(&nr, TRUE);
}
+
if ((*tinfo->f_cmp) ((bytea *) ro.upper, (bytea *) eo.upper) < 0)
{
nr.upper = eo.upper;
nr.lower = ro.lower;
nk = gbt_var_key_copy(&nr, TRUE);
}
+
if (nk)
- {
- pfree(DatumGetPointer(*u));
*u = PointerGetDatum(nk);
- }
-
-
-
}
else
{
@@ -256,10 +251,6 @@ gbt_var_bin_union(Datum *u, GBT_VARKEY * e, const gbtree_vinfo * tinfo)
nr.upper = eo.upper;
*u = PointerGetDatum(gbt_var_key_copy(&nr, TRUE));
}
-
- if (tmp && tmp != e)
- pfree(tmp);
-
}
@@ -273,15 +264,12 @@ gbt_var_compress(GISTENTRY *entry, const gbtree_vinfo * tinfo)
if (entry->leafkey)
{
GBT_VARKEY *r = NULL;
- bytea *tstd = (bytea *) DatumGetPointer(entry->key); /* toasted */
- bytea *leaf = (bytea *) DatumGetPointer(PG_DETOAST_DATUM(entry->key)); /* untoasted */
+ bytea *leaf = (bytea *) DatumGetPointer(PG_DETOAST_DATUM(entry->key));
GBT_VARKEY_R u;
u.lower = u.upper = leaf;
r = gbt_var_key_copy(&u, FALSE);
- if (tstd != leaf)
- pfree(leaf);
retval = palloc(sizeof(GISTENTRY));
gistentryinit(*retval, PointerGetDatum(r),
entry->rel, entry->page,
@@ -319,7 +307,6 @@ gbt_var_union(const GistEntryVector *entryvec, int32 *size, const gbtree_vinfo *
/* Truncate (=compress) key */
-
if (tinfo->trnc)
{
int32 plen;
@@ -328,7 +315,6 @@ gbt_var_union(const GistEntryVector *entryvec, int32 *size, const gbtree_vinfo *
plen = gbt_var_node_cp_len((GBT_VARKEY *) DatumGetPointer(out), tinfo);
trc = gbt_var_node_truncate((GBT_VARKEY *) DatumGetPointer(out), plen + 1, tinfo);
- pfree(DatumGetPointer(out));
out = PointerGetDatum(trc);
}
@@ -428,17 +414,12 @@ gbt_var_penalty(float *res, const GISTENTRY *o, const GISTENTRY *n, const gbtree
}
dres /= 256.0;
}
- pfree(DatumGetPointer(d));
*res += FLT_MIN;
*res += (float) (dres / ((double) (ol + 1)));
*res *= (FLT_MAX / (o->rel->rd_att->natts + 1));
-
}
- if (tmp && tmp != newe)
- pfree(tmp);
-
return res;
}
@@ -524,18 +505,9 @@ gbt_var_picksplit(const GistEntryVector *entryvec, GIST_SPLITVEC *v, const gbtre
}
}
- /* Free strxfrm'ed leafs */
- for (i = 0; i < svcntr; i++)
- pfree(sv[i]);
-
- if (sv)
- pfree(sv);
-
/* Truncate (=compress) key */
-
if (tinfo->trnc)
{
-
int32 ll = gbt_var_node_cp_len((GBT_VARKEY *) DatumGetPointer(v->spl_ldatum), tinfo);
int32 lr = gbt_var_node_cp_len((GBT_VARKEY *) DatumGetPointer(v->spl_rdatum), tinfo);
GBT_VARKEY *dl;
@@ -546,15 +518,10 @@ gbt_var_picksplit(const GistEntryVector *entryvec, GIST_SPLITVEC *v, const gbtre
dl = gbt_var_node_truncate((GBT_VARKEY *) DatumGetPointer(v->spl_ldatum), ll, tinfo);
dr = gbt_var_node_truncate((GBT_VARKEY *) DatumGetPointer(v->spl_rdatum), ll, tinfo);
- pfree(DatumGetPointer(v->spl_ldatum));
- pfree(DatumGetPointer(v->spl_rdatum));
v->spl_ldatum = PointerGetDatum(dl);
v->spl_rdatum = PointerGetDatum(dr);
-
}
- pfree(arr);
-
return v;
}