From 64c1fc7257390102f6178e21bd5b2b766f4a9f3a Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 16 Oct 2003 21:37:54 +0000 Subject: [PATCH] Avoid division by zero in estimate_num_groups() when table has no rows. --- src/backend/utils/adt/selfuncs.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c index 2ea4dc3454..978c020146 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.146 2003/09/25 06:58:04 petere Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.147 2003/10/16 21:37:54 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -2166,17 +2166,23 @@ estimate_num_groups(Query *root, List *groupExprs, double input_rows) } /* - * Clamp to size of rel, multiply by restriction selectivity. + * Sanity check --- don't divide by zero if empty relation. */ Assert(rel->reloptkind == RELOPT_BASEREL); - if (reldistinct > rel->tuples) - reldistinct = rel->tuples; - reldistinct *= rel->rows / rel->tuples; + if (rel->tuples > 0) + { + /* + * Clamp to size of rel, multiply by restriction selectivity. + */ + if (reldistinct > rel->tuples) + reldistinct = rel->tuples; + reldistinct *= rel->rows / rel->tuples; - /* - * Update estimate of total distinct groups. - */ - numdistinct *= reldistinct; + /* + * Update estimate of total distinct groups. + */ + numdistinct *= reldistinct; + } varinfos = newvarinfos; } while (varinfos != NIL); -- GitLab