{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(entry->key);
- void *qtst = (void *) PG_GETARG_POINTER(1);
void *query = (void *) DatumGetByteaP(PG_GETARG_DATUM(1));
StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
bool retval = FALSE;
bytea *q = gbt_bit_xfrm((bytea *) query);
retval = gbt_var_consistent(&r, (void *) q, &strategy, FALSE, &tinfo);
- pfree(q);
}
-
- if (qtst != query)
- pfree(query);
PG_RETURN_BOOL(retval);
}
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(entry->key);
- void *qtst = (void *) PG_GETARG_POINTER(1);
void *query = (void *) DatumGetByteaP(PG_GETARG_DATUM(1));
StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
- bool retval = FALSE;
+ bool retval;
GBT_VARKEY_R r = gbt_var_key_readable(key);
retval = gbt_var_consistent(&r, query, &strategy, GIST_LEAF(entry), &tinfo);
-
- if (qtst != query)
- pfree(query);
PG_RETURN_BOOL(retval);
}
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(entry->key);
- void *qtst = (void *) PG_GETARG_POINTER(1);
void *query = (void *) DatumGetNumeric(PG_GETARG_DATUM(1));
StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
- bool retval = FALSE;
+ bool retval;
GBT_VARKEY_R r = gbt_var_key_readable(key);
retval = gbt_var_consistent(&r, query, &strategy, GIST_LEAF(entry), &tinfo);
-
- if (qtst != query)
- pfree(query);
PG_RETURN_BOOL(retval);
}
PointerGetDatum(uk.lower)
));
- pfree(DatumGetPointer(uni));
-
os = DatumGetNumeric(DirectFunctionCall2(
numeric_sub,
PointerGetDatum(ok.upper),
NumericGetDatum(os)
));
- pfree(os);
-
if (NUMERIC_IS_NAN(us))
{
-
if (NUMERIC_IS_NAN(os))
*result = 0.0;
else
*result = 1.0;
-
}
else
{
-
Numeric nul = DatumGetNumeric(DirectFunctionCall1(int4_numeric, Int32GetDatum(0)));
*result = 0.0;
if (DirectFunctionCall2(numeric_gt, NumericGetDatum(ds), NumericGetDatum(nul)))
{
-
*result += FLT_MIN;
os = DatumGetNumeric(DirectFunctionCall2(
numeric_div,
NumericGetDatum(us)
));
*result += (float4) DatumGetFloat8(DirectFunctionCall1(numeric_float8_no_overflow, NumericGetDatum(os)));
- pfree(os);
-
}
-
- pfree(nul);
}
if (*result > 0)
*result *= (FLT_MAX / (((GISTENTRY *) PG_GETARG_POINTER(0))->rel->rd_att->natts + 1));
- pfree(us);
- pfree(ds);
-
PG_RETURN_POINTER(result);
}
entry->rel, entry->page,
entry->offset, VARSIZE(DatumGetPointer(d)), TRUE);
retval = gbt_var_compress(&trim, &tinfo);
-
- pfree(DatumGetPointer(d));
}
else
retval = entry;
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(entry->key);
- void *qtst = (void *) PG_GETARG_POINTER(1);
void *query = (void *) DatumGetTextP(PG_GETARG_DATUM(1));
StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
bool retval = FALSE;
retval = gbt_var_consistent(&r, query, &strategy, GIST_LEAF(entry), &tinfo);
- if (qtst != query)
- pfree(query);
-
PG_RETURN_BOOL(retval);
}
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
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 *trim = (void *) DatumGetPointer(DirectFunctionCall1(rtrim1, PointerGetDatum(query)));
StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
- bool retval = FALSE;
+ bool retval;
GBT_VARKEY_R r = gbt_var_key_readable(key);
retval = gbt_var_consistent(&r, trim, &strategy, GIST_LEAF(entry), &tinfo);
-
- pfree(trim);
-
- if (qtst != query)
- pfree(query);
PG_RETURN_BOOL(retval);
}
-
-
Datum
gbt_text_union(PG_FUNCTION_ARGS)
{
/* see interval_larger */
res = Max(intr->time + intr->month * (30 * 86400), 0);
- pfree(intr);
intr = DatumGetIntervalP(DirectFunctionCall2(
time_mi_time,
/* see interval_larger */
res += Max(intr->time + intr->month * (30 * 86400), 0);
- pfree(intr);
*result = 0.0;
*result += FLT_MIN;
*result += (float) (res / ((double) (res + intr->time + intr->month * (30 * 86400))));
*result *= (FLT_MAX / (((GISTENTRY *) PG_GETARG_POINTER(0))->rel->rd_att->natts + 1));
- pfree(intr);
}
PG_RETURN_POINTER(result);
#ifdef HAVE_INT64_TIMESTAMP
int64 res;
-
#else
double res;
#endif
/* see interval_larger */
res = Max(intr->time + intr->month * (30 * 86400), 0);
- pfree(intr);
intr = DatumGetIntervalP(DirectFunctionCall2(
timestamp_mi,
/* see interval_larger */
res += Max(intr->time + intr->month * (30 * 86400), 0);
- pfree(intr);
*result = 0.0;
*result += FLT_MIN;
*result += (float) (res / ((double) (res + intr->time + intr->month * (30 * 86400))));
*result *= (FLT_MAX / (((GISTENTRY *) PG_GETARG_POINTER(0))->rel->rd_att->natts + 1));
- pfree(intr);
}
PG_RETURN_POINTER(result);
-
}
}
}
- pfree(arr);
-
return v;
}
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 ) */
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);
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
{
nr.upper = eo.upper;
*u = PointerGetDatum(gbt_var_key_copy(&nr, TRUE));
}
-
- if (tmp && tmp != e)
- pfree(tmp);
-
}
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,
/* Truncate (=compress) key */
-
if (tinfo->trnc)
{
int32 plen;
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);
}
}
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;
}
}
}
- /* 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;
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;
}
out = g_cube_binary_union(tmp, (NDBOX *)
DatumGetPointer(entryvec->vector[i].key),
sizep);
- if (i > 1)
- pfree(tmp);
tmp = out;
}
rt_cube_size(ud, &tmp1);
rt_cube_size((NDBOX *) DatumGetPointer(origentry->key), &tmp2);
*result = (float) (tmp1 - tmp2);
- pfree(ud);
/*
* fprintf(stderr, "penalty\n"); fprintf(stderr, "\t%g\n", *result);
rt_cube_size(inter_d, &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
* seen?
/* pick which page to add it to */
if (size_alpha - size_l < size_beta - size_r)
{
- pfree(datum_l);
- pfree(union_dr);
datum_l = union_dl;
size_l = size_alpha;
*left++ = i;
}
else
{
- pfree(datum_r);
- pfree(union_dl);
datum_r = union_dr;
size_r = size_alpha;
*right++ = i;
item = NEXTVAL(item);
}
- if (PointerGetDatum(val) != entry->key)
- pfree(val);
-
retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
gistentryinit(*retval, PointerGetDatum(key),
entry->rel, entry->page,
}
*right = *left = FirstOffsetNumber;
- pfree(costvector);
v->spl_ldatum = PointerGetDatum(datum_l);
v->spl_rdatum = PointerGetDatum(datum_r);
key->flag = LTG_ONENODE;
memcpy((void *) LTG_NODE(key), (void *) val, val->len);
- if (PointerGetDatum(val) != entry->key)
- pfree(val);
-
retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
gistentryinit(*retval, PointerGetDatum(key),
entry->rel, entry->page,
else
memcpy((void *) LTG_RNODE(ru), (void *) ru_r, ru_r->len);
- pfree(array);
v->spl_ldatum = PointerGetDatum(lu);
v->spl_rdatum = PointerGetDatum(ru);
if (entry->leafkey)
{ /* trgm */
TRGM *res;
- text *toastedval = (text *) DatumGetPointer(entry->key);
text *val = (text *) DatumGetPointer(PG_DETOAST_DATUM(entry->key));
res = generate_trgm(VARDATA(val), VARSIZE(val) - VARHDRSZ);
- if (val != toastedval)
- pfree(val);
-
retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
gistentryinit(*retval, PointerGetDatum(res),
entry->rel, entry->page,
#endif
}
- PG_FREE_IF_COPY(query, 1);
- pfree(qtrg);
-
PG_RETURN_BOOL(res);
}
}
*right = *left = FirstOffsetNumber;
- pfree(costvector);
- pfree(cache);
v->spl_ldatum = PointerGetDatum(datum_l);
v->spl_rdatum = PointerGetDatum(datum_r);
*
*
* 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 $
*
*-------------------------------------------------------------------------
*/
ud = DirectFunctionCall2(rt_box_union, origentry->key, newentry->key);
tmp1 = size_box(ud);
- if (DatumGetPointer(ud) != NULL)
- pfree(DatumGetPointer(ud));
-
*result = tmp1 - size_box(origentry->key);
PG_RETURN_POINTER(result);
}
else
ADDLIST(listT, unionT, posT, arr[i - 1].pos);
}
- pfree(arr);
}
/* which split more optimal? */
if (direction == 'x')
{
- pfree(unionB);
- pfree(listB);
- pfree(unionT);
- pfree(listT);
-
v->spl_left = listL;
v->spl_right = listR;
v->spl_nleft = posL;
}
else
{
- pfree(unionR);
- pfree(listR);
- pfree(unionL);
- pfree(listL);
-
v->spl_left = listB;
v->spl_right = listT;
v->spl_nleft = posB;
in = (POLYGON *) PG_DETOAST_DATUM(entry->key);
r = (BOX *) palloc(sizeof(BOX));
memcpy((void *) r, (void *) &(in->boundbox), sizeof(BOX));
- if (in != (POLYGON *) DatumGetPointer(entry->key))
- pfree(in);
-
gistentryinit(*retval, PointerGetDatum(r),
entry->rel, entry->page,
entry->offset, sizeof(BOX), FALSE);
out = gseg_binary_union(tmp, (SEG *)
DatumGetPointer(entryvec->vector[i].key),
sizep);
- if (i > 1)
- pfree(tmp);
tmp = out;
}
rt_seg_size(ud, &tmp1);
rt_seg_size((SEG *) DatumGetPointer(origentry->key), &tmp2);
*result = tmp1 - tmp2;
- pfree(ud);
#ifdef GIST_DEBUG
fprintf(stderr, "penalty\n");
rt_seg_size(inter_d, &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
* seen?
*/
-
if (size_waste > waste || firsttime)
{
waste = size_waste;
/* pick which page to add it to */
if (size_alpha - size_l < size_beta - size_r)
{
- pfree(datum_l);
- pfree(union_dr);
datum_l = union_dl;
size_l = size_alpha;
*left++ = i;
}
else
{
- pfree(datum_r);
- pfree(union_dl);
datum_r = union_dr;
size_r = size_alpha;
*right++ = i;
if (entry->leafkey)
{ /* txtidx */
GISTTYPE *res;
- txtidx *toastedval = (txtidx *) DatumGetPointer(entry->key);
txtidx *val = (txtidx *) DatumGetPointer(PG_DETOAST_DATUM(entry->key));
int4 len;
int4 *arr;
res = (GISTTYPE *) repalloc((void *) res, len);
res->len = len;
}
- if (val != toastedval)
- pfree(val);
/* make signature, if array is too long */
if (res->len > TOAST_INDEX_TARGET)
ressign->len = len;
ressign->flag = SIGNKEY;
makesign(GETSIGN(ressign), res);
- pfree(res);
res = ressign;
}
}
*right = *left = FirstOffsetNumber;
- pfree(costvector);
- pfree(cache);
v->spl_ldatum = PointerGetDatum(datum_l);
v->spl_rdatum = PointerGetDatum(datum_r);
if (entry->leafkey)
{ /* tsvector */
GISTTYPE *res;
- tsvector *toastedval = (tsvector *) DatumGetPointer(entry->key);
tsvector *val = (tsvector *) DatumGetPointer(PG_DETOAST_DATUM(entry->key));
int4 len;
int4 *arr;
res = (GISTTYPE *) repalloc((void *) res, len);
res->len = len;
}
- if (val != toastedval)
- pfree(val);
/* make signature, if array is too long */
if (res->len > TOAST_INDEX_TARGET)
ressign->len = len;
ressign->flag = SIGNKEY;
makesign(GETSIGN(ressign), res);
- pfree(res);
res = ressign;
}
}
*right = *left = FirstOffsetNumber;
- pfree(costvector);
- pfree(cache);
v->spl_ldatum = PointerGetDatum(datum_l);
v->spl_rdatum = PointerGetDatum(datum_r);