--- /dev/null
+BEGIN;
+
+SELECT evergreen.upgrade_deps_block_check('0869', :eg_version);
+
+CREATE OR REPLACE FUNCTION action.hold_copy_calculated_proximity_update () RETURNS TRIGGER AS $f$
+BEGIN
+ NEW.proximity := action.hold_copy_calculated_proximity(NEW.hold,NEW.target_copy);
+ RETURN NEW;
+END;
+$f$ LANGUAGE PLPGSQL;
+
+CREATE TRIGGER hold_copy_proximity_update_tgr BEFORE INSERT OR UPDATE ON action.hold_copy_map FOR EACH ROW EXECUTE PROCEDURE action.hold_copy_calculated_proximity_update ();
+
+-- Now, cause the update we need in a HOT-friendly manner (http://pgsql.tapoueh.org/site/html/misc/hot.html)
+UPDATE action.hold_copy_map SET proximity = proximity WHERE proximity IS NULL;
+
+COMMIT;
+
--- /dev/null
+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;
+
--- /dev/null
+BEGIN;
+
+ALTER TABLE acq.fund_debit
+ ADD COLUMN invoice_entry INTEGER
+ REFERENCES acq.invoice_entry (id)
+ ON DELETE SET NULL;
+
+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 OR REPLACE FUNCTION action.hold_copy_calculated_proximity_update () RETURNS TRIGGER AS $f$
+BEGIN
+ NEW.proximity := action.hold_copy_calculated_proximity(NEW.hold,NEW.target_copy);
+ RETURN NEW;
+END;
+$f$ LANGUAGE PLPGSQL;
+
+CREATE TRIGGER hold_copy_proximity_update_tgr
+ BEFORE INSERT OR UPDATE ON action.hold_copy_map FOR EACH ROW
+ EXECUTE PROCEDURE action.hold_copy_calculated_proximity_update ();
+
+
+COMMIT;
+
+-- Run after the main transaction so we can bring the system back up
+-- while it's running. This will take a little while...
+UPDATE action.hold_copy_map SET proximity = proximity WHERE proximity IS NULL;
+
+CREATE INDEX fund_debit_invoice_entry_idx ON acq.fund_debit (invoice_entry);
--- /dev/null
+BEGIN;
+
+DROP INDEX fund_debit_invoice_entry_idx;
+
+ALTER TABLE acq.fund_debit DROP COLUMN invoice_entry;
+
+DROP TRIGGER hold_request_clear_map_tgr ON action.hold_request;
+
+DROP FUNCTION action.hold_request_clear_map();
+
+DROP TRIGGER hold_copy_proximity_update_tgr ON action.hold_copy_map;
+
+DROP FUNCTION action.hold_copy_calculated_proximity_update();
+
+COMMIT;
--- /dev/null
+BEGIN;
+
+-- SELECT evergreen.upgrade_deps_block_check('XXXX', :eg_version);
+
+ALTER TABLE acq.fund_debit
+ ADD COLUMN invoice_entry INTEGER
+ REFERENCES acq.invoice_entry (id)
+ ON DELETE SET NULL;
+
+COMMIT;