summary refs log tree commit diff
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2014-11-05 13:23:35 +0000
committerErik Johnston <erik@matrix.org>2014-11-05 13:23:35 +0000
commitcc44ecc62f69436a9217745292af6c55b5f8fe81 (patch)
treeb464e587fe4309e0bb1460822180a99fd12f6dbc
parentFix typing tests (diff)
downloadsynapse-cc44ecc62f69436a9217745292af6c55b5f8fe81.tar.xz
Get correct prev_events
-rw-r--r--synapse/storage/_base.py11
-rw-r--r--synapse/storage/event_federation.py30
2 files changed, 26 insertions, 15 deletions
diff --git a/synapse/storage/_base.py b/synapse/storage/_base.py
index 5e00c23fd1..7d445b4633 100644
--- a/synapse/storage/_base.py
+++ b/synapse/storage/_base.py
@@ -439,7 +439,7 @@ class SQLBaseStore(object):
     def _parse_events_txn(self, txn, rows):
         events = [self._parse_event_from_row(r) for r in rows]
 
-        sql = "SELECT * FROM events WHERE event_id = ?"
+        select_event_sql = "SELECT * FROM events WHERE event_id = ?"
 
         for ev in events:
             signatures = self._get_event_origin_signatures_txn(
@@ -450,13 +450,12 @@ class SQLBaseStore(object):
                 k: encode_base64(v) for k, v in signatures.items()
             }
 
-            prev_events = self._get_latest_events_in_room(txn, ev.room_id)
-            ev.prev_events = [(e_id, s,) for e_id, s, _ in prev_events]
+            ev.prev_events = self._get_prev_events(txn, ev.event_id)
 
             if hasattr(ev, "prev_state"):
                 # Load previous state_content.
                 # TODO: Should we be pulling this out above?
-                cursor = txn.execute(sql, (ev.prev_state,))
+                cursor = txn.execute(select_event_sql, (ev.prev_state,))
                 prevs = self.cursor_to_dict(cursor)
                 if prevs:
                     prev = self._parse_event_from_row(prevs[0])
@@ -468,8 +467,8 @@ class SQLBaseStore(object):
 
             if ev.redacted:
                 # Get the redaction event.
-                sql = "SELECT * FROM events WHERE event_id = ?"
-                txn.execute(sql, (ev.redacted,))
+                select_event_sql = "SELECT * FROM events WHERE event_id = ?"
+                txn.execute(select_event_sql, (ev.redacted,))
 
                 del_evs = self._parse_events_txn(
                     txn, self.cursor_to_dict(txn)
diff --git a/synapse/storage/event_federation.py b/synapse/storage/event_federation.py
index dcc116bad2..f427aba879 100644
--- a/synapse/storage/event_federation.py
+++ b/synapse/storage/event_federation.py
@@ -49,15 +49,6 @@ class EventFederationStore(SQLBaseStore):
         )
 
     def _get_latest_events_in_room(self, txn, room_id):
-        self._simple_select_onecol_txn(
-            txn,
-            table="event_forward_extremities",
-            keyvalues={
-                "room_id": room_id,
-            },
-            retcol="event_id",
-        )
-
         sql = (
             "SELECT e.event_id, e.depth FROM events as e "
             "INNER JOIN event_forward_extremities as f "
@@ -78,6 +69,27 @@ class EventFederationStore(SQLBaseStore):
 
         return results
 
+    def _get_prev_events(self, txn, event_id):
+        prev_ids = self._simple_select_onecol_txn(
+            txn,
+            table="event_edges",
+            keyvalues={
+                "event_id": event_id,
+            },
+            retcol="prev_event_id",
+        )
+
+        results = []
+        for prev_event_id in prev_ids:
+            hashes = self._get_event_reference_hashes_txn(txn, prev_event_id)
+            prev_hashes = {
+                k: encode_base64(v) for k, v in hashes.items()
+                if k == "sha256"
+            }
+            results.append((event_id, prev_hashes))
+
+        return results
+
     def get_min_depth(self, room_id):
         return self.runInteraction(
             "get_min_depth",