@@ -4,14 +4,12 @@ module Simplex.Messaging.Agent.Store.Postgres.Migrations.M20250815_service_certs
44
55import Data.Text (Text )
66import qualified Data.Text as T
7- import Simplex.Messaging.Agent.Store.Postgres.Migrations.Util
87import Text.RawString.QQ (r )
98
109m20250815_service_certs :: Text
1110m20250815_service_certs =
12- createXorHashFuncs
13- <> T. pack
14- [r |
11+ T. pack
12+ [r |
1513CREATE TABLE client_services(
1614 user_id BIGINT NOT NULL REFERENCES users ON UPDATE RESTRICT ON DELETE CASCADE,
1715 host TEXT NOT NULL,
@@ -29,86 +27,15 @@ CREATE UNIQUE INDEX idx_server_certs_user_id_host_port ON client_services(user_i
2927CREATE INDEX idx_server_certs_host_port ON client_services(host, port);
3028
3129ALTER TABLE rcv_queues ADD COLUMN rcv_service_assoc SMALLINT NOT NULL DEFAULT 0;
32-
33- CREATE FUNCTION update_aggregates(p_user_id BIGINT, p_host TEXT, p_port TEXT, p_change BIGINT, p_rcv_id BYTEA) RETURNS VOID
34- LANGUAGE plpgsql
35- AS $$
36- BEGIN
37- UPDATE client_services
38- SET service_queue_count = service_queue_count + p_change,
39- service_queue_ids_hash = xor_combine(service_queue_ids_hash, public.digest(p_rcv_id, 'md5'))
40- WHERE user_id = p_user_id AND host = p_host AND port = p_port;
41- END;
42- $$;
43-
44- CREATE FUNCTION on_rcv_queue_insert() RETURNS TRIGGER
45- LANGUAGE plpgsql
46- AS $$
47- BEGIN
48- IF NEW.rcv_service_assoc != 0 AND NEW.deleted = 0 THEN
49- PERFORM update_aggregates(NEW.user_id, NEW.host, NEW.port, 1, NEW.rcv_id);
50- END IF;
51- RETURN NEW;
52- END;
53- $$;
54-
55- CREATE FUNCTION on_rcv_queue_delete() RETURNS TRIGGER
56- LANGUAGE plpgsql
57- AS $$
58- BEGIN
59- IF OLD.rcv_service_assoc != 0 AND OLD.deleted = 0 THEN
60- PERFORM update_aggregates(OLD.user_id, OLD.host, OLD.port, -1, OLD.rcv_id);
61- END IF;
62- RETURN OLD;
63- END;
64- $$;
65-
66- CREATE FUNCTION on_rcv_queue_update() RETURNS TRIGGER
67- LANGUAGE plpgsql
68- AS $$
69- BEGIN
70- IF OLD.rcv_service_assoc != 0 AND OLD.deleted = 0 THEN
71- IF NOT (NEW.rcv_service_assoc != 0 AND NEW.deleted = 0) THEN
72- PERFORM update_aggregates(OLD.user_id, OLD.host, OLD.port, -1, OLD.rcv_id);
73- END IF;
74- ELSIF NEW.rcv_service_assoc != 0 AND NEW.deleted = 0 THEN
75- PERFORM update_aggregates(NEW.user_id, NEW.host, NEW.port, 1, NEW.rcv_id);
76- END IF;
77- RETURN NEW;
78- END;
79- $$;
80-
81- CREATE TRIGGER tr_rcv_queue_insert
82- AFTER INSERT ON rcv_queues
83- FOR EACH ROW EXECUTE PROCEDURE on_rcv_queue_insert();
84-
85- CREATE TRIGGER tr_rcv_queue_delete
86- AFTER DELETE ON rcv_queues
87- FOR EACH ROW EXECUTE PROCEDURE on_rcv_queue_delete();
88-
89- CREATE TRIGGER tr_rcv_queue_update
90- AFTER UPDATE ON rcv_queues
91- FOR EACH ROW EXECUTE PROCEDURE on_rcv_queue_update();
92- |]
30+ |]
9331
9432down_m20250815_service_certs :: Text
9533down_m20250815_service_certs =
9634 T. pack
9735 [r |
98- DROP TRIGGER tr_rcv_queue_insert ON rcv_queues;
99- DROP TRIGGER tr_rcv_queue_delete ON rcv_queues;
100- DROP TRIGGER tr_rcv_queue_update ON rcv_queues;
101-
102- DROP FUNCTION on_rcv_queue_insert;
103- DROP FUNCTION on_rcv_queue_delete;
104- DROP FUNCTION on_rcv_queue_update;
105-
106- DROP FUNCTION update_aggregates;
107-
10836ALTER TABLE rcv_queues DROP COLUMN rcv_service_assoc;
10937
11038DROP INDEX idx_server_certs_host_port;
11139DROP INDEX idx_server_certs_user_id_host_port;
11240DROP TABLE client_services;
11341 |]
114- <> dropXorHashFuncs
0 commit comments