From 9bb9fca30d42e0b5a0eca527ee9e3596fa0d099e Mon Sep 17 00:00:00 2001 From: dbs Date: Mon, 1 Nov 2010 19:44:16 +0000 Subject: [PATCH] Ensure that changes to authority records propagate to linked bibliographic records Per https://bugs.launchpad.net/evergreen/+bug/669596, updated authority records weren't being reflected in bibliographic records with fields that link to those authority records. We were missing the call to authority.propaagate_changes() withing the ingest trigger on authority.record_entry. git-svn-id: svn://svn.open-ils.org/ILS/trunk@18557 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- Open-ILS/src/sql/Pg/002.schema.config.sql | 2 +- Open-ILS/src/sql/Pg/999.functions.global.sql | 2 ++ .../0452.schema.authority.propagate_changes.sql | 41 ++++++++++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 Open-ILS/src/sql/Pg/upgrade/0452.schema.authority.propagate_changes.sql diff --git a/Open-ILS/src/sql/Pg/002.schema.config.sql b/Open-ILS/src/sql/Pg/002.schema.config.sql index e711c968d7..7ec8659576 100644 --- a/Open-ILS/src/sql/Pg/002.schema.config.sql +++ b/Open-ILS/src/sql/Pg/002.schema.config.sql @@ -70,7 +70,7 @@ CREATE TABLE config.upgrade_log ( install_date TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW() ); -INSERT INTO config.upgrade_log (version) VALUES ('0451'); -- miker +INSERT INTO config.upgrade_log (version) VALUES ('0452'); -- dbs CREATE TABLE config.bib_source ( id SERIAL PRIMARY KEY, diff --git a/Open-ILS/src/sql/Pg/999.functions.global.sql b/Open-ILS/src/sql/Pg/999.functions.global.sql index bd5416cab9..ba4f373321 100644 --- a/Open-ILS/src/sql/Pg/999.functions.global.sql +++ b/Open-ILS/src/sql/Pg/999.functions.global.sql @@ -1430,6 +1430,8 @@ BEGIN IF NOT FOUND AND OLD.marc = NEW.marc THEN -- don't do anything if the MARC didn't change RETURN NEW; END IF; + -- Propagate these updates to any linked bib records + PERFORM authority.propagate_changes(NEW.id) FROM authority.record_entry WHERE id = NEW.id; END IF; -- Flatten and insert the afr data diff --git a/Open-ILS/src/sql/Pg/upgrade/0452.schema.authority.propagate_changes.sql b/Open-ILS/src/sql/Pg/upgrade/0452.schema.authority.propagate_changes.sql new file mode 100644 index 0000000000..53e71ad635 --- /dev/null +++ b/Open-ILS/src/sql/Pg/upgrade/0452.schema.authority.propagate_changes.sql @@ -0,0 +1,41 @@ +BEGIN; + +INSERT INTO config.upgrade_log (version) VALUES ('0452'); -- dbs + +-- AFTER UPDATE OR INSERT trigger for authority.record_entry +CREATE OR REPLACE FUNCTION authority.indexing_ingest_or_delete () RETURNS TRIGGER AS $func$ +BEGIN + + IF NEW.deleted IS TRUE THEN -- If this authority is deleted + DELETE FROM authority.bib_linking WHERE authority = NEW.id; -- Avoid updating fields in bibs that are no longer visible + DELETE FROM authority.full_rec WHERE record = NEW.id; -- Avoid validating fields against deleted authority records + -- Should remove matching $0 from controlled fields at the same time? + RETURN NEW; -- and we're done + END IF; + + IF TG_OP = 'UPDATE' THEN -- re-ingest? + PERFORM * FROM config.internal_flag WHERE name = 'ingest.reingest.force_on_same_marc' AND enabled; + + IF NOT FOUND AND OLD.marc = NEW.marc THEN -- don't do anything if the MARC didn't change + RETURN NEW; + END IF; + -- Propagate these updates to any linked bib records + PERFORM authority.propagate_changes(NEW.id) FROM authority.record_entry WHERE id = NEW.id; + END IF; + + -- Flatten and insert the afr data + PERFORM * FROM config.internal_flag WHERE name = 'ingest.disable_authority_full_rec' AND enabled; + IF NOT FOUND THEN + PERFORM authority.reingest_authority_full_rec(NEW.id); +-- authority.rec_descriptor is not currently used +-- PERFORM * FROM config.internal_flag WHERE name = 'ingest.disable_authority_rec_descriptor' AND enabled; +-- IF NOT FOUND THEN +-- PERFORM authority.reingest_authority_rec_descriptor(NEW.id); +-- END IF; + END IF; + + RETURN NEW; +END; +$func$ LANGUAGE PLPGSQL; + +COMMIT; -- 2.11.0