3 INSERT INTO config.upgrade_log (version) VALUES ('0454'); -- dbs
5 CREATE OR REPLACE FUNCTION authority.merge_records ( target_record BIGINT, source_record BIGINT ) RETURNS INT AS $func$
7 moved_objects INT := 0;
9 bib_rec biblio.record_entry%ROWTYPE;
10 auth_link authority.bib_linking%ROWTYPE;
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
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;
25 moved_objects := moved_objects + 1;
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'
34 -- 3. Temporarily set reingest on same to TRUE
35 UPDATE config.internal_flag
37 WHERE name = 'ingest.reingest.force_on_same_marc'
40 -- 4. Make a harmless update to target_record to trigger auto-update
41 -- in linked bibliographic records
42 UPDATE authority.record_entry
44 WHERE id = source_record;
46 -- 5. "Delete" source_record
47 DELETE FROM authority.record_entry
48 WHERE id = source_record;
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'
58 $func$ LANGUAGE plpgsql;