Commit 36ab6005 authored by Neil Conway's avatar Neil Conway

Cleanup of GiST extensions in contrib/: now that we always invoke GiST

methods in a short-lived memory context, there is no need for GiST methods
to do their own manual (and error-prone) memory management.
parent 87581343
...@@ -127,7 +127,6 @@ gbt_bit_consistent(PG_FUNCTION_ARGS) ...@@ -127,7 +127,6 @@ gbt_bit_consistent(PG_FUNCTION_ARGS)
{ {
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0); GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(entry->key); GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(entry->key);
void *qtst = (void *) PG_GETARG_POINTER(1);
void *query = (void *) DatumGetByteaP(PG_GETARG_DATUM(1)); void *query = (void *) DatumGetByteaP(PG_GETARG_DATUM(1));
StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2); StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
bool retval = FALSE; bool retval = FALSE;
...@@ -140,11 +139,7 @@ gbt_bit_consistent(PG_FUNCTION_ARGS) ...@@ -140,11 +139,7 @@ gbt_bit_consistent(PG_FUNCTION_ARGS)
bytea *q = gbt_bit_xfrm((bytea *) query); bytea *q = gbt_bit_xfrm((bytea *) query);
retval = gbt_var_consistent(&r, (void *) q, &strategy, FALSE, &tinfo); retval = gbt_var_consistent(&r, (void *) q, &strategy, FALSE, &tinfo);
pfree(q);
} }
if (qtst != query)
pfree(query);
PG_RETURN_BOOL(retval); PG_RETURN_BOOL(retval);
} }
......
...@@ -97,16 +97,12 @@ gbt_bytea_consistent(PG_FUNCTION_ARGS) ...@@ -97,16 +97,12 @@ gbt_bytea_consistent(PG_FUNCTION_ARGS)
{ {
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0); GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(entry->key); GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(entry->key);
void *qtst = (void *) PG_GETARG_POINTER(1);
void *query = (void *) DatumGetByteaP(PG_GETARG_DATUM(1)); void *query = (void *) DatumGetByteaP(PG_GETARG_DATUM(1));
StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2); StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
bool retval = FALSE; bool retval;
GBT_VARKEY_R r = gbt_var_key_readable(key); GBT_VARKEY_R r = gbt_var_key_readable(key);
retval = gbt_var_consistent(&r, query, &strategy, GIST_LEAF(entry), &tinfo); retval = gbt_var_consistent(&r, query, &strategy, GIST_LEAF(entry), &tinfo);
if (qtst != query)
pfree(query);
PG_RETURN_BOOL(retval); PG_RETURN_BOOL(retval);
} }
......
...@@ -98,16 +98,12 @@ gbt_numeric_consistent(PG_FUNCTION_ARGS) ...@@ -98,16 +98,12 @@ gbt_numeric_consistent(PG_FUNCTION_ARGS)
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0); GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(entry->key); GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(entry->key);
void *qtst = (void *) PG_GETARG_POINTER(1);
void *query = (void *) DatumGetNumeric(PG_GETARG_DATUM(1)); void *query = (void *) DatumGetNumeric(PG_GETARG_DATUM(1));
StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2); StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
bool retval = FALSE; bool retval;
GBT_VARKEY_R r = gbt_var_key_readable(key); GBT_VARKEY_R r = gbt_var_key_readable(key);
retval = gbt_var_consistent(&r, query, &strategy, GIST_LEAF(entry), &tinfo); retval = gbt_var_consistent(&r, query, &strategy, GIST_LEAF(entry), &tinfo);
if (qtst != query)
pfree(query);
PG_RETURN_BOOL(retval); PG_RETURN_BOOL(retval);
} }
...@@ -164,8 +160,6 @@ gbt_numeric_penalty(PG_FUNCTION_ARGS) ...@@ -164,8 +160,6 @@ gbt_numeric_penalty(PG_FUNCTION_ARGS)
PointerGetDatum(uk.lower) PointerGetDatum(uk.lower)
)); ));
pfree(DatumGetPointer(uni));
os = DatumGetNumeric(DirectFunctionCall2( os = DatumGetNumeric(DirectFunctionCall2(
numeric_sub, numeric_sub,
PointerGetDatum(ok.upper), PointerGetDatum(ok.upper),
...@@ -178,27 +172,21 @@ gbt_numeric_penalty(PG_FUNCTION_ARGS) ...@@ -178,27 +172,21 @@ gbt_numeric_penalty(PG_FUNCTION_ARGS)
NumericGetDatum(os) NumericGetDatum(os)
)); ));
pfree(os);
if (NUMERIC_IS_NAN(us)) if (NUMERIC_IS_NAN(us))
{ {
if (NUMERIC_IS_NAN(os)) if (NUMERIC_IS_NAN(os))
*result = 0.0; *result = 0.0;
else else
*result = 1.0; *result = 1.0;
} }
else else
{ {
Numeric nul = DatumGetNumeric(DirectFunctionCall1(int4_numeric, Int32GetDatum(0))); Numeric nul = DatumGetNumeric(DirectFunctionCall1(int4_numeric, Int32GetDatum(0)));
*result = 0.0; *result = 0.0;
if (DirectFunctionCall2(numeric_gt, NumericGetDatum(ds), NumericGetDatum(nul))) if (DirectFunctionCall2(numeric_gt, NumericGetDatum(ds), NumericGetDatum(nul)))
{ {
*result += FLT_MIN; *result += FLT_MIN;
os = DatumGetNumeric(DirectFunctionCall2( os = DatumGetNumeric(DirectFunctionCall2(
numeric_div, numeric_div,
...@@ -206,19 +194,12 @@ gbt_numeric_penalty(PG_FUNCTION_ARGS) ...@@ -206,19 +194,12 @@ gbt_numeric_penalty(PG_FUNCTION_ARGS)
NumericGetDatum(us) NumericGetDatum(us)
)); ));
*result += (float4) DatumGetFloat8(DirectFunctionCall1(numeric_float8_no_overflow, NumericGetDatum(os))); *result += (float4) DatumGetFloat8(DirectFunctionCall1(numeric_float8_no_overflow, NumericGetDatum(os)));
pfree(os);
} }
pfree(nul);
} }
if (*result > 0) if (*result > 0)
*result *= (FLT_MAX / (((GISTENTRY *) PG_GETARG_POINTER(0))->rel->rd_att->natts + 1)); *result *= (FLT_MAX / (((GISTENTRY *) PG_GETARG_POINTER(0))->rel->rd_att->natts + 1));
pfree(us);
pfree(ds);
PG_RETURN_POINTER(result); PG_RETURN_POINTER(result);
} }
......
...@@ -108,8 +108,6 @@ gbt_bpchar_compress(PG_FUNCTION_ARGS) ...@@ -108,8 +108,6 @@ gbt_bpchar_compress(PG_FUNCTION_ARGS)
entry->rel, entry->page, entry->rel, entry->page,
entry->offset, VARSIZE(DatumGetPointer(d)), TRUE); entry->offset, VARSIZE(DatumGetPointer(d)), TRUE);
retval = gbt_var_compress(&trim, &tinfo); retval = gbt_var_compress(&trim, &tinfo);
pfree(DatumGetPointer(d));
} }
else else
retval = entry; retval = entry;
...@@ -124,7 +122,6 @@ gbt_text_consistent(PG_FUNCTION_ARGS) ...@@ -124,7 +122,6 @@ gbt_text_consistent(PG_FUNCTION_ARGS)
{ {
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0); GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(entry->key); GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(entry->key);
void *qtst = (void *) PG_GETARG_POINTER(1);
void *query = (void *) DatumGetTextP(PG_GETARG_DATUM(1)); void *query = (void *) DatumGetTextP(PG_GETARG_DATUM(1));
StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2); StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
bool retval = FALSE; bool retval = FALSE;
...@@ -132,9 +129,6 @@ gbt_text_consistent(PG_FUNCTION_ARGS) ...@@ -132,9 +129,6 @@ gbt_text_consistent(PG_FUNCTION_ARGS)
retval = gbt_var_consistent(&r, query, &strategy, GIST_LEAF(entry), &tinfo); retval = gbt_var_consistent(&r, query, &strategy, GIST_LEAF(entry), &tinfo);
if (qtst != query)
pfree(query);
PG_RETURN_BOOL(retval); PG_RETURN_BOOL(retval);
} }
...@@ -144,25 +138,17 @@ gbt_bpchar_consistent(PG_FUNCTION_ARGS) ...@@ -144,25 +138,17 @@ gbt_bpchar_consistent(PG_FUNCTION_ARGS)
{ {
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0); GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(entry->key); GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(entry->key);
void *qtst = (void *) PG_GETARG_POINTER(1);
void *query = (void *) DatumGetPointer(PG_DETOAST_DATUM(PG_GETARG_DATUM(1))); void *query = (void *) DatumGetPointer(PG_DETOAST_DATUM(PG_GETARG_DATUM(1)));
void *trim = (void *) DatumGetPointer(DirectFunctionCall1(rtrim1, PointerGetDatum(query))); void *trim = (void *) DatumGetPointer(DirectFunctionCall1(rtrim1, PointerGetDatum(query)));
StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2); StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
bool retval = FALSE; bool retval;
GBT_VARKEY_R r = gbt_var_key_readable(key); GBT_VARKEY_R r = gbt_var_key_readable(key);
retval = gbt_var_consistent(&r, trim, &strategy, GIST_LEAF(entry), &tinfo); retval = gbt_var_consistent(&r, trim, &strategy, GIST_LEAF(entry), &tinfo);
pfree(trim);
if (qtst != query)
pfree(query);
PG_RETURN_BOOL(retval); PG_RETURN_BOOL(retval);
} }
Datum Datum
gbt_text_union(PG_FUNCTION_ARGS) gbt_text_union(PG_FUNCTION_ARGS)
{ {
......
...@@ -222,7 +222,6 @@ gbt_time_penalty(PG_FUNCTION_ARGS) ...@@ -222,7 +222,6 @@ gbt_time_penalty(PG_FUNCTION_ARGS)
/* see interval_larger */ /* see interval_larger */
res = Max(intr->time + intr->month * (30 * 86400), 0); res = Max(intr->time + intr->month * (30 * 86400), 0);
pfree(intr);
intr = DatumGetIntervalP(DirectFunctionCall2( intr = DatumGetIntervalP(DirectFunctionCall2(
time_mi_time, time_mi_time,
...@@ -231,7 +230,6 @@ gbt_time_penalty(PG_FUNCTION_ARGS) ...@@ -231,7 +230,6 @@ gbt_time_penalty(PG_FUNCTION_ARGS)
/* see interval_larger */ /* see interval_larger */
res += Max(intr->time + intr->month * (30 * 86400), 0); res += Max(intr->time + intr->month * (30 * 86400), 0);
pfree(intr);
*result = 0.0; *result = 0.0;
...@@ -244,7 +242,6 @@ gbt_time_penalty(PG_FUNCTION_ARGS) ...@@ -244,7 +242,6 @@ gbt_time_penalty(PG_FUNCTION_ARGS)
*result += FLT_MIN; *result += FLT_MIN;
*result += (float) (res / ((double) (res + intr->time + intr->month * (30 * 86400)))); *result += (float) (res / ((double) (res + intr->time + intr->month * (30 * 86400))));
*result *= (FLT_MAX / (((GISTENTRY *) PG_GETARG_POINTER(0))->rel->rd_att->natts + 1)); *result *= (FLT_MAX / (((GISTENTRY *) PG_GETARG_POINTER(0))->rel->rd_att->natts + 1));
pfree(intr);
} }
PG_RETURN_POINTER(result); PG_RETURN_POINTER(result);
......
...@@ -226,7 +226,6 @@ gbt_ts_penalty(PG_FUNCTION_ARGS) ...@@ -226,7 +226,6 @@ gbt_ts_penalty(PG_FUNCTION_ARGS)
#ifdef HAVE_INT64_TIMESTAMP #ifdef HAVE_INT64_TIMESTAMP
int64 res; int64 res;
#else #else
double res; double res;
#endif #endif
...@@ -240,7 +239,6 @@ gbt_ts_penalty(PG_FUNCTION_ARGS) ...@@ -240,7 +239,6 @@ gbt_ts_penalty(PG_FUNCTION_ARGS)
/* see interval_larger */ /* see interval_larger */
res = Max(intr->time + intr->month * (30 * 86400), 0); res = Max(intr->time + intr->month * (30 * 86400), 0);
pfree(intr);
intr = DatumGetIntervalP(DirectFunctionCall2( intr = DatumGetIntervalP(DirectFunctionCall2(
timestamp_mi, timestamp_mi,
...@@ -250,7 +248,6 @@ gbt_ts_penalty(PG_FUNCTION_ARGS) ...@@ -250,7 +248,6 @@ gbt_ts_penalty(PG_FUNCTION_ARGS)
/* see interval_larger */ /* see interval_larger */
res += Max(intr->time + intr->month * (30 * 86400), 0); res += Max(intr->time + intr->month * (30 * 86400), 0);
pfree(intr);
*result = 0.0; *result = 0.0;
...@@ -264,11 +261,9 @@ gbt_ts_penalty(PG_FUNCTION_ARGS) ...@@ -264,11 +261,9 @@ gbt_ts_penalty(PG_FUNCTION_ARGS)
*result += FLT_MIN; *result += FLT_MIN;
*result += (float) (res / ((double) (res + intr->time + intr->month * (30 * 86400)))); *result += (float) (res / ((double) (res + intr->time + intr->month * (30 * 86400))));
*result *= (FLT_MAX / (((GISTENTRY *) PG_GETARG_POINTER(0))->rel->rd_att->natts + 1)); *result *= (FLT_MAX / (((GISTENTRY *) PG_GETARG_POINTER(0))->rel->rd_att->natts + 1));
pfree(intr);
} }
PG_RETURN_POINTER(result); PG_RETURN_POINTER(result);
} }
......
...@@ -246,7 +246,5 @@ gbt_num_picksplit(const GistEntryVector *entryvec, GIST_SPLITVEC *v, ...@@ -246,7 +246,5 @@ gbt_num_picksplit(const GistEntryVector *entryvec, GIST_SPLITVEC *v,
} }
} }
pfree(arr);
return v; return v;
} }
...@@ -216,7 +216,6 @@ gbt_var_bin_union(Datum *u, GBT_VARKEY * e, const gbtree_vinfo * tinfo) ...@@ -216,7 +216,6 @@ gbt_var_bin_union(Datum *u, GBT_VARKEY * e, const gbtree_vinfo * tinfo)
GBT_VARKEY_R nr; GBT_VARKEY_R nr;
GBT_VARKEY_R eo = gbt_var_key_readable(e); GBT_VARKEY_R eo = gbt_var_key_readable(e);
if (eo.lower == eo.upper) /* leaf */ if (eo.lower == eo.upper) /* leaf */
{ {
tmp = gbt_var_leaf2node(e, tinfo); tmp = gbt_var_leaf2node(e, tinfo);
...@@ -235,31 +234,23 @@ gbt_var_bin_union(Datum *u, GBT_VARKEY * e, const gbtree_vinfo * tinfo) ...@@ -235,31 +234,23 @@ gbt_var_bin_union(Datum *u, GBT_VARKEY * e, const gbtree_vinfo * tinfo)
nr.upper = ro.upper; nr.upper = ro.upper;
nk = gbt_var_key_copy(&nr, TRUE); nk = gbt_var_key_copy(&nr, TRUE);
} }
if ((*tinfo->f_cmp) ((bytea *) ro.upper, (bytea *) eo.upper) < 0) if ((*tinfo->f_cmp) ((bytea *) ro.upper, (bytea *) eo.upper) < 0)
{ {
nr.upper = eo.upper; nr.upper = eo.upper;
nr.lower = ro.lower; nr.lower = ro.lower;
nk = gbt_var_key_copy(&nr, TRUE); nk = gbt_var_key_copy(&nr, TRUE);
} }
if (nk) if (nk)
{
pfree(DatumGetPointer(*u));
*u = PointerGetDatum(nk); *u = PointerGetDatum(nk);
} }
}
else else
{ {
nr.lower = eo.lower; nr.lower = eo.lower;
nr.upper = eo.upper; nr.upper = eo.upper;
*u = PointerGetDatum(gbt_var_key_copy(&nr, TRUE)); *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) ...@@ -273,15 +264,12 @@ gbt_var_compress(GISTENTRY *entry, const gbtree_vinfo * tinfo)
if (entry->leafkey) if (entry->leafkey)
{ {
GBT_VARKEY *r = NULL; GBT_VARKEY *r = NULL;
bytea *tstd = (bytea *) DatumGetPointer(entry->key); /* toasted */ bytea *leaf = (bytea *) DatumGetPointer(PG_DETOAST_DATUM(entry->key));
bytea *leaf = (bytea *) DatumGetPointer(PG_DETOAST_DATUM(entry->key)); /* untoasted */
GBT_VARKEY_R u; GBT_VARKEY_R u;
u.lower = u.upper = leaf; u.lower = u.upper = leaf;
r = gbt_var_key_copy(&u, FALSE); r = gbt_var_key_copy(&u, FALSE);
if (tstd != leaf)
pfree(leaf);
retval = palloc(sizeof(GISTENTRY)); retval = palloc(sizeof(GISTENTRY));
gistentryinit(*retval, PointerGetDatum(r), gistentryinit(*retval, PointerGetDatum(r),
entry->rel, entry->page, entry->rel, entry->page,
...@@ -319,7 +307,6 @@ gbt_var_union(const GistEntryVector *entryvec, int32 *size, const gbtree_vinfo * ...@@ -319,7 +307,6 @@ gbt_var_union(const GistEntryVector *entryvec, int32 *size, const gbtree_vinfo *
/* Truncate (=compress) key */ /* Truncate (=compress) key */
if (tinfo->trnc) if (tinfo->trnc)
{ {
int32 plen; int32 plen;
...@@ -328,7 +315,6 @@ gbt_var_union(const GistEntryVector *entryvec, int32 *size, const gbtree_vinfo * ...@@ -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); plen = gbt_var_node_cp_len((GBT_VARKEY *) DatumGetPointer(out), tinfo);
trc = gbt_var_node_truncate((GBT_VARKEY *) DatumGetPointer(out), plen + 1, tinfo); trc = gbt_var_node_truncate((GBT_VARKEY *) DatumGetPointer(out), plen + 1, tinfo);
pfree(DatumGetPointer(out));
out = PointerGetDatum(trc); out = PointerGetDatum(trc);
} }
...@@ -428,17 +414,12 @@ gbt_var_penalty(float *res, const GISTENTRY *o, const GISTENTRY *n, const gbtree ...@@ -428,17 +414,12 @@ gbt_var_penalty(float *res, const GISTENTRY *o, const GISTENTRY *n, const gbtree
} }
dres /= 256.0; dres /= 256.0;
} }
pfree(DatumGetPointer(d));
*res += FLT_MIN; *res += FLT_MIN;
*res += (float) (dres / ((double) (ol + 1))); *res += (float) (dres / ((double) (ol + 1)));
*res *= (FLT_MAX / (o->rel->rd_att->natts + 1)); *res *= (FLT_MAX / (o->rel->rd_att->natts + 1));
} }
if (tmp && tmp != newe)
pfree(tmp);
return res; return res;
} }
...@@ -524,18 +505,9 @@ gbt_var_picksplit(const GistEntryVector *entryvec, GIST_SPLITVEC *v, const gbtre ...@@ -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 */ /* Truncate (=compress) key */
if (tinfo->trnc) if (tinfo->trnc)
{ {
int32 ll = gbt_var_node_cp_len((GBT_VARKEY *) DatumGetPointer(v->spl_ldatum), tinfo); 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); int32 lr = gbt_var_node_cp_len((GBT_VARKEY *) DatumGetPointer(v->spl_rdatum), tinfo);
GBT_VARKEY *dl; GBT_VARKEY *dl;
...@@ -546,15 +518,10 @@ gbt_var_picksplit(const GistEntryVector *entryvec, GIST_SPLITVEC *v, const gbtre ...@@ -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); 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); 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_ldatum = PointerGetDatum(dl);
v->spl_rdatum = PointerGetDatum(dr); v->spl_rdatum = PointerGetDatum(dr);
} }
pfree(arr);
return v; return v;
} }
......
...@@ -229,8 +229,6 @@ g_cube_union(GistEntryVector *entryvec, int *sizep) ...@@ -229,8 +229,6 @@ g_cube_union(GistEntryVector *entryvec, int *sizep)
out = g_cube_binary_union(tmp, (NDBOX *) out = g_cube_binary_union(tmp, (NDBOX *)
DatumGetPointer(entryvec->vector[i].key), DatumGetPointer(entryvec->vector[i].key),
sizep); sizep);
if (i > 1)
pfree(tmp);
tmp = out; tmp = out;
} }
...@@ -269,7 +267,6 @@ g_cube_penalty(GISTENTRY *origentry, GISTENTRY *newentry, float *result) ...@@ -269,7 +267,6 @@ g_cube_penalty(GISTENTRY *origentry, GISTENTRY *newentry, float *result)
rt_cube_size(ud, &tmp1); rt_cube_size(ud, &tmp1);
rt_cube_size((NDBOX *) DatumGetPointer(origentry->key), &tmp2); rt_cube_size((NDBOX *) DatumGetPointer(origentry->key), &tmp2);
*result = (float) (tmp1 - tmp2); *result = (float) (tmp1 - tmp2);
pfree(ud);
/* /*
* fprintf(stderr, "penalty\n"); fprintf(stderr, "\t%g\n", *result); * fprintf(stderr, "penalty\n"); fprintf(stderr, "\t%g\n", *result);
...@@ -339,11 +336,6 @@ g_cube_picksplit(GistEntryVector *entryvec, ...@@ -339,11 +336,6 @@ g_cube_picksplit(GistEntryVector *entryvec,
rt_cube_size(inter_d, &size_inter); rt_cube_size(inter_d, &size_inter);
size_waste = size_union - size_inter; size_waste = size_union - size_inter;
pfree(union_d);
if (inter_d != (NDBOX *) NULL)
pfree(inter_d);
/* /*
* are these a more promising split than what we've already * are these a more promising split than what we've already
* seen? * seen?
...@@ -415,8 +407,6 @@ g_cube_picksplit(GistEntryVector *entryvec, ...@@ -415,8 +407,6 @@ g_cube_picksplit(GistEntryVector *entryvec,
/* pick which page to add it to */ /* pick which page to add it to */
if (size_alpha - size_l < size_beta - size_r) if (size_alpha - size_l < size_beta - size_r)
{ {
pfree(datum_l);
pfree(union_dr);
datum_l = union_dl; datum_l = union_dl;
size_l = size_alpha; size_l = size_alpha;
*left++ = i; *left++ = i;
...@@ -424,8 +414,6 @@ g_cube_picksplit(GistEntryVector *entryvec, ...@@ -424,8 +414,6 @@ g_cube_picksplit(GistEntryVector *entryvec,
} }
else else
{ {
pfree(datum_r);
pfree(union_dl);
datum_r = union_dr; datum_r = union_dr;
size_r = size_alpha; size_r = size_alpha;
*right++ = i; *right++ = i;
......
...@@ -90,9 +90,6 @@ _ltree_compress(PG_FUNCTION_ARGS) ...@@ -90,9 +90,6 @@ _ltree_compress(PG_FUNCTION_ARGS)
item = NEXTVAL(item); item = NEXTVAL(item);
} }
if (PointerGetDatum(val) != entry->key)
pfree(val);
retval = (GISTENTRY *) palloc(sizeof(GISTENTRY)); retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
gistentryinit(*retval, PointerGetDatum(key), gistentryinit(*retval, PointerGetDatum(key),
entry->rel, entry->page, entry->rel, entry->page,
...@@ -424,7 +421,6 @@ _ltree_picksplit(PG_FUNCTION_ARGS) ...@@ -424,7 +421,6 @@ _ltree_picksplit(PG_FUNCTION_ARGS)
} }
*right = *left = FirstOffsetNumber; *right = *left = FirstOffsetNumber;
pfree(costvector);
v->spl_ldatum = PointerGetDatum(datum_l); v->spl_ldatum = PointerGetDatum(datum_l);
v->spl_rdatum = PointerGetDatum(datum_r); v->spl_rdatum = PointerGetDatum(datum_r);
......
...@@ -77,9 +77,6 @@ ltree_compress(PG_FUNCTION_ARGS) ...@@ -77,9 +77,6 @@ ltree_compress(PG_FUNCTION_ARGS)
key->flag = LTG_ONENODE; key->flag = LTG_ONENODE;
memcpy((void *) LTG_NODE(key), (void *) val, val->len); memcpy((void *) LTG_NODE(key), (void *) val, val->len);
if (PointerGetDatum(val) != entry->key)
pfree(val);
retval = (GISTENTRY *) palloc(sizeof(GISTENTRY)); retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
gistentryinit(*retval, PointerGetDatum(key), gistentryinit(*retval, PointerGetDatum(key),
entry->rel, entry->page, entry->rel, entry->page,
...@@ -432,7 +429,6 @@ ltree_picksplit(PG_FUNCTION_ARGS) ...@@ -432,7 +429,6 @@ ltree_picksplit(PG_FUNCTION_ARGS)
else else
memcpy((void *) LTG_RNODE(ru), (void *) ru_r, ru_r->len); memcpy((void *) LTG_RNODE(ru), (void *) ru_r, ru_r->len);
pfree(array);
v->spl_ldatum = PointerGetDatum(lu); v->spl_ldatum = PointerGetDatum(lu);
v->spl_rdatum = PointerGetDatum(ru); v->spl_rdatum = PointerGetDatum(ru);
......
...@@ -91,13 +91,9 @@ gtrgm_compress(PG_FUNCTION_ARGS) ...@@ -91,13 +91,9 @@ gtrgm_compress(PG_FUNCTION_ARGS)
if (entry->leafkey) if (entry->leafkey)
{ /* trgm */ { /* trgm */
TRGM *res; TRGM *res;
text *toastedval = (text *) DatumGetPointer(entry->key);
text *val = (text *) DatumGetPointer(PG_DETOAST_DATUM(entry->key)); text *val = (text *) DatumGetPointer(PG_DETOAST_DATUM(entry->key));
res = generate_trgm(VARDATA(val), VARSIZE(val) - VARHDRSZ); res = generate_trgm(VARDATA(val), VARSIZE(val) - VARHDRSZ);
if (val != toastedval)
pfree(val);
retval = (GISTENTRY *) palloc(sizeof(GISTENTRY)); retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
gistentryinit(*retval, PointerGetDatum(res), gistentryinit(*retval, PointerGetDatum(res),
entry->rel, entry->page, entry->rel, entry->page,
...@@ -175,9 +171,6 @@ gtrgm_consistent(PG_FUNCTION_ARGS) ...@@ -175,9 +171,6 @@ gtrgm_consistent(PG_FUNCTION_ARGS)
#endif #endif
} }
PG_FREE_IF_COPY(query, 1);
pfree(qtrg);
PG_RETURN_BOOL(res); PG_RETURN_BOOL(res);
} }
...@@ -603,8 +596,6 @@ gtrgm_picksplit(PG_FUNCTION_ARGS) ...@@ -603,8 +596,6 @@ gtrgm_picksplit(PG_FUNCTION_ARGS)
} }
*right = *left = FirstOffsetNumber; *right = *left = FirstOffsetNumber;
pfree(costvector);
pfree(cache);
v->spl_ldatum = PointerGetDatum(datum_l); v->spl_ldatum = PointerGetDatum(datum_l);
v->spl_rdatum = PointerGetDatum(datum_r); v->spl_rdatum = PointerGetDatum(datum_r);
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/contrib/rtree_gist/rtree_gist.c,v 1.10 2004/08/29 05:06:37 momjian Exp $ * $PostgreSQL: pgsql/contrib/rtree_gist/rtree_gist.c,v 1.11 2005/05/21 12:08:05 neilc Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -152,9 +152,6 @@ gbox_penalty(PG_FUNCTION_ARGS) ...@@ -152,9 +152,6 @@ gbox_penalty(PG_FUNCTION_ARGS)
ud = DirectFunctionCall2(rt_box_union, origentry->key, newentry->key); ud = DirectFunctionCall2(rt_box_union, origentry->key, newentry->key);
tmp1 = size_box(ud); tmp1 = size_box(ud);
if (DatumGetPointer(ud) != NULL)
pfree(DatumGetPointer(ud));
*result = tmp1 - size_box(origentry->key); *result = tmp1 - size_box(origentry->key);
PG_RETURN_POINTER(result); PG_RETURN_POINTER(result);
} }
...@@ -342,7 +339,6 @@ gbox_picksplit(PG_FUNCTION_ARGS) ...@@ -342,7 +339,6 @@ gbox_picksplit(PG_FUNCTION_ARGS)
else else
ADDLIST(listT, unionT, posT, arr[i - 1].pos); ADDLIST(listT, unionT, posT, arr[i - 1].pos);
} }
pfree(arr);
} }
/* which split more optimal? */ /* which split more optimal? */
...@@ -372,11 +368,6 @@ gbox_picksplit(PG_FUNCTION_ARGS) ...@@ -372,11 +368,6 @@ gbox_picksplit(PG_FUNCTION_ARGS)
if (direction == 'x') if (direction == 'x')
{ {
pfree(unionB);
pfree(listB);
pfree(unionT);
pfree(listT);
v->spl_left = listL; v->spl_left = listL;
v->spl_right = listR; v->spl_right = listR;
v->spl_nleft = posL; v->spl_nleft = posL;
...@@ -386,11 +377,6 @@ gbox_picksplit(PG_FUNCTION_ARGS) ...@@ -386,11 +377,6 @@ gbox_picksplit(PG_FUNCTION_ARGS)
} }
else else
{ {
pfree(unionR);
pfree(listR);
pfree(unionL);
pfree(listL);
v->spl_left = listB; v->spl_left = listB;
v->spl_right = listT; v->spl_right = listT;
v->spl_nleft = posB; v->spl_nleft = posB;
...@@ -497,9 +483,6 @@ gpoly_compress(PG_FUNCTION_ARGS) ...@@ -497,9 +483,6 @@ gpoly_compress(PG_FUNCTION_ARGS)
in = (POLYGON *) PG_DETOAST_DATUM(entry->key); in = (POLYGON *) PG_DETOAST_DATUM(entry->key);
r = (BOX *) palloc(sizeof(BOX)); r = (BOX *) palloc(sizeof(BOX));
memcpy((void *) r, (void *) &(in->boundbox), sizeof(BOX)); memcpy((void *) r, (void *) &(in->boundbox), sizeof(BOX));
if (in != (POLYGON *) DatumGetPointer(entry->key))
pfree(in);
gistentryinit(*retval, PointerGetDatum(r), gistentryinit(*retval, PointerGetDatum(r),
entry->rel, entry->page, entry->rel, entry->page,
entry->offset, sizeof(BOX), FALSE); entry->offset, sizeof(BOX), FALSE);
......
...@@ -238,8 +238,6 @@ gseg_union(GistEntryVector *entryvec, int *sizep) ...@@ -238,8 +238,6 @@ gseg_union(GistEntryVector *entryvec, int *sizep)
out = gseg_binary_union(tmp, (SEG *) out = gseg_binary_union(tmp, (SEG *)
DatumGetPointer(entryvec->vector[i].key), DatumGetPointer(entryvec->vector[i].key),
sizep); sizep);
if (i > 1)
pfree(tmp);
tmp = out; tmp = out;
} }
...@@ -278,7 +276,6 @@ gseg_penalty(GISTENTRY *origentry, GISTENTRY *newentry, float *result) ...@@ -278,7 +276,6 @@ gseg_penalty(GISTENTRY *origentry, GISTENTRY *newentry, float *result)
rt_seg_size(ud, &tmp1); rt_seg_size(ud, &tmp1);
rt_seg_size((SEG *) DatumGetPointer(origentry->key), &tmp2); rt_seg_size((SEG *) DatumGetPointer(origentry->key), &tmp2);
*result = tmp1 - tmp2; *result = tmp1 - tmp2;
pfree(ud);
#ifdef GIST_DEBUG #ifdef GIST_DEBUG
fprintf(stderr, "penalty\n"); fprintf(stderr, "penalty\n");
...@@ -351,16 +348,10 @@ gseg_picksplit(GistEntryVector *entryvec, ...@@ -351,16 +348,10 @@ gseg_picksplit(GistEntryVector *entryvec,
rt_seg_size(inter_d, &size_inter); rt_seg_size(inter_d, &size_inter);
size_waste = size_union - size_inter; size_waste = size_union - size_inter;
pfree(union_d);
if (inter_d != (SEG *) NULL)
pfree(inter_d);
/* /*
* are these a more promising split that what we've already * are these a more promising split that what we've already
* seen? * seen?
*/ */
if (size_waste > waste || firsttime) if (size_waste > waste || firsttime)
{ {
waste = size_waste; waste = size_waste;
...@@ -427,8 +418,6 @@ gseg_picksplit(GistEntryVector *entryvec, ...@@ -427,8 +418,6 @@ gseg_picksplit(GistEntryVector *entryvec,
/* pick which page to add it to */ /* pick which page to add it to */
if (size_alpha - size_l < size_beta - size_r) if (size_alpha - size_l < size_beta - size_r)
{ {
pfree(datum_l);
pfree(union_dr);
datum_l = union_dl; datum_l = union_dl;
size_l = size_alpha; size_l = size_alpha;
*left++ = i; *left++ = i;
...@@ -436,8 +425,6 @@ gseg_picksplit(GistEntryVector *entryvec, ...@@ -436,8 +425,6 @@ gseg_picksplit(GistEntryVector *entryvec,
} }
else else
{ {
pfree(datum_r);
pfree(union_dl);
datum_r = union_dr; datum_r = union_dr;
size_r = size_alpha; size_r = size_alpha;
*right++ = i; *right++ = i;
......
...@@ -123,7 +123,6 @@ gtxtidx_compress(PG_FUNCTION_ARGS) ...@@ -123,7 +123,6 @@ gtxtidx_compress(PG_FUNCTION_ARGS)
if (entry->leafkey) if (entry->leafkey)
{ /* txtidx */ { /* txtidx */
GISTTYPE *res; GISTTYPE *res;
txtidx *toastedval = (txtidx *) DatumGetPointer(entry->key);
txtidx *val = (txtidx *) DatumGetPointer(PG_DETOAST_DATUM(entry->key)); txtidx *val = (txtidx *) DatumGetPointer(PG_DETOAST_DATUM(entry->key));
int4 len; int4 len;
int4 *arr; int4 *arr;
...@@ -154,8 +153,6 @@ gtxtidx_compress(PG_FUNCTION_ARGS) ...@@ -154,8 +153,6 @@ gtxtidx_compress(PG_FUNCTION_ARGS)
res = (GISTTYPE *) repalloc((void *) res, len); res = (GISTTYPE *) repalloc((void *) res, len);
res->len = len; res->len = len;
} }
if (val != toastedval)
pfree(val);
/* make signature, if array is too long */ /* make signature, if array is too long */
if (res->len > TOAST_INDEX_TARGET) if (res->len > TOAST_INDEX_TARGET)
...@@ -167,7 +164,6 @@ gtxtidx_compress(PG_FUNCTION_ARGS) ...@@ -167,7 +164,6 @@ gtxtidx_compress(PG_FUNCTION_ARGS)
ressign->len = len; ressign->len = len;
ressign->flag = SIGNKEY; ressign->flag = SIGNKEY;
makesign(GETSIGN(ressign), res); makesign(GETSIGN(ressign), res);
pfree(res);
res = ressign; res = ressign;
} }
...@@ -780,8 +776,6 @@ gtxtidx_picksplit(PG_FUNCTION_ARGS) ...@@ -780,8 +776,6 @@ gtxtidx_picksplit(PG_FUNCTION_ARGS)
} }
*right = *left = FirstOffsetNumber; *right = *left = FirstOffsetNumber;
pfree(costvector);
pfree(cache);
v->spl_ldatum = PointerGetDatum(datum_l); v->spl_ldatum = PointerGetDatum(datum_l);
v->spl_rdatum = PointerGetDatum(datum_r); v->spl_rdatum = PointerGetDatum(datum_r);
......
...@@ -142,7 +142,6 @@ gtsvector_compress(PG_FUNCTION_ARGS) ...@@ -142,7 +142,6 @@ gtsvector_compress(PG_FUNCTION_ARGS)
if (entry->leafkey) if (entry->leafkey)
{ /* tsvector */ { /* tsvector */
GISTTYPE *res; GISTTYPE *res;
tsvector *toastedval = (tsvector *) DatumGetPointer(entry->key);
tsvector *val = (tsvector *) DatumGetPointer(PG_DETOAST_DATUM(entry->key)); tsvector *val = (tsvector *) DatumGetPointer(PG_DETOAST_DATUM(entry->key));
int4 len; int4 len;
int4 *arr; int4 *arr;
...@@ -173,8 +172,6 @@ gtsvector_compress(PG_FUNCTION_ARGS) ...@@ -173,8 +172,6 @@ gtsvector_compress(PG_FUNCTION_ARGS)
res = (GISTTYPE *) repalloc((void *) res, len); res = (GISTTYPE *) repalloc((void *) res, len);
res->len = len; res->len = len;
} }
if (val != toastedval)
pfree(val);
/* make signature, if array is too long */ /* make signature, if array is too long */
if (res->len > TOAST_INDEX_TARGET) if (res->len > TOAST_INDEX_TARGET)
...@@ -186,7 +183,6 @@ gtsvector_compress(PG_FUNCTION_ARGS) ...@@ -186,7 +183,6 @@ gtsvector_compress(PG_FUNCTION_ARGS)
ressign->len = len; ressign->len = len;
ressign->flag = SIGNKEY; ressign->flag = SIGNKEY;
makesign(GETSIGN(ressign), res); makesign(GETSIGN(ressign), res);
pfree(res);
res = ressign; res = ressign;
} }
...@@ -734,8 +730,6 @@ gtsvector_picksplit(PG_FUNCTION_ARGS) ...@@ -734,8 +730,6 @@ gtsvector_picksplit(PG_FUNCTION_ARGS)
} }
*right = *left = FirstOffsetNumber; *right = *left = FirstOffsetNumber;
pfree(costvector);
pfree(cache);
v->spl_ldatum = PointerGetDatum(datum_l); v->spl_ldatum = PointerGetDatum(datum_l);
v->spl_rdatum = PointerGetDatum(datum_r); v->spl_rdatum = PointerGetDatum(datum_r);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment