LP#1386347: Clear hold-copy-map efficiently
authorMike Rylander <mrylander@gmail.com>
Wed, 29 Oct 2014 14:37:29 +0000 (10:37 -0400)
committerBill Erickson <berickxx@gmail.com>
Thu, 21 Mar 2019 19:46:23 +0000 (15:46 -0400)
When capturing or canceling a hold, we can clear the hold-copy-map
with a trigger, saving the time of the user, and making the business
logic simpler.

LP#1386347 copy map trigger wants a RETURN

Signed-off-by: Mike Rylander <mrylander@gmail.com>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Conflicts:
Open-ILS/src/sql/Pg/090.schema.action.sql

Open-ILS/src/sql/Pg/upgrade/XXXX.schema.clear_hold_copy_map.sql [new file with mode: 0644]

diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.clear_hold_copy_map.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.clear_hold_copy_map.sql
new file mode 100644 (file)
index 0000000..ee0191d
--- /dev/null
@@ -0,0 +1,20 @@
+BEGIN;
+
+CREATE OR REPLACE FUNCTION action.hold_request_clear_map () RETURNS TRIGGER AS $$
+BEGIN
+  DELETE FROM action.hold_copy_map WHERE hold = NEW.id;
+  RETURN NEW;
+END;
+$$ LANGUAGE PLPGSQL;
+
+CREATE TRIGGER hold_request_clear_map_tgr
+    AFTER UPDATE ON action.hold_request
+    FOR EACH ROW
+    WHEN (
+        (NEW.cancel_time IS NOT NULL AND OLD.cancel_time IS NULL)
+        OR (NEW.capture_time IS NOT NULL AND OLD.capture_time IS NULL)
+    )
+    EXECUTE PROCEDURE action.hold_request_clear_map();
+
+COMMIT;
+