Skip to content

Commit

Permalink
[5.0.x] Fixed #35006 -- Fixed migrations crash when altering Meta.db_…
Browse files Browse the repository at this point in the history
…table_comment on SQLite.

Thanks Юрий for the report.

Regression in 78f163a.
Backport of 37fc832 from main
  • Loading branch information
felixxm committed Nov 30, 2023
1 parent a4a0f66 commit 7f1dc67
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 7 deletions.
15 changes: 8 additions & 7 deletions django/db/backends/base/schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -671,13 +671,14 @@ def alter_db_table(self, model, old_db_table, new_db_table):
sql.rename_table_references(old_db_table, new_db_table)

def alter_db_table_comment(self, model, old_db_table_comment, new_db_table_comment):
self.execute(
self.sql_alter_table_comment
% {
"table": self.quote_name(model._meta.db_table),
"comment": self.quote_value(new_db_table_comment or ""),
}
)
if self.sql_alter_table_comment and self.connection.features.supports_comments:
self.execute(
self.sql_alter_table_comment
% {
"table": self.quote_name(model._meta.db_table),
"comment": self.quote_value(new_db_table_comment or ""),
}
)

def alter_db_tablespace(self, model, old_db_tablespace, new_db_tablespace):
"""Move a model's table between tablespaces."""
Expand Down
2 changes: 2 additions & 0 deletions django/db/backends/sqlite3/schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
sql_delete_column = "ALTER TABLE %(table)s DROP COLUMN %(column)s"
sql_create_unique = "CREATE UNIQUE INDEX %(name)s ON %(table)s (%(columns)s)"
sql_delete_unique = "DROP INDEX %(name)s"
sql_alter_table_comment = None
sql_alter_column_comment = None

def __enter__(self):
# Some SQLite schema alterations need foreign key constraints to be
Expand Down
3 changes: 3 additions & 0 deletions docs/releases/4.2.8.txt
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,6 @@ Bugfixes
* Fixed a regression in Django 4.2 where the admin's read-only password widget
and some help texts were incorrectly aligned at tablet widths
(:ticket:`34982`).

* Fixed a regression in Django 4.2 that caused a migration crash on SQLite when
altering unsupported ``Meta.db_table_comment`` (:ticket:`35006`).
17 changes: 17 additions & 0 deletions tests/schema/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -4870,6 +4870,23 @@ class Meta:
[None, ""],
)

@isolate_apps("schema")
@skipIfDBFeature("supports_comments")
def test_db_comment_table_unsupported(self):
class ModelWithDbTableComment(Model):
class Meta:
app_label = "schema"
db_table_comment = "Custom table comment"

# Table comments are ignored on databases that don't support them.
with connection.schema_editor() as editor, self.assertNumQueries(1):
editor.create_model(ModelWithDbTableComment)
self.isolated_local_models = [ModelWithDbTableComment]
with connection.schema_editor() as editor, self.assertNumQueries(0):
editor.alter_db_table_comment(
ModelWithDbTableComment, "Custom table comment", "New table comment"
)

@isolate_apps("schema")
@skipUnlessDBFeature("supports_comments", "supports_foreign_keys")
def test_db_comments_from_abstract_model(self):
Expand Down

0 comments on commit 7f1dc67

Please sign in to comment.