]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/sql/Pg/version-upgrade/2.7.3-2.7.4-upgrade-db.sql
Forward-port 2.7.3-2.7.4 upgrade script
[working/Evergreen.git] / Open-ILS / src / sql / Pg / version-upgrade / 2.7.3-2.7.4-upgrade-db.sql
1 --Upgrade Script for 2.7.3 to 2.7.4
2 \set eg_version '''2.7.4'''
3 BEGIN;
4 INSERT INTO config.upgrade_log (version, applied_to) VALUES ('2.7.4', :eg_version);
5
6 SELECT evergreen.upgrade_deps_block_check('0908', :eg_version);
7
8 CREATE OR REPLACE FUNCTION vandelay.overlay_bib_record ( import_id BIGINT, eg_id BIGINT, merge_profile_id INT ) RETURNS BOOL AS $$
9 DECLARE
10     editor_string   TEXT;
11     editor_id       INT;
12     v_marc          TEXT;
13     v_bib_source    INT;
14     update_fields   TEXT[];
15     update_query    TEXT;
16 BEGIN
17
18     SELECT  q.marc, q.bib_source INTO v_marc, v_bib_source
19       FROM  vandelay.queued_bib_record q
20             JOIN vandelay.bib_match m ON (m.queued_record = q.id AND q.id = import_id)
21       LIMIT 1;
22
23     IF v_marc IS NULL THEN
24         -- RAISE NOTICE 'no marc for vandelay or bib record';
25         RETURN FALSE;
26     END IF;
27
28     IF vandelay.template_overlay_bib_record( v_marc, eg_id, merge_profile_id) THEN
29         UPDATE  vandelay.queued_bib_record
30           SET   imported_as = eg_id,
31                 import_time = NOW()
32           WHERE id = import_id;
33
34         editor_string := (oils_xpath('//*[@tag="905"]/*[@code="u"]/text()',v_marc))[1];
35
36         IF editor_string IS NOT NULL AND editor_string <> '' THEN
37             SELECT usr INTO editor_id FROM actor.card WHERE barcode = editor_string;
38
39             IF editor_id IS NULL THEN
40                 SELECT id INTO editor_id FROM actor.usr WHERE usrname = editor_string;
41             END IF;
42
43             IF editor_id IS NOT NULL THEN
44                 --only update the edit date if we have a valid editor
45                 update_fields := ARRAY_APPEND(update_fields, 'editor = ' || editor_id || ', edit_date = NOW()');
46             END IF;
47         END IF;
48
49         IF v_bib_source IS NOT NULL THEN
50             update_fields := ARRAY_APPEND(update_fields, 'source = ' || v_bib_source);
51         END IF;
52
53         IF ARRAY_LENGTH(update_fields, 1) > 0 THEN
54             update_query := 'UPDATE biblio.record_entry SET ' || ARRAY_TO_STRING(update_fields, ',') || ' WHERE id = ' || eg_id || ';';
55             --RAISE NOTICE 'query: %', update_query;
56             EXECUTE update_query;
57         END IF;
58
59         RETURN TRUE;
60     END IF;
61
62     -- RAISE NOTICE 'update of biblio.record_entry failed';
63
64     RETURN FALSE;
65
66 END;
67 $$ LANGUAGE PLPGSQL;
68
69
70 SELECT evergreen.upgrade_deps_block_check('0913', :eg_version);
71
72 --stock evergreen comes with 2 merge profiles; move any custom profiles
73 UPDATE vandelay.merge_profile SET id = id + 100 WHERE id > 2;
74
75 --update the same ids in org unit settings, stored in double quotes
76 UPDATE actor.org_unit_setting
77     SET value = '"' || merge_profile_id+100 || '"'
78         FROM (
79                 SELECT id, (regexp_matches(value, '"(\d+)"'))[1]::int as merge_profile_id FROM actor.org_unit_setting
80                 WHERE name IN (
81                         'acq.upload.default.vandelay.low_quality_fall_thru_profile',
82                         'acq.upload.default.vandelay.merge_profile'
83                 )
84         ) as foo
85         WHERE actor.org_unit_setting.id = foo.id
86         AND foo.merge_profile_id > 2;
87
88 --set sequence's next value to 100, or more if necessary
89 SELECT SETVAL('vandelay.merge_profile_id_seq', GREATEST(100, (SELECT MAX(id) FROM vandelay.merge_profile)));
90
91
92 SELECT evergreen.upgrade_deps_block_check('0914', :eg_version);
93
94 CREATE OR REPLACE FUNCTION evergreen.lpad_number_substrings( TEXT, TEXT, INT ) RETURNS TEXT AS $$
95     my $string = shift;            # Source string
96     my $pad = shift;               # string to fill.  Typically '0'. This should be a single character.
97     my $len = shift;               # length of resultant padded field
98     my $find = $len - 1;
99
100     while ($string =~ /(^|\D)(\d{1,$find})($|\D)/) {
101         my $padded = $2;
102         $padded = $pad x ($len - length($padded)) . $padded;
103         $string = $` . $1 . $padded . $3 . $';
104     }
105
106     return $string;
107 $$ LANGUAGE PLPERLU;
108
109 COMMIT;
110
111 -- recompute the various normalized label fields that use lpad_number_substrings()
112 UPDATE biblio.monograph_part SET id = id;
113 UPDATE asset.call_number_prefix SET id = id;
114 UPDATE asset.call_number_suffix SET id = id;