diff --git a/synapse/storage/_base.py b/synapse/storage/_base.py
index 0279400a83..a6fc4d6ea4 100644
--- a/synapse/storage/_base.py
+++ b/synapse/storage/_base.py
@@ -918,10 +918,10 @@ class SQLBaseStore(object):
start_time = update_counter("event_cache", start_time)
sql = (
- "SELECT e.internal_metadata, e.json, r.event_id, rej.reason "
+ "SELECT e.internal_metadata, e.json, r.redacts, rej.event_id "
"FROM event_json as e "
+ "LEFT JOIN rejections as rej USING (event_id) "
"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 = ? "
"LIMIT 1 "
)
@@ -967,6 +967,14 @@ class SQLBaseStore(object):
internal_metadata = json.loads(internal_metadata)
start_time = update_counter("decode_internal", start_time)
+ if rejected_reason:
+ rejected_reason = self._simple_select_one_onecol_txn(
+ txn,
+ table="rejections",
+ keyvalues={"event_id": rejected_reason},
+ retcol="reason",
+ )
+
ev = FrozenEvent(
d,
internal_metadata_dict=internal_metadata,
@@ -977,12 +985,19 @@ class SQLBaseStore(object):
if check_redacted and redacted:
ev = prune_event(ev)
- ev.unsigned["redacted_by"] = redacted
+ redaction_id = self._simple_select_one_onecol_txn(
+ txn,
+ table="redactions",
+ keyvalues={"redacts": ev.event_id},
+ retcol="event_id",
+ )
+
+ ev.unsigned["redacted_by"] = redaction_id
# Get the redaction event.
because = self._get_event_txn(
txn,
- redacted,
+ redaction_id,
check_redacted=False
)
diff --git a/synapse/storage/state.py b/synapse/storage/state.py
index 6d7d576cb6..6d0ecf8dd9 100644
--- a/synapse/storage/state.py
+++ b/synapse/storage/state.py
@@ -85,8 +85,10 @@ class StateStore(SQLBaseStore):
def fetch_events(txn, events):
sql = (
- "SELECT e.internal_metadata, e.json "
+ "SELECT e.internal_metadata, e.json, r.redacts, rej.event_id "
" FROM event_json as e"
+ " LEFT JOIN rejections as rej USING (event_id)"
+ " LEFT JOIN redactions as r ON e.event_id = r.redacts"
" WHERE e.event_id IN (%s)"
) % (",".join(["?"]*len(events)),)
@@ -95,7 +97,8 @@ class StateStore(SQLBaseStore):
return [
self._get_event_from_row_txn(
- txn, row[0], row[1], None
+ txn, row[0], row[1], row[2],
+ rejected_reason=row[3],
)
for row in rows
]
|