summary refs log tree commit diff
path: root/synapse/storage
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2016-04-04 17:07:43 +0100
committerErik Johnston <erik@matrix.org>2016-04-04 17:07:43 +0100
commit92ab45a330c2d6c4e896786135e93b6cabfad1ea (patch)
treec10a74370002b2d769cbff707434e1cd16ffb12a /synapse/storage
parentStore invites in a separate table. (diff)
downloadsynapse-92ab45a330c2d6c4e896786135e93b6cabfad1ea.tar.xz
Add upgrade path, rename table
Diffstat (limited to 'synapse/storage')
-rw-r--r--synapse/storage/roommember.py6
-rw-r--r--synapse/storage/schema/delta/31/invites.sql20
2 files changed, 20 insertions, 6 deletions
diff --git a/synapse/storage/roommember.py b/synapse/storage/roommember.py
index 4c026b33ae..abe5942744 100644
--- a/synapse/storage/roommember.py
+++ b/synapse/storage/roommember.py
@@ -75,7 +75,7 @@ class RoomMemberStore(SQLBaseStore):
                 if event.membership == Membership.INVITE:
                     self._simple_insert_txn(
                         txn,
-                        table="invites",
+                        table="local_invites",
                         values={
                             "event_id": event.event_id,
                             "invitee": event.state_key,
@@ -86,7 +86,7 @@ class RoomMemberStore(SQLBaseStore):
                     )
                 else:
                     sql = (
-                        "UPDATE invites SET stream_id = ?, replaced_by = ? WHERE"
+                        "UPDATE local_invites SET stream_id = ?, replaced_by = ? WHERE"
                         " room_id = ? AND invitee = ? AND locally_rejected is NULL"
                         " AND replaced_by is NULL"
                     )
@@ -239,7 +239,7 @@ class RoomMemberStore(SQLBaseStore):
         if do_invite:
             sql = (
                 "SELECT i.room_id, inviter, i.event_id, e.stream_ordering"
-                " FROM invites as i"
+                " FROM local_invites as i"
                 " INNER JOIN events as e USING (event_id)"
                 " WHERE invitee = ? AND locally_rejected is NULL"
                 " AND replaced_by is NULL"
diff --git a/synapse/storage/schema/delta/31/invites.sql b/synapse/storage/schema/delta/31/invites.sql
index 4f6fb9ea63..1c83430da4 100644
--- a/synapse/storage/schema/delta/31/invites.sql
+++ b/synapse/storage/schema/delta/31/invites.sql
@@ -14,7 +14,7 @@
  */
 
 
-CREATE TABLE invites(
+CREATE TABLE local_invites(
     stream_id BIGINT NOT NULL,
     inviter TEXT NOT NULL,
     invitee TEXT NOT NULL,
@@ -24,5 +24,19 @@ CREATE TABLE invites(
     replaced_by TEXT
 );
 
-CREATE INDEX invites_id ON invites(stream_id);
-CREATE INDEX invites_for_user_idx ON invites(invitee, locally_rejected, replaced_by, room_id);
+-- Insert all invites for local users into new `invites` table
+INSERT INTO local_invites SELECT
+    stream_ordering as stream_id,
+    sender as inviter,
+    state_key as invitee,
+    event_id,
+    room_id,
+    NULL as locally_rejected,
+    NULL as replaced_by
+FROM events
+NATURAL JOIN current_state_events
+NATURAL JOIN room_memberships
+WHERE membership = 'invite'  AND state_key IN (SELECT name FROM users);
+
+CREATE INDEX local_invites_id ON local_invites(stream_id);
+CREATE INDEX local_invites_for_user_idx ON local_invites(invitee, locally_rejected, replaced_by, room_id);