Fix GROUP BY when order of entries is different from order in target list.
authorVadim B. Mikheev
Thu, 25 Sep 1997 12:21:15 +0000 (12:21 +0000)
committerVadim B. Mikheev
Thu, 25 Sep 1997 12:21:15 +0000 (12:21 +0000)
src/backend/optimizer/plan/planmain.c

index 55cd710f420ac7390f727b56eb59b8e11034accd..fe499341010ddcb49e96414eedb2391bacd1f725 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.7 1997/09/08 21:45:24 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.8 1997/09/25 12:21:15 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -394,7 +394,6 @@ make_groupPlan(List **tlist,
    Group      *grpplan;
    int         numCols;
    AttrNumber *grpColIdx;
-   int         keyno = 1;
    int         last_resno = 1;
 
    numCols = length(groupClause);
@@ -412,13 +411,15 @@ make_groupPlan(List **tlist,
     */
    foreach(sl, sort_tlist)
    {
-       Resdom     *resdom = NULL;
-       TargetEntry *te = (TargetEntry *) lfirst(sl);
+       Resdom         *resdom = NULL;
+       TargetEntry    *te = (TargetEntry *) lfirst(sl);
+       int             keyno = 0;
 
-       foreach(gl, glc)
+       foreach(gl, groupClause)
        {
            GroupClause *grpcl = (GroupClause *) lfirst(gl);
 
+           keyno++;
            if (grpcl->entry->resdom->resno == te->resdom->resno)
            {
 
@@ -427,7 +428,6 @@ make_groupPlan(List **tlist,
                resdom->reskeyop = get_opcode(grpcl->grpOpoid);
                resdom->resno = last_resno;     /* re-set */
                grpColIdx[keyno - 1] = last_resno++;
-               keyno++;
                glc = lremove(lfirst(gl), glc); /* TLE found for it */
                break;
            }