diff options
author | Tom Lane | 2000-09-23 21:27:05 +0000 |
---|---|---|
committer | Tom Lane | 2000-09-23 21:27:05 +0000 |
commit | 89ebadcd779de650016b04cc11c416f7d0ec0516 (patch) | |
tree | 5008cbe0831a3242af477f4fba8e54f4780b8ac3 | |
parent | 5a5531a3f47124851ab84a18f08fec6ddda86e34 (diff) |
Back-patch fix for erroneous selectivity of not-equals.
-rw-r--r-- | src/backend/utils/adt/selfuncs.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c index 4718dc668a7..246a8d6086d 100644 --- a/src/backend/utils/adt/selfuncs.c +++ b/src/backend/utils/adt/selfuncs.c @@ -15,7 +15,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.66 2000/05/26 17:19:15 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.66.2.1 2000/09/23 21:27:05 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -255,9 +255,24 @@ neqsel(Oid opid, Datum value, int32 flag) { + Oid eqopid; float64 result; - result = eqsel(opid, relid, attno, value, flag); + /* + * We want 1 - eqsel() where the equality operator is the one associated + * with this != operator, that is, its negator. + */ + eqopid = get_negator(opid); + if (eqopid) + { + result = eqsel(eqopid, relid, attno, value, flag); + } + else + { + /* Use default selectivity (should we raise an error instead?) */ + result = (float64) palloc(sizeof(float64data)); + *result = DEFAULT_EQ_SEL; + } *result = 1.0 - *result; return result; } |