]> granicus.if.org Git - postgresql/commitdiff
GROUP BY got confused if there were multiple equal() GROUP BY items.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 13 Mar 2003 16:58:35 +0000 (16:58 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 13 Mar 2003 16:58:35 +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 9fa78b8a237acad26dcd4510c16d764746f6edcf..e53a18ac296e07ff7e763c81d837fe58d8f44aab 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v 1.151 2003/03/10 03:53:50 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v 1.152 2003/03/13 16:58:35 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1489,13 +1489,14 @@ make_groupsortplan(Query *parse,
                                   Plan *subplan)
 {
        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;
 
                /*
@@ -1509,6 +1510,7 @@ make_groupsortplan(Query *parse,
                        resdom->reskey = ++keyno;
                        resdom->reskeyop = grpcl->sortop;
                }
+               grpno++;
        }
 
        Assert(keyno > 0);