From c679cb7f600b13646a1a2b5fc8a03dfcc2e413f2 Mon Sep 17 00:00:00 2001 From: Baptiste Mispelon Date: Fri, 28 Feb 2014 13:14:09 +0100 Subject: [PATCH] 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. --- django/db/backends/sqlite3/schema.py | 4 ++-- tests/migrations/test_operations.py | 17 +++++++++++++++++ 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