diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2003-10-16 21:37:54 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2003-10-16 21:37:54 +0000 |
commit | 64c1fc7257390102f6178e21bd5b2b766f4a9f3a (patch) | |
tree | 609375b8fe5decbed0d1ffafbdf3f2a6902d5ffa /src/backend/utils | |
parent | 624292aa3517d85f1314227df400f256424a496b (diff) | |
download | postgresql-64c1fc7257390102f6178e21bd5b2b766f4a9f3a.tar.gz postgresql-64c1fc7257390102f6178e21bd5b2b766f4a9f3a.zip |
Avoid division by zero in estimate_num_groups() when table has no rows.
Diffstat (limited to 'src/backend/utils')
-rw-r--r-- | src/backend/utils/adt/selfuncs.c | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c index 2ea4dc3454a..978c0201466 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); |