Prevent "Validate" from matching against deleted authority records
authordbs <dbs@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 20 Oct 2010 16:17:45 +0000 (16:17 +0000)
committerdbs <dbs@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 20 Oct 2010 16:17:45 +0000 (16:17 +0000)
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

Open-ILS/src/sql/Pg/002.schema.config.sql
Open-ILS/src/sql/Pg/1.6.1-2.0-upgrade-db.sql
Open-ILS/src/sql/Pg/999.functions.global.sql
Open-ILS/src/sql/Pg/upgrade/0443.schema.authority_ingest.sql [new file with mode: 0644]

index 43cc1e6..24094f3 100644 (file)
@@ -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,
index 4fb7de3..43f2259 100644 (file)
@@ -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;
index 6199d94..bd5416c 100644 (file)
@@ -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 (file)
index 0000000..c3de657
--- /dev/null
@@ -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;