From 6c4996fa6b635db71e2348025a7ba77d71da69f3 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 13 Mar 2003 16:58:35 +0000 Subject: [PATCH] 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). --- src/backend/optimizer/plan/planner.c | 6 ++++-- 1 file 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); -- 2.40.0