Fix up typos and correct sql queries

This commit is contained in:
Erik Johnston 2014-08-14 18:40:50 +01:00
parent 7e681ad778
commit 2c46bb6208
6 changed files with 36 additions and 44 deletions

View File

@ -201,7 +201,7 @@ class MessageHandler(BaseHandler):
@defer.inlineCallbacks @defer.inlineCallbacks
def get_feedback(self, event_id): def get_feedback(self, event_id):
yield self.auth.check_joined_room(room_id, user_id) # yield self.auth.check_joined_room(room_id, user_id)
# Pull out the feedback from the db # Pull out the feedback from the db
fb = yield self.store.get_feedback(event_id) fb = yield self.store.get_feedback(event_id)
@ -690,13 +690,7 @@ class RoomMemberHandler(BaseHandler):
@defer.inlineCallbacks @defer.inlineCallbacks
def _do_local_membership_update(self, event, membership, broadcast_msg): def _do_local_membership_update(self, event, membership, broadcast_msg):
# store membership # store membership
store_id = yield self.store.store_room_member( store_id = yield self.store.persist_event(event)
user_id=event.target_user_id,
sender=event.user_id,
room_id=event.room_id,
content=event.content,
membership=membership
)
# Send a PDU to all hosts who have joined the room. # Send a PDU to all hosts who have joined the room.
destinations = yield self.store.get_joined_hosts_for_room( destinations = yield self.store.get_joined_hosts_for_room(

View File

@ -13,6 +13,7 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
from twisted.internet import defer
from synapse.api.events.room import ( from synapse.api.events.room import (
RoomMemberEvent, MessageEvent, RoomTopicEvent, FeedbackEvent, RoomMemberEvent, MessageEvent, RoomTopicEvent, FeedbackEvent,
@ -52,7 +53,7 @@ class DataStore(RoomMemberStore, RoomStore,
elif event.type == RoomConfigEvent.TYPE: elif event.type == RoomConfigEvent.TYPE:
yield self._store_room_config(event) yield self._store_room_config(event)
self._store_event(event) yield self._store_event(event)
@defer.inlineCallbacks @defer.inlineCallbacks
def get_event(self, event_id): def get_event(self, event_id):
@ -76,14 +77,13 @@ class DataStore(RoomMemberStore, RoomStore,
def _store_event(self, event): def _store_event(self, event):
vals = { vals = {
"event_id": event.event_id, "event_id": event.event_id,
"event_type": event.type, "type": event.type,
"sender": event.user_id,
"room_id": event.room_id, "room_id": event.room_id,
"content": json.dumps(event.content), "content": json.dumps(event.content),
} }
unrec = {k: v for k, v in event.get_full_dict() if k not in vals.keys()} unrec = {k: v for k, v in event.get_full_dict().items() if k not in vals.keys()}
val["unrecognized_keys"] = json.dumps(unrec) vals["unrecognized_keys"] = json.dumps(unrec)
yield self._simple_insert("events", vals) yield self._simple_insert("events", vals)
@ -91,7 +91,7 @@ class DataStore(RoomMemberStore, RoomStore,
vals = { vals = {
"event_id": event.event_id, "event_id": event.event_id,
"room_id": event.room_id, "room_id": event.room_id,
"event_type": event.event_type, "type": event.type,
"state_key": event.state_key, "state_key": event.state_key,
} }
@ -103,16 +103,16 @@ class DataStore(RoomMemberStore, RoomStore,
# TODO (erikj): We also need to update the current state table? # TODO (erikj): We also need to update the current state table?
@defer.inlineCallbacks @defer.inlineCallbacks
def get_current_state(room_id, event_type=None, state_key=""): def get_current_state(self, room_id, event_type=None, state_key=""):
sql = ( sql = (
"SELECT e.* FROM events as e" "SELECT e.* FROM events as e "
"INNER JOIN current_state as c ON e.event_id = c.event_id " "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 " "INNER JOIN state_events as s ON e.event_id = s.event_id "
"WHERE c.room_id = ? " "WHERE c.room_id = ? "
) )
if event_type: if event_type:
sql += " s.type = ? AND s.state_key = ? " sql += " AND s.type = ? AND s.state_key = ? "
args = (room_id, event_type, state_key) args = (room_id, event_type, state_key)
else: else:
args = (room_id, ) args = (room_id, )

View File

@ -19,6 +19,7 @@ from twisted.internet import defer
from synapse.api.errors import StoreError from synapse.api.errors import StoreError
import collections import collections
import copy
import json import json
@ -59,7 +60,7 @@ class SQLBaseStore(object):
The result of decoder(results) The result of decoder(results)
""" """
logger.debug( logger.debug(
"[SQL] %s Args=%s Func=%s", query, args, decoder.__name__ "[SQL] %s Args=%s Func=%s", query, args, decoder.__name__ if decoder else None
) )
def interaction(txn): def interaction(txn):
@ -72,7 +73,7 @@ class SQLBaseStore(object):
return self._db_pool.runInteraction(interaction) return self._db_pool.runInteraction(interaction)
def _execute_and_decode(self, query, *args): def _execute_and_decode(self, query, *args):
return self._execute(self.cursor_to_dict, *args) return self._execute(self.cursor_to_dict, query, *args)
# "Simple" SQL API methods that operate on a single table with no JOINs, # "Simple" SQL API methods that operate on a single table with no JOINs,
# no complex WHERE clauses, just a dict of values for columns. # no complex WHERE clauses, just a dict of values for columns.
@ -291,8 +292,8 @@ class SQLBaseStore(object):
return self._db_pool.runInteraction(func) return self._db_pool.runInteraction(func)
def _parse_event_from_row(self, row_dict): def _parse_event_from_row(self, row_dict):
d = copy.deepcopy({k: v for k, v in row.items() if v}) d = copy.deepcopy({k: v for k, v in row_dict.items() if v})
d.update(json.loads(json.loads(row["unrecognized_keys"]))) d.update(json.loads(json.loads(row_dict["unrecognized_keys"])))
d["content"] = json.loads(d["content"]) d["content"] = json.loads(d["content"])
del d["unrecognized_keys"] del d["unrecognized_keys"]

View File

@ -54,13 +54,13 @@ class RoomMemberStore(SQLBaseStore):
"INSERT OR IGNORE INTO room_hosts (room_id, host) " "INSERT OR IGNORE INTO room_hosts (room_id, host) "
"VALUES (?, ?)" "VALUES (?, ?)"
) )
yield self._execute(None, sql, room_id, domain) yield self._execute(None, sql, event.room_id, domain)
else: else:
sql = ( sql = (
"DELETE FROM room_hosts WHERE room_id = ? AND host = ?" "DELETE FROM room_hosts WHERE room_id = ? AND host = ?"
) )
yield self._execute(None, sql, room_id, domain) yield self._execute(None, sql, event.room_id, domain)
def get_room_member(self, user_id, room_id): def get_room_member(self, user_id, room_id):
@ -72,10 +72,10 @@ class RoomMemberStore(SQLBaseStore):
Returns: Returns:
Deferred: Results in a MembershipEvent or None. Deferred: Results in a MembershipEvent or None.
""" """
return self._get_members_by_dict( return self._get_members_by_dict({
room_id=room_id, "e.room_id": room_id,
user_id=user_id "m.user_id": user_id,
) })
def get_room_members(self, room_id, membership=None): def get_room_members(self, room_id, membership=None):
"""Retrieve the current room member list for a room. """Retrieve the current room member list for a room.
@ -89,11 +89,11 @@ class RoomMemberStore(SQLBaseStore):
list of namedtuples representing the members in this room. list of namedtuples representing the members in this room.
""" """
where = {"room_id": room_id} where = {"m.room_id": room_id}
if membership: if membership:
where["membership"] = membership where["m.membership"] = membership
return self._get_members_by_dict(**membership) return self._get_members_by_dict(where)
def get_rooms_for_user_where_membership_is(self, user_id, membership_list): def get_rooms_for_user_where_membership_is(self, user_id, membership_list):
""" Get all the rooms for this user where the membership for this user """ Get all the rooms for this user where the membership for this user
@ -126,8 +126,8 @@ class RoomMemberStore(SQLBaseStore):
) )
def _get_members_by_dict(self, where_dict): def _get_members_by_dict(self, where_dict):
clause = " AND ".join("%s = ?" % k for k in where.keys()) clause = " AND ".join("%s = ?" % k for k in where_dict.keys())
vals = where.values() vals = where_dict.values()
return self._get_members_query(clause, vals) return self._get_members_query(clause, vals)
@defer.inlineCallbacks @defer.inlineCallbacks
@ -136,11 +136,11 @@ class RoomMemberStore(SQLBaseStore):
"SELECT e.* FROM events as e " "SELECT e.* FROM events as e "
"INNER JOIN room_memberships as m " "INNER JOIN room_memberships as m "
"ON e.event_id = m.event_id " "ON e.event_id = m.event_id "
"INNER JOIN current_state as c " "INNER JOIN current_state_events as c "
"ON m.event_id = c.event_id " "ON m.event_id = c.event_id "
"WHERE %s " "WHERE %s "
) % (where_clause,) ) % (where_clause,)
rows = yield self._execute_and_decode(sql, where_values) rows = yield self._execute_and_decode(sql, *where_values)
results = [self._parse_event_from_row(r) for r in rows] results = [self._parse_event_from_row(r) for r in rows]
defer.returnValue(results) defer.returnValue(results)

View File

@ -30,9 +30,9 @@ CREATE TABLE IF NOT EXISTS state_events(
prev_state TEXT prev_state TEXT
); );
CREATE TABLE IF NOT EXISTS current_state( CREATE TABLE IF NOT EXISTS current_state_events(
event_id TEXT NOT NULL, event_id TEXT NOT NULL,
room_id TEXT NOT NULL, room_id TEXT NOT NULL
); );
CREATE TABLE IF NOT EXISTS room_memberships( CREATE TABLE IF NOT EXISTS room_memberships(

View File

@ -13,12 +13,9 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
from twisted.internet import defer
from ._base import SQLBaseStore from ._base import SQLBaseStore
from .message import MessagesTable
from .feedback import FeedbackTable
from .roomdata import RoomDataTable
from .roommember import RoomMemberTable
from synapse.api.constants import Membership from synapse.api.constants import Membership
@ -40,13 +37,13 @@ class StreamStore(SQLBaseStore):
current_room_membership_sql = ( current_room_membership_sql = (
"SELECT m.room_id FROM room_memberships as m " "SELECT m.room_id FROM room_memberships as m "
"INNER JOIN current_state as c ON m.event_id = c.event_id " "INNER JOIN current_state_events as c ON m.event_id = c.event_id "
"WHERE m.user_id = ?" "WHERE m.user_id = ?"
) )
invites_sql = ( invites_sql = (
"SELECT m.event_id FROM room_membershipas as m " "SELECT m.event_id FROM room_membershipas as m "
"INNER JOIN current_state as c ON m.event_id = c.event_id " "INNER JOIN current_state_events as c ON m.event_id = c.event_id "
"WHERE m.user_id = ? AND m.membership = ?" "WHERE m.user_id = ? AND m.membership = ?"
) )
@ -71,4 +68,4 @@ class StreamStore(SQLBaseStore):
user_id, user_id, Membership.INVITE user_id, user_id, Membership.INVITE
) )
defer.returnValue([self._parse_event_from_row(r) for r in results]) defer.returnValue([self._parse_event_from_row(r) for r in rows])