]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/0318.schema.authority-linking-ingest.sql
Update permission name to match existing ones
[working/Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 0318.schema.authority-linking-ingest.sql
1 BEGIN;
2
3 INSERT INTO config.upgrade_log (version) VALUES ('0318'); --miker
4
5 INSERT INTO config.internal_flag (name) VALUES ('ingest.disable_authority_linking');
6
7 CREATE TABLE authority.bib_linking (
8     id          BIGSERIAL   PRIMARY KEY,
9     bib         BIGINT      NOT NULL REFERENCES biblio.record_entry (id),
10     authority   BIGINT      NOT NULL REFERENCES authority.record_entry (id)
11 );
12 CREATE INDEX authority_bl_bib_idx ON authority.bib_linking ( bib );
13 CREATE UNIQUE INDEX authority_bl_bib_authority_once_idx ON authority.bib_linking ( authority, bib );
14
15 CREATE OR REPLACE FUNCTION biblio.map_authority_linking (bibid BIGINT, marc TEXT) RETURNS BIGINT AS $func$
16     DELETE FROM authority.bib_linking WHERE bib = $1;
17     INSERT INTO authority.bib_linking (bib, authority)
18         SELECT  y.bib,
19                 y.authority
20           FROM (    SELECT  DISTINCT $1 AS bib,
21                             BTRIM(remove_paren_substring(x))::BIGINT AS authority
22                       FROM  explode_array(oils_xpath('//*[@code="0"]/text()',$2)) x
23                 ) y JOIN authority.record_entry r ON r.id = y.authority;
24     SELECT $1;
25 $func$ LANGUAGE SQL;
26
27 -- AFTER UPDATE OR INSERT trigger for biblio.record_entry
28 CREATE OR REPLACE FUNCTION biblio.indexing_ingest_or_delete () RETURNS TRIGGER AS $func$
29 BEGIN
30
31     IF NEW.deleted IS TRUE THEN -- If this bib is deleted
32         DELETE FROM metabib.metarecord_source_map WHERE source = NEW.id; -- Rid ourselves of the search-estimate-killing linkage
33         RETURN NEW; -- and we're done
34     END IF;
35
36     IF TG_OP = 'UPDATE' THEN -- re-ingest?
37         PERFORM * FROM config.internal_flag WHERE name = 'ingest.reingest.force_on_same_marc' AND enabled;
38
39         IF NOT FOUND AND OLD.marc = NEW.marc THEN -- don't do anything if the MARC didn't change
40             RETURN NEW;
41         END IF;
42
43
44     END IF;
45
46     -- Record authority linking
47     PERFORM * FROM config.internal_flag WHERE name = 'ingest.disable_authority_linking' AND enabled;
48     IF NOT FOUND THEN
49         PERFORM biblio.map_authority_linking( NEW.id, NEW.marc );
50     END IF;
51
52     -- Flatten and insert the mfr data
53     PERFORM * FROM config.internal_flag WHERE name = 'ingest.disable_metabib_full_rec' AND enabled;
54     IF NOT FOUND THEN
55         PERFORM metabib.reingest_metabib_full_rec(NEW.id);
56         PERFORM * FROM config.internal_flag WHERE name = 'ingest.disable_metabib_rec_descriptor' AND enabled;
57         IF NOT FOUND THEN
58             PERFORM metabib.reingest_metabib_rec_descriptor(NEW.id);
59         END IF;
60     END IF;
61
62     -- Gather and insert the field entry data
63     PERFORM metabib.reingest_metabib_field_entries(NEW.id);
64
65     -- Located URI magic
66     IF TG_OP = 'INSERT' THEN
67         PERFORM * FROM config.internal_flag WHERE name = 'ingest.disable_located_uri' AND enabled;
68         IF NOT FOUND THEN
69             PERFORM biblio.extract_located_uris( NEW.id, NEW.marc, NEW.editor );
70         END IF;
71     ELSE
72         PERFORM * FROM config.internal_flag WHERE name = 'ingest.disable_located_uri' AND enabled;
73         IF NOT FOUND THEN
74             PERFORM biblio.extract_located_uris( NEW.id, NEW.marc, NEW.editor );
75         END IF;
76     END IF;
77
78     -- (re)map metarecord-bib linking
79     IF TG_OP = 'INSERT' THEN -- if not deleted and performing an insert, check for the flag
80         PERFORM * FROM config.internal_flag WHERE name = 'ingest.metarecord_mapping.skip_on_insert' AND enabled;
81         IF NOT FOUND THEN
82             PERFORM metabib.remap_metarecord_for_bib( NEW.id, NEW.fingerprint );
83         END IF;
84     ELSE -- we're doing an update, and we're not deleted, remap
85         PERFORM metabib.remap_metarecord_for_bib( NEW.id, NEW.fingerprint );
86     END IF;
87
88     RETURN NEW;
89 END;
90 $func$ LANGUAGE PLPGSQL;
91
92 COMMIT;
93