GROUP BY got confused if there were multiple equal() GROUP BY items.
authorTom Lane <[email protected]>
Thu, 13 Mar 2003 16:58:49 +0000 (16:58 +0000)
committerTom Lane <[email protected]>
Thu, 13 Mar 2003 16:58:49 +0000 (16:58 +0000)
This bug has been latent since 7.0 or maybe even further back, but it
was only exposed when parse_clause.c stopped suppressing duplicate
items (see its rev 1.96 of 18-Aug-02).

src/backend/optimizer/plan/planner.c

index c759f6e2503d7f2fdb4eaa21e92f22c514cdf34e..91071977a492b8a87171128bf00318110fb08431 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v 1.125.2.2 2003/03/05 18:38:26 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v 1.125.2.3 2003/03/13 16:58:49 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1498,13 +1498,14 @@ make_groupplan(Query *parse,
         * are just dummies with no extra execution cost.)
         */
        List       *sort_tlist = new_unsorted_tlist(subplan->targetlist);
+       int         grpno = 0;
        int         keyno = 0;
        List       *gl;
 
        foreach(gl, groupClause)
        {
            GroupClause *grpcl = (GroupClause *) lfirst(gl);
-           TargetEntry *te = nth(grpColIdx[keyno] - 1, sort_tlist);
+           TargetEntry *te = nth(grpColIdx[grpno] - 1, sort_tlist);
            Resdom     *resdom = te->resdom;
 
            /*
@@ -1518,6 +1519,7 @@ make_groupplan(Query *parse,
                resdom->reskey = ++keyno;
                resdom->reskeyop = grpcl->sortop;
            }
+           grpno++;
        }
 
        Assert(keyno > 0);