From: dbs Date: Wed, 20 Oct 2010 16:17:45 +0000 (+0000) Subject: Prevent "Validate" from matching against deleted authority records X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=151876a3cd45b03291cfcbf5ce25490950de9931;p=evergreen%2Ftadl.git Prevent "Validate" from matching against deleted authority records 2.0 introduces the ability to delete authority records. The routines in OpenILS:Application:Storage:Publisher:authority check for matching values of authority.full_rec without concern about whether the corresponding entry in authority.record_entry has been deleted or not. This change removes entries from authority.full_rec when an authority.record_entry row is deleted, with the (possibly incorrect) assumption that there won't be many cases where users will want to search for deleted authority records and undelete them. If that assumption turns out to be incorrect, then further changes can follow; this change at least makes the current behaviour for user-visible actions work as expected. git-svn-id: svn://svn.open-ils.org/ILS/trunk@18409 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- diff --git a/Open-ILS/src/sql/Pg/002.schema.config.sql b/Open-ILS/src/sql/Pg/002.schema.config.sql index 43cc1e6dcd..24094f3681 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 ('0442'); -- tsbere via miker +INSERT INTO config.upgrade_log (version) VALUES ('0443'); -- dbs CREATE TABLE config.bib_source ( id SERIAL PRIMARY KEY, diff --git a/Open-ILS/src/sql/Pg/1.6.1-2.0-upgrade-db.sql b/Open-ILS/src/sql/Pg/1.6.1-2.0-upgrade-db.sql index 4fb7de3c70..43f225906c 100644 --- a/Open-ILS/src/sql/Pg/1.6.1-2.0-upgrade-db.sql +++ b/Open-ILS/src/sql/Pg/1.6.1-2.0-upgrade-db.sql @@ -16519,6 +16519,7 @@ 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; diff --git a/Open-ILS/src/sql/Pg/999.functions.global.sql b/Open-ILS/src/sql/Pg/999.functions.global.sql index 6199d949a5..bd5416cab9 100644 --- a/Open-ILS/src/sql/Pg/999.functions.global.sql +++ b/Open-ILS/src/sql/Pg/999.functions.global.sql @@ -1419,6 +1419,7 @@ 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; diff --git a/Open-ILS/src/sql/Pg/upgrade/0443.schema.authority_ingest.sql b/Open-ILS/src/sql/Pg/upgrade/0443.schema.authority_ingest.sql new file mode 100644 index 0000000000..c3de65799f --- /dev/null +++ b/Open-ILS/src/sql/Pg/upgrade/0443.schema.authority_ingest.sql @@ -0,0 +1,39 @@ +BEGIN; + +INSERT INTO config.upgrade_log (version) VALUES ('0443'); -- 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; + 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;