diff options
author | Erik Johnston <erik@matrix.org> | 2015-03-20 13:52:56 +0000 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2015-03-20 13:52:56 +0000 |
commit | cb8162d3d17a97574073d49bd6eef51c93b68157 (patch) | |
tree | c21af0524f31ce8ae069b0cd74c56ed27ed38868 /synapse/storage/state.py | |
parent | Generate transaction id in code (diff) | |
download | synapse-cb8162d3d17a97574073d49bd6eef51c93b68157.tar.xz |
Rearrange storage modules
Diffstat (limited to 'synapse/storage/state.py')
-rw-r--r-- | synapse/storage/state.py | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/synapse/storage/state.py b/synapse/storage/state.py index 888837cd1e..012144302d 100644 --- a/synapse/storage/state.py +++ b/synapse/storage/state.py @@ -15,6 +15,8 @@ from ._base import SQLBaseStore +from twisted.internet import defer + from synapse.util.stringutils import random_string import logging @@ -125,6 +127,36 @@ 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) + def _make_group_id(clock): return str(int(clock.time_msec())) + random_string(5) |