From: Greg Stark <gsstark@mit.edu>
To: mailreg@numerixtechnology.de
To: pgsql-patches@postgresql.org
Cc: Greg Stark <gsstark@mit.edu>
Subject: Re: [SQL] COUNT(*) to find records which have a certain number of dependencies ?
Date: 20 Sep 2004 17:39:40 -0400
Message-ID: <87y8j4fwmb.fsf@stark.xeocode.com> (raw)
In-Reply-To: <414F43A8.8000101@numerixtechnology.de>
References: <414EF3E6.9040202@numerixtechnology.de>
<87llf4hjv2.fsf@stark.xeocode.com>
<414F348A.2020608@numerixtechnology.de>
<877jqohdoj.fsf@stark.xeocode.com>
<414F43A8.8000101@numerixtechnology.de>
T E Schmitz <mailreg@numerixtechnology.de> writes:
> There's a German saying "Go and find a parking-meter", i.e. suggesting to pop a
> coin in the parking-meter and talk to it as nobody else wants to listen. ;-)
Yes well I anticipated such a response. So I tried my hand at it myself.
Well I finally found a problem tractable enough for me to get all the way from
start to end in a single sitting. Here's a simple solution to my complaint.
This patch allows subqueries without aliases. This is SQL-non-spec-compliant
syntax that Oracle supports and many users expect to work. It's also just
damned convenient, especially for simple ad-hoc queries.
There was a comment saying an alias name would have to be constructed so I
took that approach. It seems like it would have been cleaner to just ensure
that the code doesn't fail when no alias is present. But I have no idea how
much work would be involved in that, so I just took advice from the anonymous
author of the comment.
Incidentally, It seems weird to me that the counter doesn't reset for every
query. Perhaps I should change that?
Index: src/backend/parser/gram.y
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/backend/parser/gram.y,v
retrieving revision 2.475
diff -u -p -c -r2.475 gram.y
cvs diff: conflicting specifications of output style
inline patch 1: src/backend/parser/gram.y, src/backend/parser/parse_clause.c (+8/-13 lines) download inline-1.patch*** src/backend/parser/gram.y 29 Aug 2004 04:12:35 -0000 2.475
--- src/backend/parser/gram.y 20 Sep 2004 21:34:13 -0000
*************** table_ref: relation_expr
*** 5158,5177 ****
{
/*
* The SQL spec does not permit a subselect
! * (<derived_table>) without an alias clause,
! * so we don't either. This avoids the problem
! * of needing to invent a unique refname for it.
! * That could be surmounted if there's sufficient
! * popular demand, but for now let's just implement
! * the spec and see if anyone complains.
! * However, it does seem like a good idea to emit
! * an error message that's better than "syntax error".
*/
! ereport(ERROR,
! (errcode(ERRCODE_SYNTAX_ERROR),
! errmsg("subquery in FROM must have an alias"),
! errhint("For example, FROM (SELECT ...) [AS] foo.")));
! $$ = NULL;
}
| select_with_parens alias_clause
{
--- 5158,5172 ----
{
/*
* The SQL spec does not permit a subselect
! * (<derived_table>) without an alias clause, We surmount
! * this because of popular demand by gining up a fake name
! * in transformRangeSubselect
*/
!
! RangeSubselect *n = makeNode(RangeSubselect);
! n->subquery = $1;
! n->alias = NULL;
! $$ = (Node *) n;
}
| select_with_parens alias_clause
{
Index: src/backend/parser/parse_clause.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/backend/parser/parse_clause.c,v
retrieving revision 1.136
diff -u -p -c -r1.136 parse_clause.c
cvs diff: conflicting specifications of output style
inline patch 2: src/backend/parser/parse_clause.c (+11/-3 lines) download inline-2.patch*** src/backend/parser/parse_clause.c 29 Aug 2004 05:06:44 -0000 1.136
--- src/backend/parser/parse_clause.c 20 Sep 2004 21:34:14 -0000
*************** transformRangeSubselect(ParseState *psta
*** 418,426 ****
* an unlabeled subselect.
*/
if (r->alias == NULL)
! ereport(ERROR,
! (errcode(ERRCODE_SYNTAX_ERROR),
! errmsg("subquery in FROM must have an alias")));
/*
* Analyze and transform the subquery.
--- 418,434 ----
* an unlabeled subselect.
*/
if (r->alias == NULL)
! {
! static int subquery_counter = 1;
! static char buf[30];
!
! sprintf(buf, "*SUBQUERY*%d*", subquery_counter++);
!
! r->alias = makeNode(Alias);
! r->alias->aliasname = pstrdup(buf);
! r->alias->colnames = NULL;
! }
!
/*
* Analyze and transform the subquery.
Patches:download all (2 files, .tar.gz)
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: gsstark@mit.edu, mailreg@numerixtechnology.de, pgsql-patches@postgresql.org
Subject: Re: [SQL] COUNT(*) to find records which have a certain number of dependencies ?
In-Reply-To: <87y8j4fwmb.fsf@stark.xeocode.com>
* 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