]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/sql/Pg/version-upgrade/2.12.1-2.12.2-upgrade-db.sql
forward-port 2.12.1-2.12.2 schema update
[working/Evergreen.git] / Open-ILS / src / sql / Pg / version-upgrade / 2.12.1-2.12.2-upgrade-db.sql
1 --Upgrade Script for 2.12.1 to 2.12.2
2 \set eg_version '''2.12.2'''
3 BEGIN;
4 INSERT INTO config.upgrade_log (version, applied_to) VALUES ('2.12.2', :eg_version);
5 -- Evergreen DB patch XXXX.data.fix_long_overdue_perm.sql
6 --
7 -- Update permission 549 to have a "code" value that matches what
8 -- the Perl code references
9 --
10
11
12 -- check whether patch can be applied
13 SELECT evergreen.upgrade_deps_block_check('1037', :eg_version); -- jeff
14
15 -- For some time now, the database seed data / upgrade scripts have created
16 -- a permission with id 549 and code COPY_STATUS_LONGOVERDUE.override, while
17 -- the Perl code references a permission with code
18 -- COPY_STATUS_LONG_OVERDUE.override
19 --
20 -- Below, we attempt to handle at least three possible database states:
21 --
22 -- 1) no corrective action has been taken, permission exists with id 549 and
23 --    code COPY_STATUS_LONGOVERDUE.override
24 --
25 -- 2) permission with id 549 has already been updated to have code
26 --    COPY_STATUS_LONG_OVERDUE.override
27 --
28 -- 3) new permission with unknown id and code COPY_STATUS_LONG_OVERDUE.override
29 --    has been added, and potentially assigned to users/groups
30 --
31 -- In the case of 3, users and groups may have been assigned both perm id 549
32 -- and the local permission of unknown id.
33 --
34 -- The desired end result is that we should have a permission.perm_list
35 -- entry with id 549 and code COPY_STATUS_LONG_OVERDUE.override,
36 -- any locally-created permission with that same code but a different id
37 -- is deleted, and any users or groups that had been granted that locally-created
38 -- permission (by id) have been granted permission id 549 if not already granted.
39 --
40 -- If for some reason the permission at id 549 has an unexpected value for "code",
41 -- the end result of this upgrade script should be a no-op.
42
43 -- grant permission 549 to any group that
44 -- has a potentially locally-added perm
45 -- with code COPY_STATUS_LONG_OVERDUE.override
46 WITH new_grp_perms AS (
47 SELECT grp, 549 AS perm, depth, grantable
48 FROM permission.grp_perm_map pgpm
49 JOIN permission.perm_list ppl ON ppl.id = pgpm.perm
50 WHERE ppl.code = 'COPY_STATUS_LONG_OVERDUE.override'
51 -- short circuit if perm id 549 exists and doesn't have the expected code
52 AND EXISTS (SELECT 1 FROM permission.perm_list ppl WHERE ppl.id = 549 and ppl.code = 'COPY_STATUS_LONGOVERDUE.override')
53 -- don't try to assign perm 549 if already assigned
54 AND NOT EXISTS (SELECT 1 FROM permission.grp_perm_map pgpm2 WHERE pgpm2.grp = pgpm.grp AND pgpm2.perm = 549)
55 )
56 INSERT INTO permission.grp_perm_map
57 (grp, perm, depth, grantable)
58 SELECT grp, perm, depth, grantable
59 FROM new_grp_perms;
60
61 -- grant permission 549 to any user that
62 -- has a potentially locally-added perm
63 -- with code COPY_STATUS_LONG_OVERDUE.override
64 WITH new_usr_perms AS (
65 SELECT usr, 549 AS perm, depth, grantable
66 FROM permission.usr_perm_map pupm
67 JOIN permission.perm_list ppl ON ppl.id = pupm.perm
68 WHERE ppl.code = 'COPY_STATUS_LONG_OVERDUE.override'
69 -- short circuit if perm id 549 exists and doesn't have the expected code
70 AND EXISTS (SELECT 1 FROM permission.perm_list ppl WHERE ppl.id = 549 and ppl.code = 'COPY_STATUS_LONGOVERDUE.override')
71 -- don't try to assign perm 549 if already assigned
72 AND NOT EXISTS (SELECT 1 FROM permission.usr_perm_map pupm2 WHERE pupm2.usr = pupm.usr AND pupm2.perm = 549)
73 )
74 INSERT INTO permission.usr_perm_map
75 (usr, perm, depth, grantable)
76 SELECT usr, perm, depth, grantable
77 FROM new_usr_perms;
78
79 -- delete any group assignments of the locally-added perm
80 DELETE FROM permission.grp_perm_map
81 WHERE perm = (SELECT id FROM permission.perm_list WHERE code = 'COPY_STATUS_LONG_OVERDUE.override' AND id <> 549)
82 -- short circuit if perm id 549 exists and doesn't have the expected code
83 AND EXISTS (SELECT 1 FROM permission.perm_list ppl WHERE ppl.id = 549 and ppl.code = 'COPY_STATUS_LONGOVERDUE.override');
84
85 -- delete any user assignments of the locally-added perm
86 DELETE FROM permission.usr_perm_map
87 WHERE perm = (SELECT id FROM permission.perm_list WHERE code = 'COPY_STATUS_LONG_OVERDUE.override' AND id <> 549)
88 -- short circuit if perm id 549 exists and doesn't have the expected code
89 AND EXISTS (SELECT 1 FROM permission.perm_list ppl WHERE ppl.id = 549 and ppl.code = 'COPY_STATUS_LONGOVERDUE.override');
90
91 -- delete the locally-added perm, if any
92 DELETE FROM permission.perm_list
93 WHERE code = 'COPY_STATUS_LONG_OVERDUE.override'
94 AND id <> 549
95 -- short circuit if perm id 549 exists and doesn't have the expected code
96 AND EXISTS (SELECT 1 FROM permission.perm_list ppl WHERE ppl.id = 549 and ppl.code = 'COPY_STATUS_LONGOVERDUE.override');
97
98 -- update perm id 549 to the correct code, if not already
99 UPDATE permission.perm_list
100 SET code = 'COPY_STATUS_LONG_OVERDUE.override'
101 WHERE id = 549
102 AND code = 'COPY_STATUS_LONGOVERDUE.override';
103
104
105 SELECT evergreen.upgrade_deps_block_check('1038', :eg_version); 
106
107 -- This function was replaced back in 2011, but never made it
108 -- into an upgrade script.  Here it is, nearly 6 years later.
109
110 CREATE OR REPLACE FUNCTION vandelay.auto_overlay_bib_record ( import_id BIGINT, merge_profile_id INT ) RETURNS BOOL AS $$
111 DECLARE
112     eg_id           BIGINT;
113     match_count     INT;
114 BEGIN
115
116     PERFORM * FROM vandelay.queued_bib_record WHERE import_time IS NOT NULL AND id = import_id;
117
118     IF FOUND THEN
119         -- RAISE NOTICE 'already imported, cannot auto-overlay'
120         RETURN FALSE;
121     END IF;
122
123     SELECT COUNT(*) INTO match_count FROM vandelay.bib_match WHERE queued_record = import_id;
124
125     IF match_count <> 1 THEN
126         -- RAISE NOTICE 'not an exact match';
127         RETURN FALSE;
128     END IF;
129
130     -- Check that the one match is on the first 901c
131     SELECT  m.eg_record INTO eg_id
132       FROM  vandelay.queued_bib_record q
133             JOIN vandelay.bib_match m ON (m.queued_record = q.id)
134       WHERE q.id = import_id
135             AND m.eg_record = oils_xpath_string('//*[@tag="901"]/*[@code="c"][1]',marc)::BIGINT;
136
137     IF NOT FOUND THEN
138         -- RAISE NOTICE 'not a 901c match';
139         RETURN FALSE;
140     END IF;
141
142     RETURN vandelay.overlay_bib_record( import_id, eg_id, merge_profile_id );
143 END;
144 $$ LANGUAGE PLPGSQL;
145
146
147 SELECT evergreen.upgrade_deps_block_check('1039', :eg_version); -- jeffdavis/gmcharlt
148
149 UPDATE config.org_unit_setting_type
150 SET datatype = 'link', fm_class = 'vms'
151 WHERE name = 'vandelay.default_match_set'
152 AND   datatype = 'string'
153 AND   fm_class IS NULL;
154
155 \echo Existing vandelay.default_match_set that do not
156 \echo correspond to match sets
157 SELECT aou.shortname, aous.value
158 FROM   actor.org_unit_setting aous
159 JOIN   actor.org_unit aou ON (aou.id = aous.org_unit)
160 WHERE  aous.name = 'vandelay.default_match_set'
161 AND    (
162   value !~ '^"[0-9]+"$'
163   OR
164     oils_json_to_text(aous.value)::INT NOT IN (
165       SELECT id FROM vandelay.match_set
166     )
167 );
168
169 \echo And now deleting the bad values, as otherwise they
170 \echo will break the Library Settings Editor.
171 DELETE
172 FROM actor.org_unit_setting aous
173 WHERE  aous.name = 'vandelay.default_match_set'
174 AND    (
175   value !~ '^"[0-9]+"$'
176   OR
177     oils_json_to_text(aous.value)::INT NOT IN (
178       SELECT id FROM vandelay.match_set
179     )
180 );
181
182
183 SELECT evergreen.upgrade_deps_block_check('1040', :eg_version);
184
185 CREATE INDEX edi_message_remote_file_idx ON acq.edi_message (evergreen.lowercase(remote_file));
186
187 COMMIT;