summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBaptiste Mispelon <bmispelon@gmail.com>2014-02-28 13:14:09 +0100
committerBaptiste Mispelon <bmispelon@gmail.com>2014-03-01 13:45:45 +0100
commitc679cb7f600b13646a1a2b5fc8a03dfcc2e413f2 (patch)
tree976f24bdfbca904fdaafcf0fdbec609e19dc76e5
parenta19f0d0c1e128634b9e393c52148167bf8718b4c (diff)
Fixed #22168 -- Fixed migrations failing on sqlite when column names are SQL keywords
Thanks to trac user fallen_flint for the report and initial patch.
-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