Avoid division by zero in estimate_num_groups() when table has no rows.
authorTom Lane <[email protected]>
Thu, 16 Oct 2003 21:37:54 +0000 (21:37 +0000)
committerTom Lane <[email protected]>
Thu, 16 Oct 2003 21:37:54 +0000 (21:37 +0000)
src/backend/utils/adt/selfuncs.c

index d4297d4d740a7148c44c797487522ed1aa4701d0..6a0686615670120041bcd6005b0a56fed47c1341 100644 (file)
@@ -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);