From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | Manfred Koizar <mkoi-pg(at)aon(dot)at> |
Cc: | Franco Bruno Borghesi <franco(at)akyasociados(dot)com(dot)ar>, pgsql-sql(at)postgresql(dot)org, pgsql-hackers(at)postgresql(dot)org |
Subject: | Re: [SQL] What's wrong with this group by clause? |
Date: | 2003-03-13 17:02:55 |
Message-ID: | 6955.1047574975@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers pgsql-sql |
Manfred Koizar <mkoi-pg(at)aon(dot)at> writes:
> ISTM you have found a Postgres 7.3 bug.
Yeah. Actually, the planner bug has been there a long time, but it was
only latent until the parser stopped suppressing duplicate GROUP BY
items:
2002-08-18 14:46 tgl
* src/backend/parser/parse_clause.c: Remove optimization whereby
parser would make only one sort-list entry when two equal()
targetlist items were to be added to an ORDER BY or DISTINCT list.
Although indeed this would make sorting fractionally faster by
sometimes saving a comparison, it confuses the heck out of later
stages of processing, because it makes it look like the user wrote
DISTINCT ON rather than DISTINCT. Bug reported by
joe(at)piscitella(dot)com(dot)
7.3 patch is attached if you need it.
regards, tom lane
*** src/backend/optimizer/plan/planner.c.orig Wed Mar 5 13:38:26 2003
--- src/backend/optimizer/plan/planner.c Thu Mar 13 11:21:16 2003
***************
*** 1498,1510 ****
* are just dummies with no extra execution cost.)
*/
List *sort_tlist = new_unsorted_tlist(subplan->targetlist);
int keyno = 0;
List *gl;
foreach(gl, groupClause)
{
GroupClause *grpcl = (GroupClause *) lfirst(gl);
! TargetEntry *te = nth(grpColIdx[keyno] - 1, sort_tlist);
Resdom *resdom = te->resdom;
/*
--- 1498,1511 ----
* are just dummies with no extra execution cost.)
*/
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[grpno] - 1, sort_tlist);
Resdom *resdom = te->resdom;
/*
***************
*** 1518,1523 ****
--- 1519,1525 ----
resdom->reskey = ++keyno;
resdom->reskeyop = grpcl->sortop;
}
+ grpno++;
}
Assert(keyno > 0);
From | Date | Subject | |
---|---|---|---|
Next Message | Zeugswetter Andreas SB SD | 2003-03-13 17:07:27 | Re: Roadmap for FE/BE protocol redesign |
Previous Message | Peter Eisentraut | 2003-03-13 16:50:32 | Re: SQL99 ARRAY support proposal |
From | Date | Subject | |
---|---|---|---|
Next Message | Ryan Orth | 2003-03-13 17:22:21 | Re: nearest match |
Previous Message | Christoph Haller | 2003-03-13 16:15:16 | Re: [SQL] What's wrong with this group by clause? |