Skip to content

Commit c05dc12

Browse files
authored
Remove redundant chat columns (#652)
1 parent 1564fe5 commit c05dc12

File tree

12 files changed

+239
-228
lines changed

12 files changed

+239
-228
lines changed

Diff for: init-api.sql

+23-28
Original file line numberDiff line numberDiff line change
@@ -1477,11 +1477,9 @@ FOR EACH ROW EXECUTE FUNCTION
14771477
--------------------------------------------------------------------------------
14781478

14791479
CREATE TABLE IF NOT EXISTS last (
1480-
server varchar(250),
14811480
username varchar(250),
14821481
seconds integer NOT NULL,
1483-
state text NOT NULL,
1484-
PRIMARY KEY (server, username)
1482+
PRIMARY KEY (username)
14851483
);
14861484

14871485
DO $$ BEGIN
@@ -1492,14 +1490,12 @@ END $$;
14921490

14931491
CREATE TABLE IF NOT EXISTS mam_server_user(
14941492
id SERIAL UNIQUE PRIMARY KEY,
1495-
server varchar(250) NOT NULL,
14961493
user_name varchar(250) NOT NULL
14971494
);
14981495

1499-
CREATE UNIQUE INDEX IF NOT EXISTS i_mam_server_user_name
1500-
ON mam_server_user
1501-
USING BTREE
1502-
(server, user_name);
1496+
CREATE UNIQUE INDEX IF NOT EXISTS
1497+
idx__mam_server_user__user_name
1498+
ON mam_server_user(user_name);
15031499

15041500
CREATE TABLE IF NOT EXISTS mam_message(
15051501
-- Message UID (64 bits)
@@ -1512,15 +1508,13 @@ CREATE TABLE IF NOT EXISTS mam_message(
15121508
-- The remote JID that the stanza is to (for an outgoing message) or from (for an incoming message).
15131509
-- This field is for sorting and filtering.
15141510
remote_bare_jid varchar(250) NOT NULL,
1515-
remote_resource varchar(250) NOT NULL,
15161511
-- I - incoming, remote_jid is a value from From.
15171512
-- O - outgoing, remote_jid is a value from To.
15181513
-- Has no meaning for MUC-rooms.
15191514
direction mam_direction NOT NULL,
15201515
-- Term-encoded message packet
15211516
message bytea NOT NULL,
15221517
search_body text,
1523-
origin_id varchar,
15241518
PRIMARY KEY(user_id, id)
15251519
);
15261520

@@ -1529,28 +1523,24 @@ CREATE INDEX IF NOT EXISTS i_mam_message_username_jid_id
15291523
USING BTREE
15301524
(user_id, remote_bare_jid, id);
15311525

1532-
CREATE INDEX IF NOT EXISTS i_mam_message_username_jid_origin_id
1533-
ON mam_message
1534-
USING BTREE
1535-
(user_id, remote_bare_jid, origin_id);
1536-
1537-
15381526
CREATE TABLE IF NOT EXISTS inbox (
15391527
luser VARCHAR(250) NOT NULL,
1540-
lserver VARCHAR(250) NOT NULL,
15411528
remote_bare_jid VARCHAR(250) NOT NULL,
15421529
msg_id VARCHAR(250),
15431530
box VARCHAR(64) NOT NULL DEFAULT 'inbox',
15441531
content BYTEA NOT NULL,
15451532
timestamp BIGINT NOT NULL,
1546-
muted_until BIGINT DEFAULT 0,
15471533
unread_count INT NOT NULL,
1548-
PRIMARY KEY(lserver, luser, remote_bare_jid)
1534+
PRIMARY KEY(luser, remote_bare_jid)
15491535
);
15501536

1551-
CREATE INDEX IF NOT EXISTS i_inbox_timestamp ON inbox USING BTREE(lserver, luser, timestamp);
1552-
CREATE INDEX IF NOT EXISTS i_inbox_us_box ON inbox USING BTREE(lserver, luser, box);
1553-
CREATE INDEX IF NOT EXISTS i_inbox_box ON inbox (box) WHERE (box = 'bin');
1537+
CREATE INDEX IF NOT EXISTS
1538+
idx__inbox__luser__timestamp
1539+
ON inbox(luser, timestamp);
1540+
1541+
CREATE INDEX IF NOT EXISTS
1542+
idx__inbox__luser__box
1543+
ON inbox(luser, box);
15541544

15551545
CREATE TABLE IF NOT EXISTS intro_hash (
15561546
hash TEXT PRIMARY KEY
@@ -1575,16 +1565,21 @@ CREATE INDEX IF NOT EXISTS duo_idx__inbox__timestamp__unread_count
15751565
ON inbox(timestamp, unread_count)
15761566
WHERE unread_count > 0;
15771567

1578-
CREATE INDEX IF NOT EXISTS duo_idx__last__username
1579-
ON last(username);
1580-
15811568
CREATE INDEX IF NOT EXISTS duo_idx__last__seconds
15821569
ON last(seconds);
15831570

15841571
CREATE INDEX IF NOT EXISTS duo_idx__mam_message__remote_bare_jid__id
15851572
ON mam_message(remote_bare_jid, id)
15861573
WHERE direction = 'I';
15871574

1588-
CREATE INDEX IF NOT EXISTS duo__idx__inbox__remote_bare_jid
1589-
ON inbox
1590-
USING BTREE(lserver, luser, remote_bare_jid);
1575+
CREATE UNIQUE INDEX IF NOT EXISTS
1576+
idx__mam_server_user__user_name
1577+
ON mam_server_user(user_name);
1578+
1579+
CREATE INDEX IF NOT EXISTS
1580+
idx__inbox__luser__timestamp
1581+
ON inbox(luser, timestamp);
1582+
1583+
CREATE INDEX IF NOT EXISTS
1584+
idx__inbox__luser__box
1585+
ON inbox(luser, box);

Diff for: migrations.sql

+75-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,75 @@
1-
DROP TABLE IF EXISTS question_order CASCADE;
1+
DO $$
2+
BEGIN
3+
IF EXISTS (
4+
SELECT 1
5+
FROM pg_constraint
6+
WHERE conname = 'last_pkey'
7+
) THEN
8+
ALTER TABLE last DROP CONSTRAINT last_pkey;
9+
ALTER TABLE last ADD CONSTRAINT last_pkey PRIMARY KEY (username);
10+
END IF;
11+
END$$;
12+
13+
DROP INDEX IF EXISTS duo_idx__last__username;
14+
15+
16+
17+
DROP INDEX IF EXISTS i_mam_server_user_name;
18+
19+
CREATE UNIQUE INDEX IF NOT EXISTS
20+
idx__mam_server_user__user_name
21+
ON mam_server_user(user_name);
22+
23+
24+
25+
DROP INDEX IF EXISTS i_mam_message_username_jid_origin_id;
26+
27+
28+
29+
DO $$
30+
BEGIN
31+
IF EXISTS (
32+
SELECT 1
33+
FROM pg_constraint
34+
WHERE conname = 'inbox_pkey'
35+
) THEN
36+
ALTER TABLE inbox DROP CONSTRAINT inbox_pkey;
37+
ALTER TABLE inbox ADD CONSTRAINT inbox_pkey PRIMARY KEY (luser, remote_bare_jid);
38+
END IF;
39+
END$$;
40+
41+
42+
DROP INDEX IF EXISTS duo__idx__inbox__remote_bare_jid;
43+
44+
45+
46+
DROP INDEX IF EXISTS i_inbox_timestamp;
47+
48+
CREATE INDEX IF NOT EXISTS
49+
idx__inbox__luser__timestamp
50+
ON inbox(luser, timestamp);
51+
52+
53+
54+
DROP INDEX IF EXISTS i_inbox_us_box;
55+
56+
CREATE INDEX IF NOT EXISTS
57+
idx__inbox__luser__box
58+
ON inbox(luser, box);
59+
60+
61+
62+
DROP INDEX IF EXISTS i_inbox_box;
63+
64+
65+
66+
ALTER TABLE last DROP COLUMN IF EXISTS server;
67+
ALTER TABLE last DROP COLUMN IF EXISTS state;
68+
69+
ALTER TABLE mam_server_user DROP COLUMN IF EXISTS server;
70+
71+
ALTER TABLE mam_message DROP COLUMN IF EXISTS remote_resource;
72+
ALTER TABLE mam_message DROP COLUMN IF EXISTS origin_id;
73+
74+
ALTER TABLE inbox DROP COLUMN IF EXISTS lserver;
75+
ALTER TABLE inbox DROP COLUMN IF EXISTS muted_until;

Diff for: service/chat/__init__.py

-11
Original file line numberDiff line numberDiff line change
@@ -57,17 +57,6 @@
5757
port=REDIS_PORT,
5858
decode_responses=True)
5959

60-
# TODO: Tables to migrate to monolithic DB:
61-
#
62-
# public.last
63-
# public.mam_message
64-
# public.mam_server_user
65-
# public.inbox
66-
# public.mongoose_cluster_id
67-
# public.intro_hash
68-
# public.duo_last_notification
69-
# public.duo_push_token
70-
7160
Q_SELECT_INTRO_HASH = """
7261
SELECT
7362
1

Diff for: service/chat/inbox/__init__.py

+2-16
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616
FROM
1717
inbox
1818
WHERE
19-
lserver = '{LSERVER}'
20-
AND
2119
luser = %(username)s
2220
ORDER BY
2321
timestamp
@@ -28,64 +26,54 @@
2826
WITH upsert_sender AS (
2927
INSERT INTO inbox (
3028
luser,
31-
lserver,
3229
remote_bare_jid,
3330
msg_id,
3431
box,
3532
content,
3633
timestamp,
37-
muted_until,
3834
unread_count
3935
)
4036
VALUES (
4137
%(from_username)s,
42-
'{LSERVER}',
4338
%(recipient_jid)s,
4439
%(msg_id)s,
4540
'chats',
4641
%(content)s,
4742
EXTRACT(EPOCH FROM NOW()) * 1e6,
48-
0,
4943
0
5044
)
51-
ON CONFLICT (lserver, luser, remote_bare_jid)
45+
ON CONFLICT (luser, remote_bare_jid)
5246
DO UPDATE SET
5347
msg_id = EXCLUDED.msg_id,
5448
box = 'chats',
5549
content = EXCLUDED.content,
5650
timestamp = EXCLUDED.timestamp,
57-
muted_until = EXCLUDED.muted_until,
5851
unread_count = 0
5952
), upsert_recipient AS (
6053
INSERT INTO inbox (
6154
luser,
62-
lserver,
6355
remote_bare_jid,
6456
msg_id,
6557
box,
6658
content,
6759
timestamp,
68-
muted_until,
6960
unread_count
7061
)
7162
VALUES (
7263
%(to_username)s,
73-
'{LSERVER}',
7464
%(sender_jid)s,
7565
%(msg_id)s,
7666
'inbox',
7767
%(content)s,
7868
EXTRACT(EPOCH FROM NOW()) * 1e6,
79-
0,
8069
1
8170
)
82-
ON CONFLICT (lserver, luser, remote_bare_jid)
71+
ON CONFLICT (luser, remote_bare_jid)
8372
DO UPDATE SET
8473
msg_id = EXCLUDED.msg_id,
8574
box = 'chats',
8675
content = EXCLUDED.content,
8776
timestamp = EXCLUDED.timestamp,
88-
muted_until = EXCLUDED.muted_until,
8977
unread_count = COALESCE(inbox.unread_count, 0) + 1
9078
)
9179
SELECT 1
@@ -98,8 +86,6 @@
9886
SET
9987
unread_count = 0
10088
WHERE
101-
lserver = '{LSERVER}'
102-
AND
10389
luser = %(luser)s
10490
AND
10591
remote_bare_jid = %(remote_bare_jid)s

Diff for: service/chat/mam/__init__.py

+6-14
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@
2323

2424
Q_INSERT_SERVER_USER = f"""
2525
INSERT INTO
26-
mam_server_user (server, user_name)
26+
mam_server_user (user_name)
2727
VALUES
28-
('{LSERVER}', %(user_name)s)
29-
ON CONFLICT (server, user_name) DO NOTHING
28+
(%(user_name)s)
29+
ON CONFLICT (user_name) DO NOTHING
3030
"""
3131

3232

@@ -37,35 +37,29 @@
3737
user_id,
3838
from_jid,
3939
remote_bare_jid,
40-
remote_resource,
4140
direction,
4241
message,
43-
search_body,
44-
origin_id
42+
search_body
4543
)
4644
VALUES
4745
(
4846
%(id)s,
4947
(SELECT id FROM mam_server_user WHERE user_name = %(from_username)s),
5048
'', -- from_jid is ignored
5149
%(to_username)s,
52-
'', -- remote_resource is ignored
5350
'O',
5451
%(message)s,
55-
%(search_body)s,
56-
NULL
52+
%(search_body)s
5753
),
5854
5955
(
6056
%(id)s + 1,
6157
(SELECT id FROM mam_server_user WHERE user_name = %(to_username)s),
6258
'', -- from_jid is ignored
6359
%(from_username)s,
64-
'', -- remote_resource is ignored
6560
'I',
6661
%(message)s,
67-
%(search_body)s,
68-
NULL
62+
%(search_body)s
6963
)
7064
"""
7165

@@ -82,8 +76,6 @@
8276
ON
8377
mam_server_user.id = mam_message.user_id
8478
WHERE
85-
mam_server_user.server = '{LSERVER}'
86-
AND
8779
mam_server_user.user_name = %(from_username)s
8880
AND
8981
mam_message.remote_bare_jid = %(to_username)s

Diff for: service/person/sql/__init__.py

+2-8
Original file line numberDiff line numberDiff line change
@@ -1452,19 +1452,17 @@
14521452
mam_server_user
14531453
WHERE
14541454
mam_message.user_id = mam_server_user.id
1455-
AND
1456-
mam_server_user.server = 'duolicious.app'
14571455
AND
14581456
mam_server_user.user_name = %(person_uuid)s
14591457
), q2 AS (
14601458
DELETE FROM last
14611459
WHERE username = %(person_uuid)s
14621460
), q3 AS (
14631461
DELETE FROM inbox
1464-
WHERE luser = %(person_uuid)s AND lserver = 'duolicious.app'
1462+
WHERE luser = %(person_uuid)s
14651463
), q4 AS (
14661464
DELETE FROM mam_server_user
1467-
WHERE server = 'duolicious.app' AND user_name = %(person_uuid)s
1465+
WHERE user_name = %(person_uuid)s
14681466
), q5 AS (
14691467
DELETE FROM duo_last_notification
14701468
WHERE username = %(person_uuid)s
@@ -2073,8 +2071,6 @@
20732071
mam_server_user
20742072
ON
20752073
mam_server_user.id = mam_message.user_id
2076-
AND
2077-
mam_server_user.server = 'duolicious.app'
20782074
AND
20792075
mam_server_user.user_name = %(subject_person_uuid)s
20802076
WHERE
@@ -2768,8 +2764,6 @@
27682764
ON
27692765
mam_message.user_id = mam_server_user.id
27702766
WHERE
2771-
mam_server_user.server = 'duolicious.app'
2772-
AND
27732767
mam_server_user.user_name = %(person_uuid)s::TEXT
27742768
ORDER BY
27752769
mam_message.id

0 commit comments

Comments
 (0)