pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Manfred Koizar <mkoi-pg@aon.at>
Cc: Franco Bruno Borghesi <franco@akyasociados.com.ar>
Cc: pgsql-sql@postgresql.org
Cc: pgsql-hackers@postgresql.org
Subject: Re: [SQL] What's wrong with this group by clause?
Date: Thu, 13 Mar 2003 12:02:55 -0500
Message-ID: <6955.1047574975@sss.pgh.pa.us> (raw)
In-Reply-To: <qn717v872enmaa16qmj147p7kmotodn6uv@4ax.com>
References: <200311041828.13144.franco@akyasociados.com.ar>
	<qn717v872enmaa16qmj147p7kmotodn6uv@4ax.com>

Manfred Koizar <mkoi-pg@aon.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@piscitella.com.

7.3 patch is attached if you need it.

			regards, tom lane


inline patch 1: src/backend/optimizer/plan/planner.c (+3/-1 lines) download inline-1.patch*** 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);

view thread (8+ messages)  latest in thread

Message-ID: <6955.1047574975@sss.pgh.pa.us>
Permalink:  ../6955.1047574975@sss.pgh.pa.us/
Also on:    postgresql.org/message-id/6955.1047574975@sss.pgh.pa.us

 ·  · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: tgl@sss.pgh.pa.us, mkoi-pg@aon.at, franco@akyasociados.com.ar, pgsql-hackers@postgresql.org
  Subject: Re: [SQL] What's wrong with this group by clause?
  In-Reply-To: <6955.1047574975@sss.pgh.pa.us>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox