From: Bill Erickson Date: Mon, 27 Oct 2014 22:05:12 +0000 (-0400) Subject: LP#1386347 hold copy map clearing proc X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=refs%2Fheads%2Fuser%2Fberick%2Flp1386347-delete-hold-copy-maps-proc;p=working%2FEvergreen.git LP#1386347 hold copy map clearing proc Remove hold copy map entries via DB stored procedure instead of fetching and deleting each individually during hold capture, hold cancel, and clear shelf processing. Signed-off-by: Bill Erickson --- diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm index b308086c21..bbf1577b09 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm @@ -849,11 +849,9 @@ sub delete_hold_copy_maps { my $editor = shift; my $holdid = shift; - my $maps = $editor->search_action_hold_copy_map({hold=>$holdid}); - for(@$maps) { - $editor->delete_action_hold_copy_map($_) - or return $editor->event; - } + $editor->json_query({from => ['action.clear_hold_copy_maps', $holdid]}) + or return $editor->die_event; + return undef; } diff --git a/Open-ILS/src/sql/Pg/090.schema.action.sql b/Open-ILS/src/sql/Pg/090.schema.action.sql index ad78f50e86..d358536813 100644 --- a/Open-ILS/src/sql/Pg/090.schema.action.sql +++ b/Open-ILS/src/sql/Pg/090.schema.action.sql @@ -454,6 +454,12 @@ CREATE TABLE action.hold_copy_map ( -- CREATE INDEX acm_hold_idx ON action.hold_copy_map (hold); CREATE INDEX acm_copy_idx ON action.hold_copy_map (target_copy); +-- batch hold_copy_map deleter +CREATE OR REPLACE FUNCTION + action.clear_hold_copy_maps (hold_id BIGINT) RETURNS VOID AS $F$ + DELETE FROM action.hold_copy_map WHERE hold = $1; +$F$ LANGUAGE SQL; + CREATE TABLE action.transit_copy ( id SERIAL PRIMARY KEY, source_send_time TIMESTAMP WITH TIME ZONE, diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.hold_copy_map_delete.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.hold_copy_map_delete.sql new file mode 100644 index 0000000000..4dbc5f5d90 --- /dev/null +++ b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.hold_copy_map_delete.sql @@ -0,0 +1,10 @@ +BEGIN; + +--SELECT evergreen.upgrade_deps_block_check('XXXX', :eg_version); + +CREATE OR REPLACE FUNCTION + action.clear_hold_copy_maps (hold_id BIGINT) RETURNS VOID AS $F$ + DELETE FROM action.hold_copy_map WHERE hold = $1; +$F$ LANGUAGE SQL; + +COMMIT;