]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/0454.function.authority_merge_records.sql
Stamping upgrade for truncate-to-max-fine
[working/Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 0454.function.authority_merge_records.sql
1 BEGIN;
2
3 INSERT INTO config.upgrade_log (version) VALUES ('0454'); -- dbs
4
5 CREATE OR REPLACE FUNCTION authority.merge_records ( target_record BIGINT, source_record BIGINT ) RETURNS INT AS $func$
6 DECLARE
7     moved_objects INT := 0;
8     bib_id        INT := 0;
9     bib_rec       biblio.record_entry%ROWTYPE;
10     auth_link     authority.bib_linking%ROWTYPE;
11     ingest_same   boolean;
12 BEGIN
13
14     -- 1. Update all bib records with the ID from target_record in their $0
15     FOR bib_rec IN SELECT bre.* FROM biblio.record_entry bre 
16       INNER JOIN authority.bib_linking abl ON abl.bib = bre.id
17       WHERE abl.authority = source_record LOOP
18
19         UPDATE biblio.record_entry
20           SET marc = REGEXP_REPLACE(marc, 
21             E'(<subfield\\s+code="0"\\s*>[^<]*?\\))' || source_record || '<',
22             E'\\1' || target_record || '<', 'g')
23           WHERE id = bib_rec.id;
24
25           moved_objects := moved_objects + 1;
26     END LOOP;
27
28     -- 2. Grab the current value of reingest on same MARC flag
29     SELECT enabled INTO ingest_same
30       FROM config.internal_flag
31       WHERE name = 'ingest.reingest.force_on_same_marc'
32     ;
33
34     -- 3. Temporarily set reingest on same to TRUE
35     UPDATE config.internal_flag
36       SET enabled = TRUE
37       WHERE name = 'ingest.reingest.force_on_same_marc'
38     ;
39
40     -- 4. Make a harmless update to target_record to trigger auto-update
41     --    in linked bibliographic records
42     UPDATE authority.record_entry
43       SET DELETED = FALSE
44       WHERE id = source_record;
45
46     -- 5. "Delete" source_record
47     DELETE FROM authority.record_entry
48       WHERE id = source_record;
49
50     -- 6. Set "reingest on same MARC" flag back to initial value
51     UPDATE config.internal_flag
52       SET enabled = ingest_same
53       WHERE name = 'ingest.reingest.force_on_same_marc'
54     ;
55
56     RETURN moved_objects;
57 END;
58 $func$ LANGUAGE plpgsql;
59
60 COMMIT;