From: Ben Shum Date: Tue, 11 Nov 2014 01:27:11 +0000 (-0500) Subject: LP#778989: Stamping upgrade script for copy location trigger X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=b19d1c07c4ea17f9c747713f08afc451d6e8db35;p=evergreen%2Fpines.git LP#778989: Stamping upgrade script for copy location trigger Signed-off-by: Ben Shum --- diff --git a/Open-ILS/src/sql/Pg/002.schema.config.sql b/Open-ILS/src/sql/Pg/002.schema.config.sql index 5692c4092d..ffe5cdbeb0 100644 --- a/Open-ILS/src/sql/Pg/002.schema.config.sql +++ b/Open-ILS/src/sql/Pg/002.schema.config.sql @@ -91,7 +91,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 ('0895', :eg_version); -- miker/csharp/bshum +INSERT INTO config.upgrade_log (version, applied_to) VALUES ('0896', :eg_version); -- tsbere/csharp/bshum CREATE TABLE config.bib_source ( id SERIAL PRIMARY KEY, diff --git a/Open-ILS/src/sql/Pg/upgrade/0896.correct_copy_location.sql b/Open-ILS/src/sql/Pg/upgrade/0896.correct_copy_location.sql new file mode 100644 index 0000000000..a48bb8801d --- /dev/null +++ b/Open-ILS/src/sql/Pg/upgrade/0896.correct_copy_location.sql @@ -0,0 +1,32 @@ +BEGIN; + +SELECT evergreen.upgrade_deps_block_check('0896', :eg_version); + +CREATE OR REPLACE FUNCTION asset.acp_location_fixer() +RETURNS TRIGGER AS $$ +DECLARE + new_copy_location INT; +BEGIN + IF (TG_OP = 'UPDATE') THEN + IF NEW.location = OLD.location AND NEW.call_number = OLD.call_number AND NEW.circ_lib = OLD.circ_lib THEN + RETURN NEW; + END IF; + END IF; + SELECT INTO new_copy_location acpl.id FROM asset.copy_location acpl JOIN actor.org_unit_ancestors_distance((SELECT owning_lib FROM asset.call_number WHERE id = NEW.call_number)) aouad ON acpl.owning_lib = aouad.id WHERE name = (SELECT name FROM asset.copy_location WHERE id = NEW.location) ORDER BY distance LIMIT 1; + IF new_copy_location IS NULL THEN + SELECT INTO new_copy_location acpl.id FROM asset.copy_location acpl JOIN actor.org_unit_ancestors_distance(NEW.circ_lib) aouad ON acpl.owning_lib = aouad.id WHERE name = (SELECT name FROM asset.copy_location WHERE id = NEW.location) ORDER BY distance LIMIT 1; + END IF; + IF new_copy_location IS NOT NULL THEN + NEW.location = new_copy_location; + END IF; + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +DROP TRIGGER IF EXISTS acp_location_fixer_trig ON asset.copy; + +CREATE TRIGGER acp_location_fixer_trig + BEFORE INSERT OR UPDATE OF location, call_number, circ_lib ON asset.copy + FOR EACH ROW EXECUTE PROCEDURE asset.acp_location_fixer(); + +COMMIT; diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.correct_copy_location.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.correct_copy_location.sql deleted file mode 100644 index f2d4011a37..0000000000 --- a/Open-ILS/src/sql/Pg/upgrade/XXXX.correct_copy_location.sql +++ /dev/null @@ -1,27 +0,0 @@ -CREATE OR REPLACE FUNCTION asset.acp_location_fixer() -RETURNS TRIGGER AS $$ -DECLARE - new_copy_location INT; -BEGIN - IF (TG_OP = 'UPDATE') THEN - IF NEW.location = OLD.location AND NEW.call_number = OLD.call_number AND NEW.circ_lib = OLD.circ_lib THEN - RETURN NEW; - END IF; - END IF; - SELECT INTO new_copy_location acpl.id FROM asset.copy_location acpl JOIN actor.org_unit_ancestors_distance((SELECT owning_lib FROM asset.call_number WHERE id = NEW.call_number)) aouad ON acpl.owning_lib = aouad.id WHERE name = (SELECT name FROM asset.copy_location WHERE id = NEW.location) ORDER BY distance LIMIT 1; - IF new_copy_location IS NULL THEN - SELECT INTO new_copy_location acpl.id FROM asset.copy_location acpl JOIN actor.org_unit_ancestors_distance(NEW.circ_lib) aouad ON acpl.owning_lib = aouad.id WHERE name = (SELECT name FROM asset.copy_location WHERE id = NEW.location) ORDER BY distance LIMIT 1; - END IF; - IF new_copy_location IS NOT NULL THEN - NEW.location = new_copy_location; - END IF; - RETURN NEW; -END; -$$ LANGUAGE plpgsql; - -DROP TRIGGER IF EXISTS acp_location_fixer_trig ON asset.copy; - -CREATE TRIGGER acp_location_fixer_trig - BEFORE INSERT OR UPDATE OF location, call_number, circ_lib ON asset.copy - FOR EACH ROW EXECUTE PROCEDURE asset.acp_location_fixer(); -