From 9b10d6ffda93d8dd487586e1f9987fae7081d8ca Mon Sep 17 00:00:00 2001 From: "Vadim B. Mikheev" Date: Thu, 16 Oct 1997 06:58:38 +0000 Subject: [PATCH] Ignore copies of columns specified in ORDER/GROUP BY --- src/backend/parser/analyze.c | 43 ++++++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index dd3aeada2e..25135893a7 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] == '*') { -- GitLab