1 files changed, 8 insertions, 14 deletions
diff --git a/synapse/storage/data_stores/main/deviceinbox.py b/synapse/storage/data_stores/main/deviceinbox.py
index 96cd0fb77a..6393c4f6de 100644
--- a/synapse/storage/data_stores/main/deviceinbox.py
+++ b/synapse/storage/data_stores/main/deviceinbox.py
@@ -359,20 +359,14 @@ class DeviceInboxStore(DeviceInboxWorkerStore, DeviceInboxBackgroundUpdateStore)
self, txn, stream_id, messages_by_user_then_device
):
# Compatible method of performing an upsert
- sql = "SELECT stream_id FROM device_max_stream_id"
-
- txn.execute(sql)
- rows = txn.fetchone()
- if rows:
- db_stream_id = rows[0]
- if db_stream_id < stream_id:
- # Insert the new stream_id
- sql = "UPDATE device_max_stream_id SET stream_id = ?"
- else:
- # No rows, perform an insert
- sql = "INSERT INTO device_max_stream_id (stream_id) VALUES (?)"
-
- txn.execute(sql, (stream_id,))
+ sql = """
+ INSERT INTO device_max_stream_id
+ (stream_id) VALUES (?)
+ ON CONFLICT DO UPDATE device_max_stream_id
+ SET stream_id = ?
+ WHERE stream_id < ?
+ """
+ txn.execute(sql, (stream_id, stream_id))
local_by_user_then_device = {}
for user_id, messages_by_device in messages_by_user_then_device.items():
|