]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/sql/Pg/version-upgrade/2.0.2-2.0.3-upgrade-db.sql
Merge branch 'master' of git.evergreen-ils.org:Evergreen-DocBook into doc_consolidati...
[Evergreen.git] / Open-ILS / src / sql / Pg / version-upgrade / 2.0.2-2.0.3-upgrade-db.sql
1 BEGIN;
2
3 INSERT INTO config.upgrade_log (version) VALUES ('2.0.3');
4 INSERT INTO config.upgrade_log (version) VALUES ('0490'); -- miker
5
6 CREATE OR REPLACE FUNCTION asset.staff_ou_record_copy_count (org INT, rid BIGINT) RETURNS TABLE (depth INT, org_unit INT, visible BIGINT, available BIGINT, unshadow BIGINT, transcendant INT) AS $f$
7 DECLARE         
8     ans RECORD; 
9     trans INT;
10 BEGIN           
11     SELECT 1 INTO trans FROM biblio.record_entry b JOIN config.bib_source src ON (b.source = src.id) WHERE src.transcendant AND b.id = rid;
12
13     FOR ans IN SELECT u.id, t.depth FROM actor.org_unit_ancestors(org) AS u JOIN actor.org_unit_type t ON (u.ou_type = t.id) LOOP
14         RETURN QUERY
15         SELECT  ans.depth,
16                 ans.id,
17                 COUNT( cp.id ),
18                 SUM( CASE WHEN cp.status IN (0,7,12) THEN 1 ELSE 0 END ),
19                 COUNT( cp.id ),
20                 trans
21           FROM
22                 actor.org_unit_descendants(ans.id) d
23                 JOIN asset.copy cp ON (cp.circ_lib = d.id AND NOT cp.deleted)
24                 JOIN asset.call_number cn ON (cn.record = rid AND cn.id = cp.call_number AND NOT cn.deleted)
25           GROUP BY 1,2,6;
26
27         IF NOT FOUND THEN
28             RETURN QUERY SELECT ans.depth, ans.id, 0::BIGINT, 0::BIGINT, 0::BIGINT, trans;
29         END IF;
30
31     END LOOP;
32
33     RETURN;
34 END;
35 $f$ LANGUAGE PLPGSQL;
36
37 CREATE OR REPLACE FUNCTION asset.staff_lasso_record_copy_count (i_lasso INT, rid BIGINT) RETURNS TABLE (depth INT, org_unit INT, visible BIGINT, available BIGINT, unshadow BIGINT, transcendant INT) AS $f$
38 DECLARE
39     ans RECORD;
40     trans INT;
41 BEGIN
42     SELECT 1 INTO trans FROM biblio.record_entry b JOIN config.bib_source src ON (b.source = src.id) WHERE src.transcendant AND b.id = rid;
43
44     FOR ans IN SELECT u.org_unit AS id FROM actor.org_lasso_map AS u WHERE lasso = i_lasso LOOP
45         RETURN QUERY
46         SELECT  -1,
47                 ans.id,
48                 COUNT( cp.id ),
49                 SUM( CASE WHEN cp.status IN (0,7,12) THEN 1 ELSE 0 END ),
50                 COUNT( cp.id ),
51                 trans
52           FROM
53                 actor.org_unit_descendants(ans.id) d
54                 JOIN asset.copy cp ON (cp.circ_lib = d.id AND NOT cp.deleted)
55                 JOIN asset.call_number cn ON (cn.record = rid AND cn.id = cp.call_number AND NOT cn.deleted)
56           GROUP BY 1,2,6;
57
58         IF NOT FOUND THEN
59             RETURN QUERY SELECT ans.depth, ans.id, 0::BIGINT, 0::BIGINT, 0::BIGINT, trans;
60         END IF;
61
62     END LOOP;
63
64     RETURN;
65 END;
66 $f$ LANGUAGE PLPGSQL;
67
68 CREATE OR REPLACE FUNCTION asset.staff_ou_metarecord_copy_count (org INT, rid BIGINT) RETURNS TABLE (depth INT, org_unit INT, visible BIGINT, available BIGINT, unshadow BIGINT, transcendant INT) AS $f$
69 DECLARE         
70     ans RECORD; 
71     trans INT;
72 BEGIN
73     SELECT 1 INTO trans FROM biblio.record_entry b JOIN config.bib_source src ON (b.source = src.id) WHERE src.transcendant AND b.id = rid;
74
75     FOR ans IN SELECT u.id, t.depth FROM actor.org_unit_ancestors(org) AS u JOIN actor.org_unit_type t ON (u.ou_type = t.id) LOOP
76         RETURN QUERY
77         SELECT  ans.depth,
78                 ans.id,
79                 COUNT( cp.id ),
80                 SUM( CASE WHEN cp.status IN (0,7,12) THEN 1 ELSE 0 END ),
81                 COUNT( cp.id ),
82                 trans
83           FROM
84                 actor.org_unit_descendants(ans.id) d
85                 JOIN asset.copy cp ON (cp.circ_lib = d.id AND NOT cp.deleted)
86                 JOIN asset.call_number cn ON (cn.record = rid AND cn.id = cp.call_number AND NOT cn.deleted)
87                 JOIN metabib.metarecord_source_map m ON (m.source = cn.record)
88           GROUP BY 1,2,6;
89
90         IF NOT FOUND THEN
91             RETURN QUERY SELECT ans.depth, ans.id, 0::BIGINT, 0::BIGINT, 0::BIGINT, trans;
92         END IF;
93
94     END LOOP;
95
96     RETURN;
97 END;
98 $f$ LANGUAGE PLPGSQL;
99
100 CREATE OR REPLACE FUNCTION asset.staff_lasso_metarecord_copy_count (i_lasso INT, rid BIGINT) RETURNS TABLE (depth INT, org_unit INT, visible BIGINT, available BIGINT, unshadow BIGINT, transcendant INT) AS $f$
101 DECLARE
102     ans RECORD;
103     trans INT;
104 BEGIN
105     SELECT 1 INTO trans FROM biblio.record_entry b JOIN config.bib_source src ON (b.source = src.id) WHERE src.transcendant AND b.id = rid;
106
107     FOR ans IN SELECT u.org_unit AS id FROM actor.org_lasso_map AS u WHERE lasso = i_lasso LOOP
108         RETURN QUERY
109         SELECT  -1,
110                 ans.id,
111                 COUNT( cp.id ),
112                 SUM( CASE WHEN cp.status IN (0,7,12) THEN 1 ELSE 0 END ),
113                 COUNT( cp.id ),
114                 trans
115           FROM
116                 actor.org_unit_descendants(ans.id) d
117                 JOIN asset.copy cp ON (cp.circ_lib = d.id AND NOT cp.deleted)
118                 JOIN asset.call_number cn ON (cn.record = rid AND cn.id = cp.call_number AND NOT cn.deleted)
119                 JOIN metabib.metarecord_source_map m ON (m.source = cn.record)
120           GROUP BY 1,2,6;
121
122         IF NOT FOUND THEN
123             RETURN QUERY SELECT ans.depth, ans.id, 0::BIGINT, 0::BIGINT, 0::BIGINT, trans;
124         END IF;
125
126     END LOOP;
127
128     RETURN;
129 END;
130 $f$ LANGUAGE PLPGSQL;
131
132 INSERT INTO config.upgrade_log (version) VALUES ('0491'); -- dbwells
133
134 CREATE OR REPLACE FUNCTION maintain_901 () RETURNS TRIGGER AS $func$
135 DECLARE
136     use_id_for_tcn BOOLEAN;
137 BEGIN
138     -- Remove any existing 901 fields before we insert the authoritative one
139     NEW.marc := REGEXP_REPLACE(NEW.marc, E'<datafield[^>]*?tag="901".+?</datafield>', '', 'g');
140
141     IF TG_TABLE_SCHEMA = 'biblio' THEN
142         -- Set TCN value to record ID?
143         SELECT enabled FROM config.global_flag INTO use_id_for_tcn
144             WHERE name = 'cat.bib.use_id_for_tcn';
145
146         IF use_id_for_tcn = 't' THEN
147             NEW.tcn_value := NEW.id;
148         END IF;
149
150         NEW.marc := REGEXP_REPLACE(
151             NEW.marc,
152             E'(</(?:[^:]*?:)?record>)',
153             E'<datafield tag="901" ind1=" " ind2=" ">' ||
154                 '<subfield code="a">' || NEW.tcn_value || E'</subfield>' ||
155                 '<subfield code="b">' || NEW.tcn_source || E'</subfield>' ||
156                 '<subfield code="c">' || NEW.id || E'</subfield>' ||
157                 '<subfield code="t">' || TG_TABLE_SCHEMA || E'</subfield>' ||
158                 CASE WHEN NEW.owner IS NOT NULL THEN '<subfield code="o">' || NEW.owner || E'</subfield>' ELSE '' END ||
159                 CASE WHEN NEW.share_depth IS NOT NULL THEN '<subfield code="d">' || NEW.share_depth || E'</subfield>' ELSE '' END ||
160              E'</datafield>\\1'
161         );
162     ELSIF TG_TABLE_SCHEMA = 'authority' THEN
163         NEW.marc := REGEXP_REPLACE(
164             NEW.marc,
165             E'(</(?:[^:]*?:)?record>)',
166             E'<datafield tag="901" ind1=" " ind2=" ">' ||
167                 '<subfield code="c">' || NEW.id || E'</subfield>' ||
168                 '<subfield code="t">' || TG_TABLE_SCHEMA || E'</subfield>' ||
169              E'</datafield>\\1'
170         );
171     ELSIF TG_TABLE_SCHEMA = 'serial' THEN
172         NEW.marc := REGEXP_REPLACE(
173             NEW.marc,
174             E'(</(?:[^:]*?:)?record>)',
175             E'<datafield tag="901" ind1=" " ind2=" ">' ||
176                 '<subfield code="c">' || NEW.id || E'</subfield>' ||
177                 '<subfield code="t">' || TG_TABLE_SCHEMA || E'</subfield>' ||
178                 '<subfield code="o">' || NEW.owning_lib || E'</subfield>' ||
179                 CASE WHEN NEW.record IS NOT NULL THEN '<subfield code="r">' || NEW.record || E'</subfield>' ELSE '' END ||
180              E'</datafield>\\1'
181         );
182     ELSE
183         NEW.marc := REGEXP_REPLACE(
184             NEW.marc,
185             E'(</(?:[^:]*?:)?record>)',
186             E'<datafield tag="901" ind1=" " ind2=" ">' ||
187                 '<subfield code="c">' || NEW.id || E'</subfield>' ||
188                 '<subfield code="t">' || TG_TABLE_SCHEMA || E'</subfield>' ||
189              E'</datafield>\\1'
190         );
191     END IF;
192
193     RETURN NEW;
194 END;
195 $func$ LANGUAGE PLPGSQL;
196
197 INSERT INTO config.upgrade_log (version) VALUES ('0492'); --miker
198 UPDATE asset.call_number SET id = id;
199
200 INSERT INTO config.upgrade_log (version) VALUES ('0494'); -- dbs
201
202 UPDATE config.metabib_field
203     SET xpath = $$//mods32:mods/mods32:subject$$
204     WHERE field_class = 'subject' AND name = 'complete';
205
206 UPDATE config.metabib_field
207     SET xpath = $$//marc:datafield[@tag='099']$$
208     WHERE field_class = 'identifier' AND name = 'bibcn';
209
210 INSERT INTO config.upgrade_log (version) VALUES ('0496'); -- dbs
211
212 UPDATE config.metabib_field
213     SET xpath = $$//marc:datafield[@tag='024' and @ind1='1']/marc:subfield[@code='a' or @code='z']$$
214     WHERE field_class = 'identifier' AND name = 'upc';
215
216 UPDATE config.metabib_field
217     SET xpath = $$//marc:datafield[@tag='024' and @ind1='2']/marc:subfield[@code='a' or @code='z']$$
218     WHERE field_class = 'identifier' AND name = 'ismn';
219
220 UPDATE config.metabib_field
221     SET xpath = $$//marc:datafield[@tag='024' and @ind1='3']/marc:subfield[@code='a' or @code='z']$$
222     WHERE field_class = 'identifier' AND name = 'ean';
223
224 UPDATE config.metabib_field
225     SET xpath = $$//marc:datafield[@tag='024' and @ind1='0']/marc:subfield[@code='a' or @code='z']$$
226     WHERE field_class = 'identifier' AND name = 'isrc';
227
228 UPDATE config.metabib_field
229     SET xpath = $$//marc:datafield[@tag='024' and @ind1='4']/marc:subfield[@code='a' or @code='z']$$
230     WHERE field_class = 'identifier' AND name = 'sici';
231
232 COMMIT;