1 --Upgrade Script for 2.10.7 to 2.10.8
2 \set eg_version '''2.10.8'''
4 INSERT INTO config.upgrade_log (version, applied_to) VALUES ('2.10.8', :eg_version);
6 SELECT evergreen.upgrade_deps_block_check('1001', :eg_version); -- stompro/gmcharlt
8 CREATE INDEX action_usr_circ_history_usr_idx ON action.usr_circ_history ( usr );
10 -- Add Spanish to config.i18n_locale table
11 SELECT evergreen.upgrade_deps_block_check('1002', :eg_version);
13 INSERT INTO config.i18n_locale (code,marc_code,name,description)
14 SELECT 'es-ES', 'spa', oils_i18n_gettext('es-ES', 'Spanish', 'i18n_l', 'name'),
15 oils_i18n_gettext('es-ES', 'Spanish', 'i18n_l', 'description')
16 WHERE NOT EXISTS (SELECT 1 FROM config.i18n_locale WHERE code = 'es-ES');
18 SELECT evergreen.upgrade_deps_block_check('1003', :eg_version); -- gmcharlt/rhamby/csharp
20 CREATE OR REPLACE FUNCTION metabib.remap_metarecord_for_bib( bib_id BIGINT, fp TEXT, bib_is_deleted BOOL DEFAULT FALSE, retain_deleted BOOL DEFAULT FALSE ) RETURNS BIGINT AS $func$
22 new_mapping BOOL := TRUE;
25 tmp_mr metabib.metarecord%ROWTYPE;
29 -- We need to make sure we're not a deleted master record of an MR
30 IF bib_is_deleted THEN
31 FOR old_mr IN SELECT id FROM metabib.metarecord WHERE master_record = bib_id LOOP
33 IF NOT retain_deleted THEN -- Go away for any MR that we're master of, unless retained
34 DELETE FROM metabib.metarecord_source_map WHERE source = bib_id;
37 -- Now, are there any more sources on this MR?
38 SELECT COUNT(*) INTO source_count FROM metabib.metarecord_source_map WHERE metarecord = old_mr;
40 IF source_count = 0 AND NOT retain_deleted THEN -- No other records
41 deleted_mrs := ARRAY_APPEND(deleted_mrs, old_mr); -- Just in case...
42 DELETE FROM metabib.metarecord WHERE id = old_mr;
44 ELSE -- indeed there are. Update it with a null cache and recalcualated master record
45 UPDATE metabib.metarecord
47 master_record = ( SELECT id FROM biblio.record_entry WHERE fingerprint = fp AND NOT deleted ORDER BY quality DESC LIMIT 1)
52 ELSE -- insert or update
54 FOR tmp_mr IN SELECT m.* FROM metabib.metarecord m JOIN metabib.metarecord_source_map s ON (s.metarecord = m.id) WHERE s.source = bib_id LOOP
56 -- Find the first fingerprint-matching
57 IF old_mr IS NULL AND fp = tmp_mr.fingerprint THEN
61 ELSE -- Our fingerprint changed ... maybe remove the old MR
62 DELETE FROM metabib.metarecord_source_map WHERE metarecord = tmp_mr.id AND source = bib_id; -- remove the old source mapping
63 SELECT COUNT(*) INTO source_count FROM metabib.metarecord_source_map WHERE metarecord = tmp_mr.id;
64 IF source_count = 0 THEN -- No other records
65 deleted_mrs := ARRAY_APPEND(deleted_mrs, tmp_mr.id);
66 DELETE FROM metabib.metarecord WHERE id = tmp_mr.id;
72 -- we found no suitable, preexisting MR based on old source maps
73 IF old_mr IS NULL THEN
74 SELECT id INTO old_mr FROM metabib.metarecord WHERE fingerprint = fp; -- is there one for our current fingerprint?
76 IF old_mr IS NULL THEN -- nope, create one and grab its id
77 INSERT INTO metabib.metarecord ( fingerprint, master_record ) VALUES ( fp, bib_id );
78 SELECT id INTO old_mr FROM metabib.metarecord WHERE fingerprint = fp;
80 ELSE -- indeed there is. update it with a null cache and recalcualated master record
81 UPDATE metabib.metarecord
83 master_record = ( SELECT id FROM biblio.record_entry WHERE fingerprint = fp AND NOT deleted ORDER BY quality DESC LIMIT 1)
87 ELSE -- there was one we already attached to, update its mods cache and master_record
88 UPDATE metabib.metarecord
90 master_record = ( SELECT id FROM biblio.record_entry WHERE fingerprint = fp AND NOT deleted ORDER BY quality DESC LIMIT 1)
95 INSERT INTO metabib.metarecord_source_map (metarecord, source) VALUES (old_mr, bib_id); -- new source mapping
100 IF ARRAY_UPPER(deleted_mrs,1) > 0 THEN
101 UPDATE action.hold_request SET target = old_mr WHERE target IN ( SELECT unnest(deleted_mrs) ) AND hold_type = 'M'; -- if we had to delete any MRs above, make sure their holds are moved
107 $func$ LANGUAGE PLPGSQL;