Fix up _handle_prev_events to not try to insert duplicate rows

This commit is contained in:
Erik Johnston 2015-05-12 14:41:50 +01:00
parent 74850d7f75
commit c1779a79bc

View File

@ -330,31 +330,21 @@ class EventFederationStore(SQLBaseStore):
txn.execute(query, (event_id, room_id)) txn.execute(query, (event_id, room_id))
# Insert all the prev_events as a backwards thing, they'll get
# deleted in a second if they're incorrect anyway.
self._simple_insert_many_txn(
txn,
table="event_backward_extremities",
values=[
{
"event_id": e_id,
"room_id": room_id,
}
for e_id, _ in prev_events
],
)
# Also delete from the backwards extremities table all ones that
# reference events that we have already seen
query = ( query = (
"DELETE FROM event_backward_extremities WHERE EXISTS (" "INSERT INTO event_backward_extremities (event_id, room_id)"
"SELECT 1 FROM events " " SELECT ?, ? WHERE NOT EXISTS ("
"WHERE " " SELECT 1 FROM event_backward_extremities"
"event_backward_extremities.event_id = events.event_id " " WHERE event_id = ? AND room_id = ?"
"AND not events.outlier " " )"
" AND NOT EXISTS ("
" SELECT 1 FROM events WHERE event_id = ? AND room_id = ?"
" )" " )"
) )
txn.execute(query)
txn.executemany(query, [
(e_id, room_id, e_id, room_id, e_id, room_id,)
for e_id, _ in prev_events
])
txn.call_after( txn.call_after(
self.get_latest_event_ids_in_room.invalidate, room_id self.get_latest_event_ids_in_room.invalidate, room_id