Fixed #23909 -- Prevented crash when collecting SQL for RunSQL
Thanks James Rivett-Carnac for the report and Markus Holtermann for the review.
This commit is contained in:
parent
777b4c26e3
commit
e11c6fd218
|
@ -94,7 +94,11 @@ class BaseDatabaseSchemaEditor(object):
|
||||||
# Log the command we're running, then run it
|
# Log the command we're running, then run it
|
||||||
logger.debug("%s; (params %r)" % (sql, params))
|
logger.debug("%s; (params %r)" % (sql, params))
|
||||||
if self.collect_sql:
|
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:
|
else:
|
||||||
with self.connection.cursor() as cursor:
|
with self.connection.cursor() as cursor:
|
||||||
cursor.execute(sql, params)
|
cursor.execute(sql, params)
|
||||||
|
|
|
@ -91,3 +91,6 @@ Bugfixes
|
||||||
the error message for cyclic dependencies much more helpful.
|
the error message for cyclic dependencies much more helpful.
|
||||||
|
|
||||||
* Added missing ``index_together`` handling for SQLite (:ticket:`23880`).
|
* 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`).
|
||||||
|
|
|
@ -1289,6 +1289,12 @@ class OperationTests(OperationTestBase):
|
||||||
self.assertEqual(len(new_state.models["test_runsql", "somethingelse"].fields), 1)
|
self.assertEqual(len(new_state.models["test_runsql", "somethingelse"].fields), 1)
|
||||||
# Make sure there's no table
|
# Make sure there's no table
|
||||||
self.assertTableNotExists("i_love_ponies")
|
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
|
# Test the database alteration
|
||||||
with connection.schema_editor() as editor:
|
with connection.schema_editor() as editor:
|
||||||
operation.database_forwards("test_runsql", editor, project_state, new_state)
|
operation.database_forwards("test_runsql", editor, project_state, new_state)
|
||||||
|
|
Loading…
Reference in New Issue