diff options
Diffstat (limited to 'src/backend/access/rtree/rtree.c')
-rw-r--r-- | src/backend/access/rtree/rtree.c | 93 |
1 files changed, 72 insertions, 21 deletions
diff --git a/src/backend/access/rtree/rtree.c b/src/backend/access/rtree/rtree.c index 2de19275771..020f6bdff82 100644 --- a/src/backend/access/rtree/rtree.c +++ b/src/backend/access/rtree/rtree.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/rtree/Attic/rtree.c,v 1.46 2000/05/30 00:49:41 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/rtree/Attic/rtree.c,v 1.47 2000/05/30 04:24:34 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -415,10 +415,18 @@ rttighten(Relation r, oldud = (char *) PageGetItem(p, PageGetItemId(p, stk->rts_child)); oldud += sizeof(IndexTupleData); - (*fmgr_faddr(&rtstate->sizeFn)) (oldud, &old_size); - datum = (char *) (*fmgr_faddr(&rtstate->unionFn)) (oldud, datum); + FunctionCall2(&rtstate->sizeFn, + PointerGetDatum(oldud), + PointerGetDatum(&old_size)); - (*fmgr_faddr(&rtstate->sizeFn)) (datum, &newd_size); + datum = (char *) + DatumGetPointer(FunctionCall2(&rtstate->unionFn, + PointerGetDatum(oldud), + PointerGetDatum(datum))); + + FunctionCall2(&rtstate->sizeFn, + PointerGetDatum(datum), + PointerGetDatum(&newd_size)); if (newd_size != old_size) { @@ -445,7 +453,10 @@ rttighten(Relation r, * union proc, which is guaranteed to return a rectangle. */ - tdatum = (char *) (*fmgr_faddr(&rtstate->unionFn)) (datum, datum); + tdatum = (char *) + DatumGetPointer(FunctionCall2(&rtstate->unionFn, + PointerGetDatum(datum), + PointerGetDatum(datum))); rttighten(r, stk->rts_parent, tdatum, att_size, rtstate); pfree(tdatum); } @@ -665,7 +676,10 @@ rtintinsert(Relation r, WriteBuffer(b); ldatum = (((char *) ltup) + sizeof(IndexTupleData)); rdatum = (((char *) rtup) + sizeof(IndexTupleData)); - newdatum = (char *) (*fmgr_faddr(&rtstate->unionFn)) (ldatum, rdatum); + newdatum = (char *) + DatumGetPointer(FunctionCall2(&rtstate->unionFn, + PointerGetDatum(ldatum), + PointerGetDatum(rdatum))); rttighten(r, stk->rts_parent, newdatum, (IndexTupleSize(rtup) - sizeof(IndexTupleData)), rtstate); @@ -744,10 +758,20 @@ picksplit(Relation r, datum_beta = ((char *) item_2) + sizeof(IndexTupleData); /* compute the wasted space by unioning these guys */ - union_d = (char *) (*fmgr_faddr(&rtstate->unionFn)) (datum_alpha, datum_beta); - (*fmgr_faddr(&rtstate->sizeFn)) (union_d, &size_union); - inter_d = (char *) (*fmgr_faddr(&rtstate->interFn)) (datum_alpha, datum_beta); - (*fmgr_faddr(&rtstate->sizeFn)) (inter_d, &size_inter); + union_d = (char *) + DatumGetPointer(FunctionCall2(&rtstate->unionFn, + PointerGetDatum(datum_alpha), + PointerGetDatum(datum_beta))); + FunctionCall2(&rtstate->sizeFn, + PointerGetDatum(union_d), + PointerGetDatum(&size_union)); + inter_d = (char *) + DatumGetPointer(FunctionCall2(&rtstate->interFn, + PointerGetDatum(datum_alpha), + PointerGetDatum(datum_beta))); + FunctionCall2(&rtstate->sizeFn, + PointerGetDatum(inter_d), + PointerGetDatum(&size_inter)); size_waste = size_union - size_inter; pfree(union_d); @@ -777,12 +801,22 @@ picksplit(Relation r, item_1 = (IndexTuple) PageGetItem(page, PageGetItemId(page, seed_1)); datum_alpha = ((char *) item_1) + sizeof(IndexTupleData); - datum_l = (char *) (*fmgr_faddr(&rtstate->unionFn)) (datum_alpha, datum_alpha); - (*fmgr_faddr(&rtstate->sizeFn)) (datum_l, &size_l); + datum_l = (char *) + DatumGetPointer(FunctionCall2(&rtstate->unionFn, + PointerGetDatum(datum_alpha), + PointerGetDatum(datum_alpha))); + FunctionCall2(&rtstate->sizeFn, + PointerGetDatum(datum_l), + PointerGetDatum(&size_l)); item_2 = (IndexTuple) PageGetItem(page, PageGetItemId(page, seed_2)); datum_beta = ((char *) item_2) + sizeof(IndexTupleData); - datum_r = (char *) (*fmgr_faddr(&rtstate->unionFn)) (datum_beta, datum_beta); - (*fmgr_faddr(&rtstate->sizeFn)) (datum_r, &size_r); + datum_r = (char *) + DatumGetPointer(FunctionCall2(&rtstate->unionFn, + PointerGetDatum(datum_beta), + PointerGetDatum(datum_beta))); + FunctionCall2(&rtstate->sizeFn, + PointerGetDatum(datum_r), + PointerGetDatum(&size_r)); /* * Now split up the regions between the two seeds. An important @@ -826,10 +860,20 @@ picksplit(Relation r, item_1 = (IndexTuple) PageGetItem(page, PageGetItemId(page, i)); datum_alpha = ((char *) item_1) + sizeof(IndexTupleData); - union_dl = (char *) (*fmgr_faddr(&rtstate->unionFn)) (datum_l, datum_alpha); - union_dr = (char *) (*fmgr_faddr(&rtstate->unionFn)) (datum_r, datum_alpha); - (*fmgr_faddr(&rtstate->sizeFn)) (union_dl, &size_alpha); - (*fmgr_faddr(&rtstate->sizeFn)) (union_dr, &size_beta); + union_dl = (char *) + DatumGetPointer(FunctionCall2(&rtstate->unionFn, + PointerGetDatum(datum_l), + PointerGetDatum(datum_alpha))); + union_dr = (char *) + DatumGetPointer(FunctionCall2(&rtstate->unionFn, + PointerGetDatum(datum_r), + PointerGetDatum(datum_alpha))); + FunctionCall2(&rtstate->sizeFn, + PointerGetDatum(union_dl), + PointerGetDatum(&size_alpha)); + FunctionCall2(&rtstate->sizeFn, + PointerGetDatum(union_dr), + PointerGetDatum(&size_beta)); /* pick which page to add it to */ if (size_alpha - size_l < size_beta - size_r) @@ -896,9 +940,16 @@ choose(Relation r, Page p, IndexTuple it, RTSTATE *rtstate) { datum = (char *) PageGetItem(p, PageGetItemId(p, i)); datum += sizeof(IndexTupleData); - (*fmgr_faddr(&rtstate->sizeFn)) (datum, &dsize); - ud = (char *) (*fmgr_faddr(&rtstate->unionFn)) (datum, id); - (*fmgr_faddr(&rtstate->sizeFn)) (ud, &usize); + FunctionCall2(&rtstate->sizeFn, + PointerGetDatum(datum), + PointerGetDatum(&dsize)); + ud = (char *) + DatumGetPointer(FunctionCall2(&rtstate->unionFn, + PointerGetDatum(datum), + PointerGetDatum(id))); + FunctionCall2(&rtstate->sizeFn, + PointerGetDatum(ud), + PointerGetDatum(&usize)); pfree(ud); if (which_grow < 0 || usize - dsize < which_grow) { |