Re: Why do OLD and NEW have special internal names?

From: David Fetter <david(at)fetter(dot)org>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: pgsql-hackers(at)postgreSQL(dot)org
Subject: Re: Why do OLD and NEW have special internal names?
Date: 2009-11-07 07:11:22
Message-ID: 20091107071122.GC15015@fetter.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Thu, Nov 05, 2009 at 04:33:07PM -0500, Tom Lane wrote:
> So I was testing the next step of plpgsql modification, namely actually
> letting the parser hooks do something, and it promptly blew up in
> trigger functions, like so:
>
> + ERROR: OLD used in query that is not in a rule
> + LINE 1: SELECT OLD
> + ^
> + QUERY: SELECT OLD
> + CONTEXT: SQL statement in PL/PgSQL function "trigger_data" near line 35
>
> The reason is that because plpgsql is no longer translating references
> to its names into Params before letting the core parser see them, the
> kluge in gram.y that changes "OLD" to "*OLD*" and "NEW" to "*NEW*"
> kicks in, or actually decides to throw an error instead of kicking in.
>
> I am wondering what is the point at all of having that kluge. It
> certainly doesn't manage to make OLD/NEW not act like reserved words,
> in fact rather more the opposite, as shown here. If we just made those
> names be ordinary table alias names in rule queries, wouldn't things
> work as well or better?
>
> BTW, this brings up another point, which is that up to now it's often
> been possible to use plpgsql variable names that conflict with
> core-parser reserved words, so long as you didn't need to use the
> reserved word with its special meaning. That will stop working when
> this patch goes in. Doesn't bother me any, but if anyone thinks it's
> a serious problem, speak now.

Sorry to be late on this :(

There's been a suggestion, to be filled in later, that
UPDATE...RETURNING be able to return (expressions on) columns from
both the old row and the new one. The syntax would involve either
using OLD to specify old rows, or both NEW and OLD if we want to break
current behavior. Would this make that easier to do? Harder? Is it
orthogonal?

Cheers,
David (who thinks that both NEW and OLD are object names so poor we
should force quoting them just on aesthetic principle ;)
--
David Fetter <david(at)fetter(dot)org> http://fetter.org/
Phone: +1 415 235 3778 AIM: dfetter666 Yahoo!: dfetter
Skype: davidfetter XMPP: david(dot)fetter(at)gmail(dot)com
iCal: webcal://www.tripit.com/feed/ical/people/david74/tripit.ics

Remember to vote!
Consider donating to Postgres: http://www.postgresql.org/about/donate

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Pavel Stehule 2009-11-07 07:23:56 Re: Specific names for plpgsql variable-resolution control options?
Previous Message David E. Wheeler 2009-11-07 03:09:46 Re: Specific names for plpgsql variable-resolution control options?