Show
Ignore:
Timestamp:
04/28/08 08:15:05 (6 months ago)
Author:
miker
Message:

improved concurrency detection

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • branches/rel_1_2/Open-ILS/src/sql/Pg/upgrade_simple_record.sql

    r9459 r9475  
    3434 
    3535CREATE OR REPLACE FUNCTION reporter.simple_rec_sync () RETURNS TRIGGER AS $$ 
     36DECLARE 
     37    r_id        BIGINT; 
     38    new_data    RECORD; 
    3639BEGIN 
    37     IF TG_OP IN ('UPDATE','DELETE') THEN 
    38         DELETE FROM reporter.materialized_simple_record WHERE id = OLD.record; 
     40    IF TG_OP IN ('DELETE') THEN 
     41        r_id := OLD.record; 
     42    ELSE 
     43        r_id := NEW.record; 
    3944    END IF; 
    4045 
    41     IF TG_OP IN ('INSERT','UPDATE') AND NOT NEW.deleted THEN 
    42         INSERT INTO reporter.materialized_simple_record SELECT * FROM reporter.old_super_simple_record WHERE id = NEW.record; 
     46    SELECT * INTO new_data FROM reporter.materialized_simple_record WHERE id = r_id FOR UPDATE; 
     47    DELETE FROM reporter.materialized_simple_record WHERE id = r_id; 
     48 
     49    IF TG_OP IN ('DELETE') THEN 
     50        RETURN OLD; 
     51    ELSE 
     52        INSERT INTO reporter.materialized_simple_record SELECT DISTINCT ON (id) * FROM reporter.old_super_simple_record WHERE id = NEW.record; 
     53        RETURN NEW; 
    4354    END IF; 
    4455