+11
-11
api/migrations/004_sqlxmq_setup.sql
+11
-11
api/migrations/004_sqlxmq_setup.sql
···
37
37
channel_name TEXT NOT NULL,
38
38
channel_args TEXT NOT NULL,
39
39
commit_interval INTERVAL,
40
-
after_message_id UUID DEFAULT uuid_nil() REFERENCES mq_msgs(id) ON DELETE SET DEFAULT
40
+
after_message_id UUID DEFAULT '00000000-0000-0000-0000-000000000000'::uuid REFERENCES mq_msgs(id) ON DELETE SET DEFAULT
41
41
);
42
42
43
43
-- Insert dummy message so that the 'nil' UUID can be referenced
44
-
INSERT INTO mq_msgs (id, channel_name, channel_args, after_message_id) VALUES (uuid_nil(), '', '', NULL);
44
+
INSERT INTO mq_msgs (id, channel_name, channel_args, after_message_id) VALUES ('00000000-0000-0000-0000-000000000000'::uuid, '', '', NULL);
45
45
46
46
-- Internal helper function to check that a UUID is neither NULL nor NIL
47
47
CREATE FUNCTION mq_uuid_exists(
48
48
id UUID
49
49
) RETURNS BOOLEAN AS $$
50
-
SELECT id IS NOT NULL AND id != uuid_nil()
50
+
SELECT id IS NOT NULL AND id != '00000000-0000-0000-0000-000000000000'::uuid
51
51
$$ LANGUAGE SQL IMMUTABLE;
52
52
53
53
-- Index for polling
54
-
CREATE INDEX ON mq_msgs(channel_name, channel_args, attempt_at) WHERE id != uuid_nil() AND NOT mq_uuid_exists(after_message_id);
54
+
CREATE INDEX ON mq_msgs(channel_name, channel_args, attempt_at) WHERE id != '00000000-0000-0000-0000-000000000000'::uuid AND NOT mq_uuid_exists(after_message_id);
55
55
-- Index for adding messages
56
-
CREATE INDEX ON mq_msgs(channel_name, channel_args, created_at, id) WHERE id != uuid_nil() AND after_message_id IS NOT NULL;
56
+
CREATE INDEX ON mq_msgs(channel_name, channel_args, created_at, id) WHERE id != '00000000-0000-0000-0000-000000000000'::uuid AND after_message_id IS NOT NULL;
57
57
58
58
-- Index for ensuring strict message order
59
59
CREATE UNIQUE INDEX mq_msgs_channel_name_channel_args_after_message_id_idx ON mq_msgs(channel_name, channel_args, after_message_id);
···
76
76
WHERE channel_name = from_channel_name
77
77
AND channel_args = from_channel_args
78
78
AND after_message_id IS NOT NULL
79
-
AND id != uuid_nil()
79
+
AND id != '00000000-0000-0000-0000-000000000000'::uuid
80
80
ORDER BY created_at DESC, id DESC
81
81
LIMIT 1
82
82
),
83
-
uuid_nil()
83
+
'00000000-0000-0000-0000-000000000000'::uuid
84
84
)
85
85
$$ LANGUAGE SQL STABLE;
86
86
···
89
89
RETURNS TABLE(name TEXT, args TEXT) AS $$
90
90
SELECT channel_name, channel_args
91
91
FROM mq_msgs
92
-
WHERE id != uuid_nil()
92
+
WHERE id != '00000000-0000-0000-0000-000000000000'::uuid
93
93
AND attempt_at <= NOW()
94
94
AND (channel_names IS NULL OR channel_name = ANY(channel_names))
95
95
AND NOT mq_uuid_exists(after_message_id)
···
121
121
FROM mq_active_channels(channel_names, batch_size) AS active_channels
122
122
INNER JOIN LATERAL (
123
123
SELECT * FROM mq_msgs
124
-
WHERE mq_msgs.id != uuid_nil()
124
+
WHERE mq_msgs.id != '00000000-0000-0000-0000-000000000000'::uuid
125
125
AND mq_msgs.attempt_at <= NOW()
126
126
AND mq_msgs.channel_name = active_channels.name
127
127
AND mq_msgs.channel_args = active_channels.args
···
152
152
NULL::INTERVAL,
153
153
MIN(mq_msgs.attempt_at) - NOW()
154
154
FROM mq_msgs
155
-
WHERE mq_msgs.id != uuid_nil()
155
+
WHERE mq_msgs.id != '00000000-0000-0000-0000-000000000000'::uuid
156
156
AND NOT mq_uuid_exists(mq_msgs.after_message_id)
157
157
AND (channel_names IS NULL OR mq_msgs.channel_name = ANY(channel_names));
158
158
END IF;
···
234
234
PERFORM pg_notify(CONCAT('mq_', channel_name), '')
235
235
FROM mq_msgs
236
236
WHERE id = ANY(msg_ids)
237
-
AND after_message_id = uuid_nil()
237
+
AND after_message_id = '00000000-0000-0000-0000-000000000000'::uuid
238
238
GROUP BY channel_name;
239
239
240
240
IF FOUND THEN