>
>
> I am sending the review of this patch

I found the following

v  Use <optional> tage in documentation

v  Don’t modified existing test case add new one instead

v  Comment in pg_constraint.c is extended make it short

v  Error message can be more guider if it tells about general rule

v  Wrong result in concurrency case

       Step to produce the result

1.       build with with --enable-cassert and with
-DCATCACHE_FORCE_RELEASE=1

2.       Run these commands as setup:

      CREATE TABLE my_table1 (id integer, name text);

      CREATE TABLE my_table2 (id integer);

3.       CREATE FUNCTION my_deleteproc1() RETURNS trigger AS $$

                              begin

                              DELETE FROM my_table2 WHERE id=OLD.id;

                                  RETURN NULL;

                              end;$$ LANGUAGE plpgsql;

4.       INSERT INTO my_table1 VALUES(323, 'Alex');

                              INSERT INTO my_table1 VALUES(23, 'Teddy');

                              INSERT INTO my_table1 VALUES(38, 'Bob');

                              INSERT INTO my_table2 VALUES(323);

                              INSERT INTO my_table2 VALUES(23);

                              INSERT INTO my_table2 VALUES(38);

5.     CREATE OR REPLACE TRIGGER my_regular_trigger AFTER DELETE ON
my_table1

                             FOR EACH ROW

                             EXECUTE PROCEDURE my_deleteproc1();

6.     Attach a debugger to your session set a breakpoint at
ExecARDeleteTriggers

7.     Run this in your session

                             DELETE FROM my_table1 WHERE id=323;

8.     start another session and run:

                             CREATE OR REPLACE TRIGGER my_regular_trigger
AFTER INSERT ON my_table1

                             FOR EACH ROW

                             EXECUTE PROCEDURE my_deleteproc1();

9.     exite the debugger to release the first session

     and the result

                             postgres=# SELECT * FROM my_table1;

                              id | name

                              ----+-------

                              23 | Teddy

                             38 | Bob

                             (2 rows)

                             postgres=# SELECT * FROM my_table2;

                             id

                             -----

                             323

                             23

                             38

                            (3 rows)


                            Id number 323 should not be there in my_table2;



                Regards

                Surafel

Reply via email to