diff --git a/zerver/migrations/0301_fix_unread_messages_in_deactivated_streams.py b/zerver/migrations/0301_fix_unread_messages_in_deactivated_streams.py index 2039062a58..96c22b907b 100644 --- a/zerver/migrations/0301_fix_unread_messages_in_deactivated_streams.py +++ b/zerver/migrations/0301_fix_unread_messages_in_deactivated_streams.py @@ -1,21 +1,6 @@ -from django.db import connection, migrations -from django.db.backends.postgresql.schema import DatabaseSchemaEditor -from django.db.migrations.state import StateApps +from django.db import migrations -def mark_messages_read(apps: StateApps, schema_editor: DatabaseSchemaEditor) -> None: - Stream = apps.get_model("zerver", "Stream") - deactivated_stream_ids = list(Stream.objects.filter(deactivated=True).values_list('id', flat=True)) - with connection.cursor() as cursor: - for i in deactivated_stream_ids: - cursor.execute(f""" - UPDATE zerver_usermessage SET flags = flags | 1 - FROM zerver_message - INNER JOIN zerver_stream ON zerver_stream.recipient_id = zerver_message.recipient_id - WHERE zerver_message.id = zerver_usermessage.message_id - AND zerver_stream.id = {i}; - """) - class Migration(migrations.Migration): """ We're changing the stream deactivation process to make it mark all messages @@ -23,12 +8,19 @@ class Migration(migrations.Migration): deactivated before this change, we need a migration to fix those old streams, to have all messages marked as read. """ - atomic = False - dependencies = [ ('zerver', '0300_add_attachment_is_web_public'), ] operations = [ - migrations.RunPython(mark_messages_read, reverse_code=migrations.RunPython.noop), + migrations.RunSQL( + sql=""" + UPDATE zerver_usermessage SET flags = flags | 1 + FROM zerver_message + INNER JOIN zerver_stream ON zerver_stream.recipient_id = zerver_message.recipient_id + WHERE zerver_message.id = zerver_usermessage.message_id + AND zerver_stream.deactivated; + """, + reverse_sql="", + ), ]