From f772e6cbf7f24245d59c4429f24a9c8cc4a9e38c Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 26 Dec 2002 23:38:42 +0000 Subject: [PATCH] Clamp the output of estimate_hash_bucketsize() to a sane range; per example from Bruno Wolff in which it produced a silly result. --- src/backend/optimizer/path/costsize.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c index 5feaed4915..a19dd92c82 100644 --- a/src/backend/optimizer/path/costsize.c +++ b/src/backend/optimizer/path/costsize.c @@ -42,7 +42,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/path/costsize.c,v 1.96 2002/12/14 00:17:55 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/costsize.c,v 1.97 2002/12/26 23:38:42 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1164,6 +1164,16 @@ estimate_hash_bucketsize(Query *root, Var *var) if (avgfreq > 0.0 && mcvfreq > avgfreq) estfract *= mcvfreq / avgfreq; + /* + * Clamp bucketsize to sane range (the above adjustment could easily + * produce an out-of-range result). We set the lower bound a little + * above zero, since zero isn't a very sane result. + */ + if (estfract < 1.0e-6) + estfract = 1.0e-6; + else if (estfract > 1.0) + estfract = 1.0; + ReleaseSysCache(tuple); return (Selectivity) estfract;