migrations: Backfill is_channel_message.

This commit is contained in:
Alex Vandiver
2025-03-17 17:31:28 +00:00
committed by Tim Abbott
parent 47d55c4b6f
commit bca862e243
2 changed files with 38 additions and 0 deletions

View File

@@ -54,6 +54,7 @@ rules:
- id: dont-import-models-in-migrations
patterns:
- pattern-not: from zerver.lib.migrate import $X
- pattern-not: from zerver.lib.partial import partial
- pattern-not: from zerver.lib.mime_types import $X
- pattern-not: from zerver.lib.redis_utils import get_redis_client

View File

@@ -0,0 +1,37 @@
from django.db import connection, migrations
from django.db.backends.base.schema import BaseDatabaseSchemaEditor
from django.db.migrations.state import StateApps
from psycopg2.sql import SQL
from zerver.lib.migrate import do_batch_update
def update_is_channel_message(apps: StateApps, schema_editor: BaseDatabaseSchemaEditor) -> None:
Message = apps.get_model("zerver", "Message")
ArchivedMessage = apps.get_model("zerver", "ArchivedMessage")
with connection.cursor() as cursor:
for message_model in [Message, ArchivedMessage]:
do_batch_update(
cursor,
message_model._meta.db_table,
[
SQL(
"is_channel_message = (SELECT type = 2 FROM zerver_recipient WHERE zerver_recipient.id = recipient_id)"
)
],
)
class Migration(migrations.Migration):
atomic = False
dependencies = [
("zerver", "0690_message_is_channel_message"),
]
operations = [
migrations.RunPython(
update_is_channel_message, reverse_code=migrations.RunPython.noop, elidable=True
)
]