diff options
Diffstat (limited to 'src/backend/access/nbtree/nbtutils.c')
-rw-r--r-- | src/backend/access/nbtree/nbtutils.c | 38 |
1 files changed, 20 insertions, 18 deletions
diff --git a/src/backend/access/nbtree/nbtutils.c b/src/backend/access/nbtree/nbtutils.c index 38b152e61b2..5853267670f 100644 --- a/src/backend/access/nbtree/nbtutils.c +++ b/src/backend/access/nbtree/nbtutils.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtutils.c,v 1.36 2000/04/12 17:14:50 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtutils.c,v 1.37 2000/05/30 04:24:33 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -133,7 +133,7 @@ _bt_orderkeys(Relation relation, BTScanOpaque so) ScanKeyData *cur; StrategyMap map; int nbytes; - long test; + Datum test; int i, j; int init[BTMaxStrategyNumber + 1]; @@ -212,8 +212,9 @@ _bt_orderkeys(Relation relation, BTScanOpaque so) if (j == (BTEqualStrategyNumber - 1) || init[j] == 0) continue; chk = &xform[j]; - test = (long) fmgr(chk->sk_procedure, eq->sk_argument, chk->sk_argument); - if (!test) + test = OidFunctionCall2(chk->sk_procedure, + eq->sk_argument, chk->sk_argument); + if (!DatumGetBool(test)) so->qual_ok = 0; } init[BTLessStrategyNumber - 1] = 0; @@ -241,8 +242,9 @@ _bt_orderkeys(Relation relation, BTScanOpaque so) * anyway. The transform maps are hard-coded, and can't * be initialized in the correct way. */ - test = (long) fmgr(le->sk_procedure, lt->sk_argument, le->sk_argument); - if (test) + test = OidFunctionCall2(le->sk_procedure, + lt->sk_argument, le->sk_argument); + if (DatumGetBool(test)) init[BTLessEqualStrategyNumber - 1] = 0; else init[BTLessStrategyNumber - 1] = 0; @@ -259,8 +261,9 @@ _bt_orderkeys(Relation relation, BTScanOpaque so) ge = &xform[BTGreaterEqualStrategyNumber - 1]; /* see note above on function cache */ - test = (long) fmgr(ge->sk_procedure, gt->sk_argument, ge->sk_argument); - if (test) + test = OidFunctionCall2(ge->sk_procedure, + gt->sk_argument, ge->sk_argument); + if (DatumGetBool(test)) init[BTGreaterEqualStrategyNumber - 1] = 0; else init[BTGreaterStrategyNumber - 1] = 0; @@ -298,8 +301,9 @@ _bt_orderkeys(Relation relation, BTScanOpaque so) if (init[j]) { /* yup, use the appropriate value */ - test = (long) FMGR_PTR2(&cur->sk_func, cur->sk_argument, xform[j].sk_argument); - if (test) + test = FunctionCall2(&cur->sk_func, + cur->sk_argument, xform[j].sk_argument); + if (DatumGetBool(test)) xform[j].sk_argument = cur->sk_argument; else if (j == (BTEqualStrategyNumber - 1)) so->qual_ok = 0;/* key == a && key == b, but a != b */ @@ -385,7 +389,7 @@ _bt_checkkeys(IndexScanDesc scan, IndexTuple tuple, Size *keysok) ScanKey key; Datum datum; bool isNull; - int test; + Datum test; *keysok = 0; if (keysz == 0) @@ -415,18 +419,16 @@ _bt_checkkeys(IndexScanDesc scan, IndexTuple tuple, Size *keysok) if (key[0].sk_flags & SK_COMMUTE) { - test = (int) (*fmgr_faddr(&key[0].sk_func)) - (DatumGetPointer(key[0].sk_argument), - datum); + test = FunctionCall2(&key[0].sk_func, + key[0].sk_argument, datum); } else { - test = (int) (*fmgr_faddr(&key[0].sk_func)) - (datum, - DatumGetPointer(key[0].sk_argument)); + test = FunctionCall2(&key[0].sk_func, + datum, key[0].sk_argument); } - if (!test == !(key[0].sk_flags & SK_NEGATE)) + if (DatumGetBool(test) == !!(key[0].sk_flags & SK_NEGATE)) return false; keysz -= 1; |