summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--synapse/storage/state.py25
1 files changed, 24 insertions, 1 deletions
diff --git a/synapse/storage/state.py b/synapse/storage/state.py
index 9ed5412999..c300c6e29c 100644
--- a/synapse/storage/state.py
+++ b/synapse/storage/state.py
@@ -83,8 +83,31 @@ class StateStore(SQLBaseStore):
             f,
         )
 
+        def fetch_events(txn, events):
+            sql = (
+                "SELECT e.internal_metadata, e.json, r.event_id, rej.reason "
+                " FROM event_json as e"
+                " LEFT JOIN redactions as r ON e.event_id = r.redacts"
+                " LEFT JOIN rejections as rej on rej.event_id = e.event_id"
+                " WHERE e.event_id IN (%s)"
+            ) % (",".join(["?"]*len(events)),)
+
+            txn.execute(sql, events)
+            rows = txn.fetchall()
+
+            return [
+                self._get_event_from_row_txn(
+                    txn, row[0], row[1], row[2],
+                    rejected_reason=row[3],
+                )
+                for row in rows
+            ]
+
         for vals in states.values():
-            vals[:] = yield self._get_events(vals, desc="_get_state_groups_ev")
+            vals[:] = yield self.runInteraction(
+                "_get_state_groups_ev",
+                fetch_events, vals
+            )
 
         defer.returnValue(states)