diff --git a/src/backend/access/gist/gistutil.c b/src/backend/access/gist/gistutil.c index 38af0e0cb0..824c40eb20 100644 --- a/src/backend/access/gist/gistutil.c +++ b/src/backend/access/gist/gistutil.c @@ -558,53 +558,33 @@ gistdentryinit(GISTSTATE *giststate, int nkey, GISTENTRY *e, gistentryinit(*e, (Datum) 0, r, pg, o, l); } - -/* - * initialize a GiST entry with a compressed version of key - */ -void -gistcentryinit(GISTSTATE *giststate, int nkey, - GISTENTRY *e, Datum k, Relation r, - Page pg, OffsetNumber o, bool l, bool isNull) -{ - if (!isNull) - { - GISTENTRY *cep; - - gistentryinit(*e, k, r, pg, o, l); - cep = (GISTENTRY *) - DatumGetPointer(FunctionCall1Coll(&giststate->compressFn[nkey], - giststate->supportCollation[nkey], - PointerGetDatum(e))); - /* compressFn may just return the given pointer */ - if (cep != e) - gistentryinit(*e, cep->key, cep->rel, cep->page, cep->offset, - cep->leafkey); - } - else - gistentryinit(*e, (Datum) 0, r, pg, o, l); -} - IndexTuple gistFormTuple(GISTSTATE *giststate, Relation r, - Datum attdata[], bool isnull[], bool newValues) + Datum attdata[], bool isnull[], bool isleaf) { - GISTENTRY centry[INDEX_MAX_KEYS]; Datum compatt[INDEX_MAX_KEYS]; int i; IndexTuple res; + /* + * Call the compress method on each attribute. + */ for (i = 0; i < r->rd_att->natts; i++) { if (isnull[i]) compatt[i] = (Datum) 0; else { - gistcentryinit(giststate, i, ¢ry[i], attdata[i], - r, NULL, (OffsetNumber) 0, - newValues, - FALSE); - compatt[i] = centry[i].key; + GISTENTRY centry; + GISTENTRY *cep; + + gistentryinit(centry, attdata[i], r, NULL, (OffsetNumber) 0, + isleaf); + cep = (GISTENTRY *) + DatumGetPointer(FunctionCall1Coll(&giststate->compressFn[i], + giststate->supportCollation[i], + PointerGetDatum(¢ry))); + compatt[i] = cep->key; } } @@ -612,7 +592,7 @@ gistFormTuple(GISTSTATE *giststate, Relation r, /* * The offset number on tuples on internal pages is unused. For historical - * reasons, it is set 0xffff. + * reasons, it is set to 0xffff. */ ItemPointerSetOffsetNumber(&(res->t_tid), 0xffff); return res; diff --git a/src/include/access/gist_private.h b/src/include/access/gist_private.h index ce83042e17..9550687916 100644 --- a/src/include/access/gist_private.h +++ b/src/include/access/gist_private.h @@ -485,15 +485,11 @@ extern IndexTuple gistgetadjusted(Relation r, IndexTuple addtup, GISTSTATE *giststate); extern IndexTuple gistFormTuple(GISTSTATE *giststate, - Relation r, Datum *attdata, bool *isnull, bool newValues); + Relation r, Datum *attdata, bool *isnull, bool isleaf); extern OffsetNumber gistchoose(Relation r, Page p, IndexTuple it, GISTSTATE *giststate); -extern void gistcentryinit(GISTSTATE *giststate, int nkey, - GISTENTRY *e, Datum k, - Relation r, Page pg, - OffsetNumber o, bool l, bool isNull); extern void GISTInitBuffer(Buffer b, uint32 f); extern void gistdentryinit(GISTSTATE *giststate, int nkey, GISTENTRY *e,