Assertion failure due to ColumnRefStar

Started by NikhilSover 18 years ago4 messages
#1NikhilS
nikkhils@gmail.com

Hi,

One of our qmg folks reported an assertion failure:

create table x(y char(1));
insert into x values ("*");

The above causes the following assertion to be hit:

/*
* Target item is a bare '*', expand all tables
*
* (e.g., SELECT * FROM emp, dept)
*
* Since the grammar only accepts bare '*' at top level of SELECT,
we
* need not handle the targetlist==false case here.
*/
Assert(targetlist);

in ExpandColumnRefStar() function.

I was wondering if we should fix this by checking for
list_length(cref->fields) being greater than 1 before calling this in
transformExpressionList?

Regards,
Nikhils
--
EnterpriseDB http://www.enterprisedb.com

#2Heikki Linnakangas
heikki@enterprisedb.com
In reply to: NikhilS (#1)
Re: Assertion failure due to ColumnRefStar

NikhilS wrote:

One of our qmg folks reported an assertion failure:

create table x(y char(1));
insert into x values ("*");

The above causes the following assertion to be hit:

Works for me on CVS HEAD. Which version of Postgres is this?

--
Heikki Linnakangas
EnterpriseDB http://www.enterprisedb.com

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Heikki Linnakangas (#2)
Re: Assertion failure due to ColumnRefStar

Heikki Linnakangas <heikki@enterprisedb.com> writes:

NikhilS wrote:

One of our qmg folks reported an assertion failure:
create table x(y char(1));
insert into x values ("*");

The above causes the following assertion to be hit:

Works for me on CVS HEAD. Which version of Postgres is this?

I see the assert failure here --- maybe you were testing a non-assert
build?

The problem here is that in the output of the grammar, * is represented
exactly the same as "*" would be ... I suppose this representation was
chosen back in the day before we had full support for quoted column
names.

regards, tom lane

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Tom Lane (#3)
Re: Assertion failure due to ColumnRefStar

I wrote:

The problem here is that in the output of the grammar, * is represented
exactly the same as "*" would be ... I suppose this representation was
chosen back in the day before we had full support for quoted column
names.

I took a brief look at this. Changing that representation seems like
it'd be a fairly simple exercise, but I don't want to get into doing it
before 8.3 beta, and it'd be too invasive for a back-patch anyway. What
I propose for the moment is to replace the Assert with a plain elog:

if (!targetlist)
elog(ERROR, "invalid use of *");

Thoughts?

regards, tom lane