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/reporter-schema.sql

    r9459 r9475  
    159159 
    160160CREATE OR REPLACE FUNCTION reporter.simple_rec_sync () RETURNS TRIGGER AS $$ 
     161DECLARE 
     162    r_id        BIGINT; 
     163    new_data    RECORD; 
    161164BEGIN 
    162     IF TG_OP IN ('UPDATE','DELETE') THEN 
    163         DELETE FROM reporter.materialized_simple_record WHERE id = OLD.record; 
     165    IF TG_OP IN ('DELETE') THEN 
     166        r_id := OLD.record; 
     167    ELSE 
     168        r_id := NEW.record; 
    164169    END IF; 
    165170 
    166     IF TG_OP IN ('INSERT','UPDATE') AND NOT NEW.deleted THEN 
    167         INSERT INTO reporter.materialized_simple_record SELECT * FROM reporter.old_super_simple_record WHERE id = NEW.record; 
     171    SELECT * INTO new_data FROM reporter.materialized_simple_record WHERE id = r_id FOR UPDATE; 
     172    DELETE FROM reporter.materialized_simple_record WHERE id = r_id; 
     173 
     174    IF TG_OP IN ('DELETE') THEN 
     175        RETURN OLD; 
     176    ELSE 
     177        INSERT INTO reporter.materialized_simple_record SELECT DISTINCT ON (id) * FROM reporter.old_super_simple_record WHERE id = NEW.record; 
     178        RETURN NEW; 
    168179    END IF; 
    169180