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>
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;
}
-- 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,
--- /dev/null
+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;