Fix for tablename in targetlist - Mailing list pgsql-hackers

From Bruce Momjian
Subject Fix for tablename in targetlist
Date
Msg-id 200105190317.f4J3Hl915269@candle.pha.pa.us
Whole thread Raw
Responses Re: Fix for tablename in targetlist  (Peter Eisentraut <peter_e@gmx.net>)
Re: Fix for tablename in targetlist  (Gavin Sherry <swm@linuxworld.com.au>)
List pgsql-hackers
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.

This patch fixes the problem by generating an error in the parser:

    test=> select pg_class from pg_class;
    ERROR:  You can't use a relation alone in a target list.

It passes regression tests.

FYI, I am working down the TODO list, doing items I can handle.

I will apply later if no one objects.

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
Index: src/backend/parser/parse_target.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/parser/parse_target.c,v
retrieving revision 1.66
diff -c -r1.66 parse_target.c
*** src/backend/parser/parse_target.c    2001/03/22 03:59:41    1.66
--- src/backend/parser/parse_target.c    2001/05/19 03:07:41
***************
*** 55,60 ****
--- 55,63 ----
      if (expr == NULL)
          expr = transformExpr(pstate, node, EXPR_COLUMN_FIRST);

+     if (IsA(expr, Ident) && ((Ident *) expr)->isRel)
+         elog(ERROR,"You can't use a relation alone in a target list.");
+
      type_id = exprType(expr);
      type_mod = exprTypmod(expr);


pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: Plans for solving the VACUUM problem
Next
From: Larry Rosenman
Date:
Subject: Re: Interesting question