From 10f2e53ae7b6de817e2469e39a3a9e2c0e7413a4 Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Mon, 27 Oct 2014 18:05:12 -0400 Subject: [PATCH] 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 --- Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm | 8 +++----- Open-ILS/src/sql/Pg/090.schema.action.sql | 6 ++++++ .../src/sql/Pg/upgrade/XXXX.schema.hold_copy_map_delete.sql | 10 ++++++++++ 3 files changed, 19 insertions(+), 5 deletions(-) create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.hold_copy_map_delete.sql 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; -- 2.11.0