LP#1386347 hold copy map clearing proc user/berick/lp1386347-delete-hold-copy-maps-proc
authorBill Erickson <berickxx@gmail.com>
Mon, 27 Oct 2014 22:05:12 +0000 (18:05 -0400)
committerBill Erickson <berickxx@gmail.com>
Mon, 27 Oct 2014 22:05:12 +0000 (18:05 -0400)
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 <berickxx@gmail.com>
Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm
Open-ILS/src/sql/Pg/090.schema.action.sql
Open-ILS/src/sql/Pg/upgrade/XXXX.schema.hold_copy_map_delete.sql [new file with mode: 0644]

index b308086..bbf1577 100644 (file)
@@ -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;
 }
 
index ad78f50..d358536 100644 (file)
@@ -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 (file)
index 0000000..4dbc5f5
--- /dev/null
@@ -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;