summary refs log tree commit diff
path: root/synapse/storage/state.py
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2015-03-20 13:52:56 +0000
committerErik Johnston <erik@matrix.org>2015-03-20 14:11:38 +0000
commit87db64b83962873a3cf2af951e4c4bc2e4d50d76 (patch)
tree326af613b0f40a1c5ad6898bbafb517c18d7ba5c /synapse/storage/state.py
parentMerge pull request #112 from matrix-org/hotfixes-v0.8.1-r2 (diff)
downloadsynapse-87db64b83962873a3cf2af951e4c4bc2e4d50d76.tar.xz
Rearrange storage modules
Diffstat (limited to 'synapse/storage/state.py')
-rw-r--r--synapse/storage/state.py32
1 files changed, 32 insertions, 0 deletions
diff --git a/synapse/storage/state.py b/synapse/storage/state.py

index 456e4bd45d..58dbf2802b 100644 --- a/synapse/storage/state.py +++ b/synapse/storage/state.py
@@ -15,6 +15,8 @@ from ._base import SQLBaseStore +from twisted.internet import defer + import logging logger = logging.getLogger(__name__) @@ -122,3 +124,33 @@ class StateStore(SQLBaseStore): }, or_replace=True, ) + + @defer.inlineCallbacks + def get_current_state(self, room_id, event_type=None, state_key=""): + del_sql = ( + "SELECT event_id FROM redactions WHERE redacts = e.event_id " + "LIMIT 1" + ) + + sql = ( + "SELECT e.*, (%(redacted)s) AS redacted 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 = ? " + ) % { + "redacted": del_sql, + } + + if event_type and state_key is not None: + sql += " AND s.type = ? AND s.state_key = ? " + args = (room_id, event_type, state_key) + elif event_type: + sql += " AND s.type = ?" + args = (room_id, event_type) + else: + args = (room_id, ) + + results = yield self._execute_and_decode("get_current_state", sql, *args) + + events = yield self._parse_events(results) + defer.returnValue(events)