triggers vs. 'NEW in non-rule query' -- SOLVED?

Started by will trillichabout 25 years ago3 messagesgeneral
Jump to latest
#1will trillich
will@serensoft.com

On Sat, Mar 03, 2001 at 11:50:03PM -0500, Ron Peterson wrote:

Could you provide an example of what *doesn't* work?

i THINK i've got it! MWAAH HA HA...

i follow the example from the postgresql-doc/html/user/c4*40.html
document and define a function to be called via TRIGGER...

CREATE FUNCTION easy() RETURNS OPAQUE AS '
DECLARE
x CHAR(1) := NEW.somefield FROM 1 FOR 1;
BEGIN
-- whatever, yada yada, bada bing bada boom
RETURN NEW;
END;
' language 'plpgsql';

and this results in "ERROR: use of NEW in non-rule procedure"
when actually called via TRIGGER. i change it instead to

CREATE FUNCTION easy() RETURNS OPAQUE AS '
DECLARE
x CHAR(1); -- no := assignment here
BEGIN
x := NEW.somefield FROM 1 FOR 1;
-- whatever, yada yada, bada bing bada boom
RETURN NEW;
END;
' language 'plpgsql';

and suddenly all is right with the world. so i can't refer to the
NEW (or probably OLD) pseudotables WITHIN THE DECLARE section.
apparently.

Q: is this a bug? is this a feature?

--
It is always hazardous to ask "Why?" in science, but it is often
interesting to do so just the same.
-- Isaac Asimov, 'The Genetic Code'

will@serensoft.com
http://groups.yahoo.com/group/newbieDoc -- we need your brain!
http://www.dontUthink.com/ -- your brain needs us!

#2Jan Wieck
JanWieck@Yahoo.com
In reply to: will trillich (#1)
Re: triggers vs. 'NEW in non-rule query' -- SOLVED?

will trillich wrote:

i THINK i've got it! MWAAH HA HA...

Congrats

i follow the example from the postgresql-doc/html/user/c4*40.html
document and define a function to be called via TRIGGER...

CREATE FUNCTION easy() RETURNS OPAQUE AS '
DECLARE
x CHAR(1) := NEW.somefield FROM 1 FOR 1;
BEGIN
-- whatever, yada yada, bada bing bada boom
RETURN NEW;
END;
' language 'plpgsql';

Grmpf - exactly that's missing in the "#option dump" output -
the calculation of default values for variable
initialization. I was looking at your log-snippent over and
over again and couldn't see it :-)

and this results in "ERROR: use of NEW in non-rule procedure"
when actually called via TRIGGER. i change it instead to

CREATE FUNCTION easy() RETURNS OPAQUE AS '
DECLARE
x CHAR(1); -- no := assignment here
BEGIN
x := NEW.somefield FROM 1 FOR 1;
-- whatever, yada yada, bada bing bada boom
RETURN NEW;
END;
' language 'plpgsql';

and suddenly all is right with the world. so i can't refer to the
NEW (or probably OLD) pseudotables WITHIN THE DECLARE section.
apparently.

Q: is this a bug? is this a feature?

A missing feature, and something that should be on 7.2's
TODO.

Jan

--

#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me. #
#================================================== JanWieck@Yahoo.com #

_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com

#3Bruce Momjian
bruce@momjian.us
In reply to: Jan Wieck (#2)
Re: triggers vs. 'NEW in non-rule query' -- SOLVED?

apparently.

Q: is this a bug? is this a feature?

A missing feature, and something that should be on 7.2's
TODO.

Please supply a TODO line. I can't figure it out.

-- 
  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