LP#1386347: Clear hold-copy-map efficiently
[Evergreen.git] / Open-ILS / src / sql / Pg / 090.schema.action.sql
index ad78f50..d56c340 100644 (file)
@@ -404,6 +404,22 @@ ALTER TABLE action.hold_request ADD CONSTRAINT sms_check CHECK (
 );
 
 
+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();
+
 CREATE INDEX hold_request_target_idx ON action.hold_request (target);
 CREATE INDEX hold_request_usr_idx ON action.hold_request (usr);
 CREATE INDEX hold_request_pickup_lib_idx ON action.hold_request (pickup_lib);