Attached is a patch adding regression tests for this code.

Thanks,

Gavin

On Tue, 23 Aug 2005, Bruce Momjian wrote:

>
> Thanks, modified patch applied by Tom, with the addition of a USER
> triggers only mode.
>
> ---------------------------------------------------------------------------
>
> Satoshi Nagayasu wrote:
> > The message format for elog() report is cleaned up.
> >
> > --
> > NAGAYASU Satoshi <[EMAIL PROTECTED]>
>
> > diff -cr pgsql.orig/src/backend/commands/tablecmds.c 
> > pgsql/src/backend/commands/tablecmds.c
> > *** pgsql.orig/src/backend/commands/tablecmds.c     2005-06-28 
> > 14:08:54.000000000 +0900
> > --- pgsql/src/backend/commands/tablecmds.c  2005-08-08 13:46:44.000000000 
> > +0900
> > ***************
> > *** 236,241 ****
> > --- 236,243 ----
> --
>   Bruce Momjian                        |  http://candle.pha.pa.us
>   pgman@candle.pha.pa.us               |  (610) 359-1001
>   +  If your life is a hard drive,     |  13 Roberts Road
>   +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
>
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Have you searched our list archives?
>
>                http://archives.postgresql.org
>
Index: src/test/regress/expected/triggers.out
===================================================================
RCS file: /usr/local/cvsroot/pgsql/src/test/regress/expected/triggers.out,v
retrieving revision 1.18
diff -c -p -r1.18 triggers.out
*** src/test/regress/expected/triggers.out      13 Oct 2004 01:22:31 -0000      
1.18
--- src/test/regress/expected/triggers.out      25 Aug 2005 01:07:08 -0000
*************** SELECT * FROM main_table ORDER BY a, b;
*** 322,324 ****
--- 322,388 ----
      |   
  (8 rows)
  
+ -- Test enable/disable triggers
+ create table trigtest (i serial primary key);
+ NOTICE:  CREATE TABLE will create implicit sequence "trigtest_i_seq" for 
serial column "trigtest.i"
+ NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index 
"trigtest_pkey" for table "trigtest"
+ -- test that disabling RI triggers works
+ create table trigtest2 (i int references trigtest(i) on delete cascade);
+ create function trigtest() returns trigger as $$
+ begin
+       raise notice '% % % %', TG_RELNAME, TG_OP, TG_WHEN, TG_LEVEL;
+       return new;
+ end;$$ language plpgsql;
+ create trigger trigtest_b_row_tg before insert or update or delete on trigtest
+ for each row execute procedure trigtest();
+ create trigger trigtest_a_row_tg after insert or update or delete on trigtest
+ for each row execute procedure trigtest();
+ create trigger trigtest_b_stmt_tg before insert or update or delete on 
trigtest
+ for each statement execute procedure trigtest();
+ create trigger trigtest_a_stmt_tg after insert or update or delete on trigtest
+ for each statement execute procedure trigtest();
+ insert into trigtest default values;
+ NOTICE:  trigtest INSERT BEFORE STATEMENT
+ NOTICE:  trigtest INSERT BEFORE ROW
+ NOTICE:  trigtest INSERT AFTER ROW
+ NOTICE:  trigtest INSERT AFTER STATEMENT
+ alter table trigtest disable trigger trigtest_b_row_tg;
+ insert into trigtest default values;
+ NOTICE:  trigtest INSERT BEFORE STATEMENT
+ NOTICE:  trigtest INSERT AFTER ROW
+ NOTICE:  trigtest INSERT AFTER STATEMENT
+ alter table trigtest disable trigger user;
+ insert into trigtest default values;
+ alter table trigtest enable trigger trigtest_a_stmt_tg;
+ insert into trigtest default values;
+ NOTICE:  trigtest INSERT AFTER STATEMENT
+ insert into trigtest2 values(1);
+ insert into trigtest2 values(2);
+ delete from trigtest where i=2;
+ NOTICE:  trigtest DELETE AFTER STATEMENT
+ select * from trigtest2;
+  i 
+ ---
+  1
+ (1 row)
+ 
+ alter table trigtest disable trigger all;
+ delete from trigtest where i=1;
+ select * from trigtest2;
+  i 
+ ---
+  1
+ (1 row)
+ 
+ -- ensure we still insert, even when all triggers are disabled
+ insert into trigtest default values;
+ select *  from trigtest;
+  i 
+ ---
+  3
+  4
+  5
+ (3 rows)
+ 
+ drop table trigtest2;
+ drop table trigtest;
Index: src/test/regress/sql/triggers.sql
===================================================================
RCS file: /usr/local/cvsroot/pgsql/src/test/regress/sql/triggers.sql,v
retrieving revision 1.8
diff -c -p -r1.8 triggers.sql
*** src/test/regress/sql/triggers.sql   21 Nov 2003 22:32:49 -0000      1.8
--- src/test/regress/sql/triggers.sql   25 Aug 2005 01:04:38 -0000
*************** COPY main_table (a, b) FROM stdin;
*** 253,255 ****
--- 253,296 ----
  \.
  
  SELECT * FROM main_table ORDER BY a, b;
+ 
+ -- Test enable/disable triggers
+ 
+ create table trigtest (i serial primary key);
+ -- test that disabling RI triggers works
+ create table trigtest2 (i int references trigtest(i) on delete cascade);
+ 
+ create function trigtest() returns trigger as $$
+ begin
+       raise notice '% % % %', TG_RELNAME, TG_OP, TG_WHEN, TG_LEVEL;
+       return new;
+ end;$$ language plpgsql;
+ 
+ create trigger trigtest_b_row_tg before insert or update or delete on trigtest
+ for each row execute procedure trigtest();
+ create trigger trigtest_a_row_tg after insert or update or delete on trigtest
+ for each row execute procedure trigtest();
+ create trigger trigtest_b_stmt_tg before insert or update or delete on 
trigtest
+ for each statement execute procedure trigtest();
+ create trigger trigtest_a_stmt_tg after insert or update or delete on trigtest
+ for each statement execute procedure trigtest();
+ 
+ insert into trigtest default values;
+ alter table trigtest disable trigger trigtest_b_row_tg;
+ insert into trigtest default values;
+ alter table trigtest disable trigger user;
+ insert into trigtest default values;
+ alter table trigtest enable trigger trigtest_a_stmt_tg;
+ insert into trigtest default values;
+ insert into trigtest2 values(1);
+ insert into trigtest2 values(2);
+ delete from trigtest where i=2;
+ select * from trigtest2;
+ alter table trigtest disable trigger all;
+ delete from trigtest where i=1;
+ select * from trigtest2;
+ -- ensure we still insert, even when all triggers are disabled
+ insert into trigtest default values;
+ select *  from trigtest;
+ drop table trigtest2;
+ drop table trigtest;
---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings

Reply via email to