There is some code in gram.y that detects whether you are in a RULE so
NEW/OLD can be detected.  Seems the value is reset on parser start and
set on RULE start, but not reset on rule and.  A multi-query string
could use NEW/OLD in the queries after the RULE even though they are
invalid.  The following patch fixes this by resetting the flag when the
rule action happens.

-- 
  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/gram.y
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/parser/gram.y,v
retrieving revision 2.238
diff -c -r2.238 gram.y
*** src/backend/parser/gram.y	2001/07/16 19:07:40	2.238
--- src/backend/parser/gram.y	2001/08/03 14:45:37
***************
*** 2720,2725 ****
--- 2720,2726 ----
  					n->instead = $12;
  					n->actions = $13;
  					$$ = (Node *)n;
+ 					QueryIsRule=FALSE;
  				}
  		;
Fri, 3 Aug 2001 11:47:27 -0400 (EDT)
Bruce Momjian <pgman@candle.pha.pa.us>
Rule flag in gram.y
Bruce Momjian <pgman@candle.pha.pa.us> writes:
> There is some code in gram.y that detects whether you are in a RULE so
> NEW/OLD can be detected.  Seems the value is reset on parser start and
> set on RULE start, but not reset on rule and.  A multi-query string
> could use NEW/OLD in the queries after the RULE even though they are
> invalid.  The following patch fixes this by resetting the flag when the
> rule action happens.

I was about to say "fix ecpg's grammar too", but a quick look shows that
Michael was way ahead of the rest of us on this one ...

			regards, tom lane

Fri, 03 Aug 2001 18:55:46 -0400
Tom Lane <tgl@sss.pgh.pa.us>
Re: Rule flag in gram.y 