From: miker Date: Thu, 20 Aug 2009 15:35:43 +0000 (+0000) Subject: backport of r13897: thinko in recent ingest fix X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=bbedb2fb7640014dfa44807567ac4db4912ef401;p=Evergreen.git backport of r13897: thinko in recent ingest fix git-svn-id: svn://svn.open-ils.org/ILS/branches/rel_1_6_0@13899 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- diff --git a/Open-ILS/src/sql/Pg/1.4.0.5-1.6.0.0-upgrade-db.sql b/Open-ILS/src/sql/Pg/1.4.0.5-1.6.0.0-upgrade-db.sql index d577e72602..cbfc305902 100644 --- a/Open-ILS/src/sql/Pg/1.4.0.5-1.6.0.0-upgrade-db.sql +++ b/Open-ILS/src/sql/Pg/1.4.0.5-1.6.0.0-upgrade-db.sql @@ -3857,6 +3857,71 @@ COMMENT ON FUNCTION actor.approve_pending_address(INT) IS $$ */ $$; +SELECT reporter.disable_materialized_simple_record_trigger(); + +CREATE OR REPLACE FUNCTION reporter.simple_rec_update (r_id BIGINT, deleted BOOL) RETURNS BOOL AS $$ +DECLARE + new_data RECORD; +BEGIN + + DELETE FROM reporter.materialized_simple_record WHERE id = r_id; + + IF NOT deleted THEN + INSERT INTO reporter.materialized_simple_record SELECT DISTINCT ON (id) * FROM reporter.old_super_simple_record WHERE id = NEW.record; + END IF; + + RETURN TRUE; + +END; +$$ LANGUAGE PLPGSQL; + +CREATE OR REPLACE FUNCTION reporter.simple_rec_update (r_id BIGINT) RETURNS BOOL AS $$ + SELECT reporter.simple_rec_update($1, FALSE); +$$ LANGUAGE SQL; + +CREATE OR REPLACE FUNCTION reporter.simple_rec_delete (r_id BIGINT) RETURNS BOOL AS $$ + SELECT reporter.simple_rec_update($1, TRUE); +$$ LANGUAGE SQL; + +CREATE OR REPLACE FUNCTION reporter.simple_rec_sync () RETURNS TRIGGER AS $$ +DECLARE + r_id BIGINT; + deleted BOOL; +BEGIN + IF TG_OP IN ('DELETE') THEN + r_id := OLD.record; + deleted := TRUE; + ELSE + r_id := NEW.record; + deleted := FALSE; + END IF; + + PERFORM reporter.simple_rec_update(r_id, deleted); + + IF deleted THEN + RETURN OLD; + ELSE + RETURN NEW; + END IF; + +END; +$$ LANGUAGE PLPGSQL; + +CREATE OR REPLACE FUNCTION reporter.simple_rec_bib_sync () RETURNS TRIGGER AS $$ +BEGIN + IF NEW.deleted THEN + DELETE FROM reporter.materialized_simple_record WHERE id = NEW.id; + RETURN NEW; + ELSE + RETURN NEW; + END IF; +END; +$$ LANGUAGE PLPGSQL; + +CREATE TRIGGER zzz_update_materialized_simple_rec_delete_tgr + AFTER UPDATE ON biblio.record_entry + FOR EACH ROW EXECUTE PROCEDURE reporter.reporter.simple_rec_bib_sync(); + COMMIT; diff --git a/Open-ILS/src/sql/Pg/reporter-schema.sql b/Open-ILS/src/sql/Pg/reporter-schema.sql index e79f592580..da466129ab 100644 --- a/Open-ILS/src/sql/Pg/reporter-schema.sql +++ b/Open-ILS/src/sql/Pg/reporter-schema.sql @@ -175,14 +175,12 @@ ALTER TABLE reporter.materialized_simple_record ADD PRIMARY KEY (id); CREATE VIEW reporter.super_simple_record AS SELECT * FROM reporter.materialized_simple_record; CREATE OR REPLACE FUNCTION reporter.simple_rec_update (r_id BIGINT, deleted BOOL) RETURNS BOOL AS $$ -DECLARE - new_data RECORD; BEGIN DELETE FROM reporter.materialized_simple_record WHERE id = r_id; IF NOT deleted THEN - INSERT INTO reporter.materialized_simple_record SELECT DISTINCT ON (id) * FROM reporter.old_super_simple_record WHERE id = NEW.record; + INSERT INTO reporter.materialized_simple_record SELECT DISTINCT ON (id) * FROM reporter.old_super_simple_record WHERE id = r_id; END IF; RETURN TRUE;