mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	[1.7.x] Fixed #23909 -- Prevented crash when collecting SQL for RunSQL
Thanks James Rivett-Carnac for the report and Markus Holtermann
for the review.
Backport of e11c6fd21 from master.
			
			
This commit is contained in:
		| @@ -93,7 +93,11 @@ class BaseDatabaseSchemaEditor(object): | ||||
|         # Log the command we're running, then run it | ||||
|         logger.debug("%s; (params %r)" % (sql, params)) | ||||
|         if self.collect_sql: | ||||
|             self.collected_sql.append((sql % tuple(map(self.quote_value, params))) + ";") | ||||
|             ending = "" if sql.endswith(";") else ";" | ||||
|             if params is not None: | ||||
|                 self.collected_sql.append((sql % tuple(map(self.quote_value, params))) + ending) | ||||
|             else: | ||||
|                 self.collected_sql.append(sql + ending) | ||||
|         else: | ||||
|             with self.connection.cursor() as cursor: | ||||
|                 cursor.execute(sql, params) | ||||
|   | ||||
| @@ -91,3 +91,6 @@ Bugfixes | ||||
|   the error message for cyclic dependencies much more helpful. | ||||
|  | ||||
| * Added missing ``index_together`` handling for SQLite (:ticket:`23880`). | ||||
|  | ||||
| * Fixed a crash when ``RunSQL`` SQL content was collected by the schema editor, | ||||
|   typically when using ``sqlmigrate`` (:ticket:`23909`). | ||||
|   | ||||
| @@ -1219,6 +1219,12 @@ class OperationTests(OperationTestBase): | ||||
|         self.assertEqual(len(new_state.models["test_runsql", "somethingelse"].fields), 1) | ||||
|         # Make sure there's no table | ||||
|         self.assertTableNotExists("i_love_ponies") | ||||
|         # Test SQL collection | ||||
|         with connection.schema_editor(collect_sql=True) as editor: | ||||
|             operation.database_forwards("test_runsql", editor, project_state, new_state) | ||||
|             self.assertIn("LIKE '%%ponies';", "\n".join(editor.collected_sql)) | ||||
|             operation.database_backwards("test_runsql", editor, project_state, new_state) | ||||
|             self.assertIn("LIKE '%%Ponies%%';", "\n".join(editor.collected_sql)) | ||||
|         # Test the database alteration | ||||
|         with connection.schema_editor() as editor: | ||||
|             operation.database_forwards("test_runsql", editor, project_state, new_state) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user