OSDN Git Service

Ignore copies of columns specified in ORDER/GROUP BY
authorVadim B. Mikheev <vadim4o@yahoo.com>
Thu, 16 Oct 1997 06:58:38 +0000 (06:58 +0000)
committerVadim B. Mikheev <vadim4o@yahoo.com>
Thu, 16 Oct 1997 06:58:38 +0000 (06:58 +0000)
src/backend/parser/analyze.c

index dd3aead..2513589 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.45 1997/10/12 07:09:20 vadim Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.46 1997/10/16 06:58:38 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1816,8 +1816,22 @@ transformGroupClause(ParseState *pstate, List *grouplist, List *targetlist)
                        gl = glist = lcons(grpcl, NIL);
                else
                {
-                       lnext(gl) = lcons(grpcl, NIL);
-                       gl = lnext(gl);
+                       List       *i;
+                       
+                       foreach (i, glist)
+                       {
+                               GroupClause *gcl = (GroupClause *) lfirst (i);
+                               
+                               if ( gcl->entry == grpcl->entry )
+                                       break;
+                       }
+                       if ( i == NIL )                 /* not in grouplist already */
+                       {
+                               lnext(gl) = lcons(grpcl, NIL);
+                               gl = lnext(gl);
+                       }
+                       else
+                               pfree (grpcl);          /* get rid of this */
                }
                grouplist = lnext(grouplist);
        }
@@ -1836,8 +1850,7 @@ transformSortClause(ParseState *pstate,
                                        char *uniqueFlag)
 {
        List       *sortlist = NIL;
-       List       *s = NIL,
-                          *i;
+       List       *s = NIL;
 
        while (orderlist != NIL)
        {
@@ -1860,14 +1873,30 @@ transformSortClause(ParseState *pstate,
                }
                else
                {
-                       lnext(s) = lcons(sortcl, NIL);
-                       s = lnext(s);
+                       List       *i;
+                       
+                       foreach (i, sortlist)
+                       {
+                               SortClause *scl = (SortClause *) lfirst (i);
+                               
+                               if ( scl->resdom == sortcl->resdom )
+                                       break;
+                       }
+                       if ( i == NIL )                 /* not in sortlist already */
+                       {
+                               lnext(s) = lcons(sortcl, NIL);
+                               s = lnext(s);
+                       }
+                       else
+                               pfree (sortcl);         /* get rid of this */
                }
                orderlist = lnext(orderlist);
        }
 
        if (uniqueFlag)
        {
+               List       *i;
+               
                if (uniqueFlag[0] == '*')
                {