Re: Fix for tablename in targetlist

From: Gavin Sherry <swm(at)linuxworld(dot)com(dot)au>
To: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
Cc: PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Fix for tablename in targetlist
Date: 2001-06-12 13:17:09
Message-ID: Pine.LNX.4.21.0106122253030.11264-100000@linuxworld.com.au
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Bruce,

On Fri, 18 May 2001, Bruce Momjian wrote:

> We have on the TODO list:
>
> * SELECT pg_class FROM pg_class generates strange error
>
> It passes the tablename as targetlist all the way to the executor, where
> it throws an error about Node 704 unkown.

The problem is caused in transformIdent() (parse_expr.c):

if (ident->indirection == NIL &&
refnameRangeTableEntry(pstate, ident->name) != NULL)
{
ident->isRel = TRUE;
result = (Node *) ident;
}

It is pretty clear what is happening here. ident->name is a member of
range table so the type of ident is not changed, as would be the case with
an attribute. Commenting this code out means that result = NULL and the
error 'Attribute 'pg_class' not found'. This, in my opinion, is the
correct error to be generated. Moreover, I cannot find any flow on effect
which may result from removing this code -- regression tests all
pass. From what I can tell, all transformations of Nodes which are of type
Ident should have already been transformed anyway -- have I over looked
something?

Gavin

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message P. Dwayne Miller 2001-06-12 13:28:56 Perl script
Previous Message Bob Deblier 2001-06-12 12:35:43 Re: dlopen() of libpgsqlodbc.so >= release 7.1 fails on sparc solaris 2.8