Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 64c1fc7

Browse files
committed
Avoid division by zero in estimate_num_groups() when table has no rows.
1 parent 624292a commit 64c1fc7

File tree

1 file changed

+15
-9
lines changed

1 file changed

+15
-9
lines changed

src/backend/utils/adt/selfuncs.c

+15-9
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*
1616
*
1717
* IDENTIFICATION
18-
* $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.146 2003/09/25 06:58:04 petere Exp $
18+
* $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.147 2003/10/16 21:37:54 tgl Exp $
1919
*
2020
*-------------------------------------------------------------------------
2121
*/
@@ -2166,17 +2166,23 @@ estimate_num_groups(Query *root, List *groupExprs, double input_rows)
21662166
}
21672167

21682168
/*
2169-
* Clamp to size of rel, multiply by restriction selectivity.
2169+
* Sanity check --- don't divide by zero if empty relation.
21702170
*/
21712171
Assert(rel->reloptkind == RELOPT_BASEREL);
2172-
if (reldistinct > rel->tuples)
2173-
reldistinct = rel->tuples;
2174-
reldistinct *= rel->rows / rel->tuples;
2172+
if (rel->tuples > 0)
2173+
{
2174+
/*
2175+
* Clamp to size of rel, multiply by restriction selectivity.
2176+
*/
2177+
if (reldistinct > rel->tuples)
2178+
reldistinct = rel->tuples;
2179+
reldistinct *= rel->rows / rel->tuples;
21752180

2176-
/*
2177-
* Update estimate of total distinct groups.
2178-
*/
2179-
numdistinct *= reldistinct;
2181+
/*
2182+
* Update estimate of total distinct groups.
2183+
*/
2184+
numdistinct *= reldistinct;
2185+
}
21802186

21812187
varinfos = newvarinfos;
21822188
} while (varinfos != NIL);

0 commit comments

Comments
 (0)