diff --git a/synapse/storage/__init__.py b/synapse/storage/__init__.py index 4e8a54c8f7..0d57073aa4 100644 --- a/synapse/storage/__init__.py +++ b/synapse/storage/__init__.py @@ -263,13 +263,17 @@ class DataStore(RoomMemberStore, RoomStore, @defer.inlineCallbacks def get_current_state(self, room_id, event_type=None, state_key=""): + del_sql = ( + "SELECT event_id FROM deletions WHERE deletes = e.event_id" + ) + sql = ( "SELECT e.*, (%(deleted)s) AS deleted FROM events as e " "INNER JOIN current_state_events as c ON e.event_id = c.event_id " "INNER JOIN state_events as s ON e.event_id = s.event_id " "WHERE c.room_id = ? " ) % { - "deleted": "e.event_id IN (SELECT deletes FROM deletions)", + "deleted": del_sql, } if event_type: diff --git a/synapse/storage/_base.py b/synapse/storage/_base.py index d64119a473..444e7628d1 100644 --- a/synapse/storage/_base.py +++ b/synapse/storage/_base.py @@ -403,9 +403,10 @@ class SQLBaseStore(object): return events def _has_been_deleted_txn(self, txn, event): - sql = "SELECT * FROM deletions WHERE deletes = ?" + sql = "SELECT event_id FROM deletions WHERE deletes = ?" txn.execute(sql, (event.event_id,)) - return len(txn.fetchall()) > 0 + result = txn.fetchone() + return result[0] if result else None class Table(object):