diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c index 2ea4dc3454a06db26450eb8beaac84c21d1c4619..978c0201466b60ef6578a21431b9219deb8e6374 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);