diff --git a/migrations/20220713122907_fix-clear_all-keep-nil-message.down.sql b/migrations/20220713122907_fix-clear_all-keep-nil-message.down.sql new file mode 100644 index 0000000..d2f607c --- /dev/null +++ b/migrations/20220713122907_fix-clear_all-keep-nil-message.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/migrations/20220713122907_fix-clear_all-keep-nil-message.up.sql b/migrations/20220713122907_fix-clear_all-keep-nil-message.up.sql new file mode 100644 index 0000000..4dd1f0b --- /dev/null +++ b/migrations/20220713122907_fix-clear_all-keep-nil-message.up.sql @@ -0,0 +1,29 @@ +CREATE OR REPLACE FUNCTION mq_clear(channel_names TEXT[]) +RETURNS VOID AS $$ +BEGIN + WITH deleted_ids AS ( + DELETE FROM mq_msgs + WHERE channel_name = ANY(channel_names) + AND id != uuid_nil() + RETURNING id + ) + DELETE FROM mq_payloads WHERE id IN (SELECT id FROM deleted_ids); +END; +$$ LANGUAGE plpgsql; +COMMENT ON FUNCTION mq_clear IS + 'Deletes all messages with corresponding payloads from a list of channel names'; + + +CREATE OR REPLACE FUNCTION mq_clear_all() +RETURNS VOID AS $$ +BEGIN + WITH deleted_ids AS ( + DELETE FROM mq_msgs + WHERE id != uuid_nil() + RETURNING id + ) + DELETE FROM mq_payloads WHERE id IN (SELECT id FROM deleted_ids); +END; +$$ LANGUAGE plpgsql; +COMMENT ON FUNCTION mq_clear_all IS + 'Deletes all messages with corresponding payloads';