]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/0710.schema.stricter-could-be-holding-code.sql
LP#1838995: (follow-up) adjust ID for new permission
[Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 0710.schema.stricter-could-be-holding-code.sql
1 BEGIN;
2
3 SELECT evergreen.upgrade_deps_block_check('0710', :eg_version);
4
5 CREATE OR REPLACE FUNCTION evergreen.could_be_serial_holding_code(TEXT) RETURNS BOOL AS $$
6     use JSON::XS;
7     use MARC::Field;
8
9     eval {
10         my $holding_code = (new JSON::XS)->decode(shift);
11         new MARC::Field('999', @$holding_code);
12     };
13     return $@ ? 0 : 1;
14 $$ LANGUAGE PLPERLU;
15
16 -- This throws away data, but only data that causes breakage anyway.
17 UPDATE serial.issuance
18     SET holding_code = NULL
19     WHERE NOT could_be_serial_holding_code(holding_code);
20
21 ALTER TABLE serial.issuance
22     DROP CONSTRAINT IF EXISTS issuance_holding_code_check;
23
24 ALTER TABLE serial.issuance
25     ADD CHECK (holding_code IS NULL OR could_be_serial_holding_code(holding_code));
26
27 COMMIT;