summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane2003-03-13 16:58:35 +0000
committerTom Lane2003-03-13 16:58:35 +0000
commit6c4996fa6b635db71e2348025a7ba77d71da69f3 (patch)
treeb3853d820df938746e76a7cf2f48a238c512044e
parent706a32cdf6329e8961a30c7f1125df97e3ea3236 (diff)
GROUP BY got confused if there were multiple equal() GROUP BY items.
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).
-rw-r--r--src/backend/optimizer/plan/planner.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c
index 9fa78b8a23..e53a18ac29 100644
--- a/src/backend/optimizer/plan/planner.c
+++ b/src/backend/optimizer/plan/planner.c
@@ -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);