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

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

From
will trillich
Date:
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!

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

From
Jan Wieck
Date:
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


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

From
Bruce Momjian
Date:
> > 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