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

improved concurrency detection

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/Open-ILS/src/sql/Pg/reporter-schema.sql

    r9460 r9476  
    158158 
    159159CREATE OR REPLACE FUNCTION reporter.simple_rec_sync () RETURNS TRIGGER AS $$ 
     160DECLARE 
     161    r_id        BIGINT; 
     162    new_data    RECORD; 
    160163BEGIN 
    161     IF TG_OP IN ('UPDATE','DELETE') THEN 
    162         DELETE FROM reporter.materialized_simple_record WHERE id = OLD.record; 
     164    IF TG_OP IN ('DELETE') THEN 
     165        r_id := OLD.record; 
     166    ELSE 
     167        r_id := NEW.record; 
    163168    END IF; 
    164169 
    165     IF TG_OP IN ('INSERT','UPDATE') AND NOT NEW.deleted THEN 
    166         INSERT INTO reporter.materialized_simple_record SELECT * FROM reporter.old_super_simple_record WHERE id = NEW.record; 
     170    SELECT * INTO new_data FROM reporter.materialized_simple_record WHERE id = r_id FOR UPDATE; 
     171    DELETE FROM reporter.materialized_simple_record WHERE id = r_id; 
     172 
     173    IF TG_OP IN ('DELETE') THEN 
     174        RETURN OLD; 
     175    ELSE 
     176        INSERT INTO reporter.materialized_simple_record SELECT DISTINCT ON (id) * FROM reporter.old_super_simple_record WHERE id = NEW.record; 
     177        RETURN NEW; 
    167178    END IF; 
    168179