diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c index fc65ddc3f97c5b34623b606a9c665679c427322a..eb6bf5570335cb62156261dce4315bab496626b3 100644 --- a/src/backend/utils/adt/selfuncs.c +++ b/src/backend/utils/adt/selfuncs.c @@ -12,7 +12,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.28 1999/05/25 16:12:20 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.29 1999/05/31 19:32:47 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -404,7 +404,21 @@ btreesel(Oid operatorObjectId, } else { - result = (float64) fmgr(get_oprrest(operatorObjectId), + RegProcedure oprrest = get_oprrest(operatorObjectId); + + /* + * Operators used for indexes should have selectivity estimators. + * (An alternative is to default to 0.5, as the optimizer does in + * dealing with operators occurring in WHERE clauses, but if you + * are going to the trouble of making index support you probably + * don't want to miss the benefits of a good selectivity estimate.) + */ + if (!oprrest) + elog(ERROR, + "Operator %u must have a restriction selectivity estimator to be used in a btree index", + operatorObjectId); + + result = (float64) fmgr(oprrest, (char *) operatorObjectId, (char *) indrelid, (char *) (int) attributeNumber, @@ -449,7 +463,21 @@ btreenpage(Oid operatorObjectId, } else { - temp = (float64) fmgr(get_oprrest(operatorObjectId), + RegProcedure oprrest = get_oprrest(operatorObjectId); + + /* + * Operators used for indexes should have selectivity estimators. + * (An alternative is to default to 0.5, as the optimizer does in + * dealing with operators occurring in WHERE clauses, but if you + * are going to the trouble of making index support you probably + * don't want to miss the benefits of a good selectivity estimate.) + */ + if (!oprrest) + elog(ERROR, + "Operator %u must have a restriction selectivity estimator to be used in a btree index", + operatorObjectId); + + temp = (float64) fmgr(oprrest, (char *) operatorObjectId, (char *) indrelid, (char *) (int) attributeNumber, @@ -514,7 +542,21 @@ hashsel(Oid operatorObjectId, } else { - result = (float64) fmgr(get_oprrest(operatorObjectId), + RegProcedure oprrest = get_oprrest(operatorObjectId); + + /* + * Operators used for indexes should have selectivity estimators. + * (An alternative is to default to 0.5, as the optimizer does in + * dealing with operators occurring in WHERE clauses, but if you + * are going to the trouble of making index support you probably + * don't want to miss the benefits of a good selectivity estimate.) + */ + if (!oprrest) + elog(ERROR, + "Operator %u must have a restriction selectivity estimator to be used in a hash index", + operatorObjectId); + + result = (float64) fmgr(oprrest, (char *) operatorObjectId, (char *) indrelid, (char *) (int) attributeNumber, @@ -578,7 +620,21 @@ hashnpage(Oid operatorObjectId, } else { - temp = (float64) fmgr(get_oprrest(operatorObjectId), + RegProcedure oprrest = get_oprrest(operatorObjectId); + + /* + * Operators used for indexes should have selectivity estimators. + * (An alternative is to default to 0.5, as the optimizer does in + * dealing with operators occurring in WHERE clauses, but if you + * are going to the trouble of making index support you probably + * don't want to miss the benefits of a good selectivity estimate.) + */ + if (!oprrest) + elog(ERROR, + "Operator %u must have a restriction selectivity estimator to be used in a hash index", + operatorObjectId); + + temp = (float64) fmgr(oprrest, (char *) operatorObjectId, (char *) indrelid, (char *) (int) attributeNumber,