LP#1091885: Stamping upgrade script
[working/Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 1135.schema.lp_1091885_reingest_on_undelete.sql
1 BEGIN;
2
3 SELECT evergreen.upgrade_deps_block_check('1135', :eg_version);
4
5 CREATE OR REPLACE FUNCTION biblio.indexing_ingest_or_delete () RETURNS TRIGGER AS $func$
6 DECLARE
7     tmp_bool BOOL;
8 BEGIN
9
10     IF NEW.deleted THEN -- If this bib is deleted
11
12         PERFORM * FROM config.internal_flag WHERE
13             name = 'ingest.metarecord_mapping.preserve_on_delete' AND enabled;
14
15         tmp_bool := FOUND; -- Just in case this is changed by some other statement
16
17         PERFORM metabib.remap_metarecord_for_bib( NEW.id, NEW.fingerprint, TRUE, tmp_bool );
18
19         IF NOT tmp_bool THEN
20             -- One needs to keep these around to support searches
21             -- with the #deleted modifier, so one should turn on the named
22             -- internal flag for that functionality.
23             DELETE FROM metabib.record_attr_vector_list WHERE source = NEW.id;
24         END IF;
25
26         DELETE FROM authority.bib_linking WHERE bib = NEW.id; -- Avoid updating fields in bibs that are no longer visible
27         DELETE FROM biblio.peer_bib_copy_map WHERE peer_record = NEW.id; -- Separate any multi-homed items
28         DELETE FROM metabib.browse_entry_def_map WHERE source = NEW.id; -- Don't auto-suggest deleted bibs
29         RETURN NEW; -- and we're done
30     END IF;
31
32     IF TG_OP = 'UPDATE' AND OLD.deleted IS FALSE THEN -- re-ingest?
33         PERFORM * FROM config.internal_flag WHERE name = 'ingest.reingest.force_on_same_marc' AND enabled;
34
35         IF NOT FOUND AND OLD.marc = NEW.marc THEN -- don't do anything if the MARC didn't change
36             RETURN NEW;
37         END IF;
38     END IF;
39
40     -- Record authority linking
41     PERFORM * FROM config.internal_flag WHERE name = 'ingest.disable_authority_linking' AND enabled;
42     IF NOT FOUND THEN
43         PERFORM biblio.map_authority_linking( NEW.id, NEW.marc );
44     END IF;
45
46     -- Flatten and insert the mfr data
47     PERFORM * FROM config.internal_flag WHERE name = 'ingest.disable_metabib_full_rec' AND enabled;
48     IF NOT FOUND THEN
49         PERFORM metabib.reingest_metabib_full_rec(NEW.id);
50
51         -- Now we pull out attribute data, which is dependent on the mfr for all but XPath-based fields
52         PERFORM * FROM config.internal_flag WHERE name = 'ingest.disable_metabib_rec_descriptor' AND enabled;
53         IF NOT FOUND THEN
54             PERFORM metabib.reingest_record_attributes(NEW.id, NULL, NEW.marc, TG_OP = 'INSERT' OR OLD.deleted);
55         END IF;
56     END IF;
57
58     -- Gather and insert the field entry data
59     PERFORM metabib.reingest_metabib_field_entries(NEW.id);
60
61     -- Located URI magic
62     PERFORM * FROM config.internal_flag WHERE name = 'ingest.disable_located_uri' AND enabled;
63     IF NOT FOUND THEN PERFORM biblio.extract_located_uris( NEW.id, NEW.marc, NEW.editor ); END IF;
64
65     -- (re)map metarecord-bib linking
66     IF TG_OP = 'INSERT' THEN -- if not deleted and performing an insert, check for the flag
67         PERFORM * FROM config.internal_flag WHERE name = 'ingest.metarecord_mapping.skip_on_insert' AND enabled;
68         IF NOT FOUND THEN
69             PERFORM metabib.remap_metarecord_for_bib( NEW.id, NEW.fingerprint );
70         END IF;
71     ELSE -- we're doing an update, and we're not deleted, remap
72         PERFORM * FROM config.internal_flag WHERE name = 'ingest.metarecord_mapping.skip_on_update' AND enabled;
73         IF NOT FOUND THEN
74             PERFORM metabib.remap_metarecord_for_bib( NEW.id, NEW.fingerprint );
75         END IF;
76     END IF;
77
78     RETURN NEW;
79 END;
80 $func$ LANGUAGE PLPGSQL;
81
82
83 COMMIT;