From 89ebadcd779de650016b04cc11c416f7d0ec0516 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 23 Sep 2000 21:27:05 +0000 Subject: [PATCH] Back-patch fix for erroneous selectivity of not-equals. --- src/backend/utils/adt/selfuncs.c | 19 +++++++++++++++++-- 1 file 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; } -- 2.39.5