aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2003-10-16 21:37:54 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2003-10-16 21:37:54 +0000
commit64c1fc7257390102f6178e21bd5b2b766f4a9f3a (patch)
tree609375b8fe5decbed0d1ffafbdf3f2a6902d5ffa /src/backend/utils
parent624292aa3517d85f1314227df400f256424a496b (diff)
downloadpostgresql-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.c24
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);