Changeset 9476

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

improved concurrency detection

Location:
trunk/Open-ILS/src/sql/Pg
Files:
2 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 
  • trunk/Open-ILS/src/sql/Pg/upgrade_simple_record.sql

    r9460 r9476  
    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