-- Apply some max_delay values where needed.
-- These defs are unused, but best to apply a max_delay now so we can
-- apply a retention_interval that won't be forgotten later.
-UPDATE action_trigger.event_definition SET max_delay = '10 days'
+UPDATE action_trigger.event_definition
+ SET max_delay = delay + '10 days'::INTERVAL
WHERE id IN (2, 9, 24, 36, 49) AND max_delay IS NULL;
--- most events are purged after a short period
-UPDATE action_trigger.event_definition SET retention_interval = '1 day';
+-- "Hold Expires from Shelf Soon" -- delay=-1 day
+UPDATE action_trigger.event_definition
+ SET max_delay = '0 days' WHERE id = 7;
+
+/*
+SELECT def.id, def.name, def.delay, hook.key
+ FROM action_trigger.event_definition def
+ JOIN action_trigger.hook hook ON (hook.key = def.hook)
+ WHERE hook.passive AND def.max_delay is NULL;
+*/
+
+-- by default purge all active events after 1 day
+UPDATE action_trigger.event_definition
+ SET retention_interval = '1 day'
+ WHERE id IN (
+ SELECT def.id
+ FROM action_trigger.event_definition def
+ JOIN action_trigger.hook hook ON (hook.key = def.hook)
+ WHERE NOT hook.passive
+ );
+
+-- by default, purge all passive events 1 day after the allowed
+-- purge interval has passed.
+UPDATE action_trigger.event_definition
+ SET retention_interval = (max_delay - delay) + '1 day'::INTERVAL
+ WHERE id IN (
+ SELECT def.id
+ FROM action_trigger.event_definition def
+ JOIN action_trigger.hook hook ON (hook.key = def.hook)
+ WHERE hook.passive
+ );
+
-- keep these events forever
UPDATE action_trigger.event_definition
ABS(EXTRACT(EPOCH FROM (NEW.max_delay - NEW.delay))) THEN
RETURN NEW; -- all good
ELSE
- RAISE EXCEPTION 'retention_interval is too short';
+ RAISE EXCEPTION 'retention_interval is too short for def [%] %',
+ NEW.id, NEW.name;
END IF;
ELSE
- RAISE EXCEPTION 'retention_interval requires max_delay';
+ RAISE EXCEPTION 'retention_interval requires max_delay for def [%] %',
+ NEW.id, NEW.name;
END IF;
END;
$_$ LANGUAGE PLPGSQL;