aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/parser/analyze.c43
1 files changed, 36 insertions, 7 deletions
diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c
index dd3aeada2eb..25135893a75 100644
--- a/src/backend/parser/analyze.c
+++ b/src/backend/parser/analyze.c
@@ -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] == '*')
{