summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/db/backends/sqlite3/schema.py4
-rw-r--r--tests/migrations/test_operations.py17
2 files changed, 19 insertions, 2 deletions
diff --git a/django/db/backends/sqlite3/schema.py b/django/db/backends/sqlite3/schema.py
index 279ac4b203..e8fc2635d1 100644
--- a/django/db/backends/sqlite3/schema.py
+++ b/django/db/backends/sqlite3/schema.py
@@ -83,8 +83,8 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
field_maps = list(mapping.items())
self.execute("INSERT INTO %s (%s) SELECT %s FROM %s" % (
self.quote_name(temp_model._meta.db_table),
- ', '.join(x for x, y in field_maps),
- ', '.join(y for x, y in field_maps),
+ ', '.join(self.quote_name(x) for x, y in field_maps),
+ ', '.join(self.quote_name(y) for x, y in field_maps),
self.quote_name(model._meta.db_table),
))
# Delete the old table
diff --git a/tests/migrations/test_operations.py b/tests/migrations/test_operations.py
index 1390638270..51c95afd96 100644
--- a/tests/migrations/test_operations.py
+++ b/tests/migrations/test_operations.py
@@ -195,6 +195,23 @@ class OperationTests(MigrationTestBase):
operation.database_backwards("test_adfl", editor, new_state, project_state)
self.assertColumnNotExists("test_adfl_pony", "height")
+ def test_column_name_quoting(self):
+ """
+ Column names that are SQL keywords shouldn't cause problems when used
+ in migrations (#22168).
+ """
+ project_state = self.set_up_test_model("test_regr22168")
+ operation = migrations.AddField(
+ "Pony",
+ "order",
+ models.IntegerField(default=0),
+ )
+ new_state = project_state.clone()
+ operation.state_forwards("test_regr22168", new_state)
+ with connection.schema_editor() as editor:
+ operation.database_forwards("test_regr22168", editor, project_state, new_state)
+ self.assertColumnExists("test_regr22168_pony", "order")
+
def test_add_field_preserve_default(self):
"""
Tests the AddField operation's state alteration