From: Mike Rylander Date: Mon, 11 Mar 2013 20:22:38 +0000 (-0400) Subject: Stamping upgrade for serials harmonization X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=0cbff297cc45f057105a9779e96bd1cc427a6c6b;p=evergreen%2Fpines.git Stamping upgrade for serials harmonization Signed-off-by: Mike Rylander --- diff --git a/Open-ILS/src/sql/Pg/002.schema.config.sql b/Open-ILS/src/sql/Pg/002.schema.config.sql index fdc93e97bd..8bbae74dce 100644 --- a/Open-ILS/src/sql/Pg/002.schema.config.sql +++ b/Open-ILS/src/sql/Pg/002.schema.config.sql @@ -87,7 +87,7 @@ CREATE TRIGGER no_overlapping_deps BEFORE INSERT OR UPDATE ON config.db_patch_dependencies FOR EACH ROW EXECUTE PROCEDURE evergreen.array_overlap_check ('deprecates'); -INSERT INTO config.upgrade_log (version, applied_to) VALUES ('0766', :eg_version); -- gmcharlt/miker +INSERT INTO config.upgrade_log (version, applied_to) VALUES ('0767', :eg_version); -- senator/miker CREATE TABLE config.bib_source ( id SERIAL PRIMARY KEY, diff --git a/Open-ILS/src/sql/Pg/upgrade/0767.schema.serials-holding-code-test-improved.sql b/Open-ILS/src/sql/Pg/upgrade/0767.schema.serials-holding-code-test-improved.sql new file mode 100644 index 0000000000..378bdfc289 --- /dev/null +++ b/Open-ILS/src/sql/Pg/upgrade/0767.schema.serials-holding-code-test-improved.sql @@ -0,0 +1,38 @@ +BEGIN; + +SELECT evergreen.upgrade_deps_block_check('0767', :eg_version); + +CREATE OR REPLACE FUNCTION evergreen.could_be_serial_holding_code(TEXT) RETURNS BOOL AS $$ + use JSON::XS; + use MARC::Field; + + eval { + my $holding_code = (new JSON::XS)->decode(shift); + new MARC::Field('999', @$holding_code); + }; + return 0 if $@; + # verify that subfield labels are exactly one character long + foreach (keys %{ { @$holding_code } }) { + return 0 if length($_) != 1; + } + return 1; +$$ LANGUAGE PLPERLU; + +COMMENT ON FUNCTION evergreen.could_be_serial_holding_code(TEXT) IS + 'Return true if parameter is valid JSON representing an array that at minimu +m doesn''t make MARC::Field balk and only has subfield labels exactly one character long. Otherwise false.'; + + +-- This UPDATE throws away data, but only bad data that makes things break +-- anyway. +UPDATE serial.issuance + SET holding_code = NULL + WHERE NOT could_be_serial_holding_code(holding_code); + +ALTER TABLE serial.issuance + DROP CONSTRAINT IF EXISTS issuance_holding_code_check; + +ALTER TABLE serial.issuance + ADD CHECK (holding_code IS NULL OR could_be_serial_holding_code(holding_code)); + +COMMIT; diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.serials-holding-code-test-improved.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.serials-holding-code-test-improved.sql deleted file mode 100644 index d1c3c38d98..0000000000 --- a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.serials-holding-code-test-improved.sql +++ /dev/null @@ -1,38 +0,0 @@ -BEGIN; - -SELECT evergreen.upgrade_deps_block_check('XXXX', :eg_version); - -CREATE OR REPLACE FUNCTION evergreen.could_be_serial_holding_code(TEXT) RETURNS BOOL AS $$ - use JSON::XS; - use MARC::Field; - - eval { - my $holding_code = (new JSON::XS)->decode(shift); - new MARC::Field('999', @$holding_code); - }; - return 0 if $@; - # verify that subfield labels are exactly one character long - foreach (keys %{ { @$holding_code } }) { - return 0 if length($_) != 1; - } - return 1; -$$ LANGUAGE PLPERLU; - -COMMENT ON FUNCTION evergreen.could_be_serial_holding_code(TEXT) IS - 'Return true if parameter is valid JSON representing an array that at minimu -m doesn''t make MARC::Field balk and only has subfield labels exactly one character long. Otherwise false.'; - - --- This UPDATE throws away data, but only bad data that makes things break --- anyway. -UPDATE serial.issuance - SET holding_code = NULL - WHERE NOT could_be_serial_holding_code(holding_code); - -ALTER TABLE serial.issuance - DROP CONSTRAINT IF EXISTS issuance_holding_code_check; - -ALTER TABLE serial.issuance - ADD CHECK (holding_code IS NULL OR could_be_serial_holding_code(holding_code)); - -COMMIT;