]> granicus.if.org Git - postgresql/commitdiff
Fix an Assert that turns out to be reachable after all.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 9 Apr 2012 15:58:24 +0000 (11:58 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 9 Apr 2012 15:58:56 +0000 (11:58 -0400)
estimate_num_groups() gets unhappy with
create table empty();
select * from empty except select * from empty e2;
I can't see any actual use-case for such a query (and the table is illegal
per SQL spec), but it seems like a good idea that it not cause an assert
failure.

src/backend/utils/adt/selfuncs.c

index 6989627adc3da9b4c7a6d10e8c469102c9103406..f0fff3d4839afcef6096bcfecfd11e78c08363e8 100644 (file)
@@ -3051,8 +3051,13 @@ estimate_num_groups(PlannerInfo *root, List *groupExprs, double input_rows)
        double          numdistinct;
        ListCell   *l;
 
-       /* We should not be called unless query has GROUP BY (or DISTINCT) */
-       Assert(groupExprs != NIL);
+       /*
+        * If no grouping columns, there's exactly one group.  (This can't happen
+        * for normal cases with GROUP BY or DISTINCT, but it is possible for
+        * corner cases with set operations.)
+        */
+       if (groupExprs == NIL)
+               return 1.0;
 
        /*
         * Count groups derived from boolean grouping expressions.      For other