From 753a22a6352638b7df55176584795ac8c5d4232c Mon Sep 17 00:00:00 2001 From: Aymeric Augustin Date: Fri, 21 Mar 2014 18:48:57 +0100 Subject: [PATCH] Fixed transaction handling in two management commands. Previously, when createcachetable and flush operated on non-default databases, they weren't atomic. --- django/core/management/commands/createcachetable.py | 2 +- django/core/management/commands/flush.py | 2 +- tests/cache/tests.py | 8 +++++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/django/core/management/commands/createcachetable.py b/django/core/management/commands/createcachetable.py index d170ee64c9..8a9d0829c5 100644 --- a/django/core/management/commands/createcachetable.py +++ b/django/core/management/commands/createcachetable.py @@ -71,7 +71,7 @@ class Command(BaseCommand): for i, line in enumerate(table_output): full_statement.append(' %s%s' % (line, ',' if i < len(table_output) - 1 else '')) full_statement.append(');') - with transaction.atomic(): + with transaction.atomic(using=database): with connection.cursor() as curs: try: curs.execute("\n".join(full_statement)) diff --git a/django/core/management/commands/flush.py b/django/core/management/commands/flush.py index 0d13b35052..8e75b8e84c 100644 --- a/django/core/management/commands/flush.py +++ b/django/core/management/commands/flush.py @@ -63,7 +63,7 @@ Are you sure you want to do this? if confirm == 'yes': try: - with transaction.atomic(): + with transaction.atomic(using=db): with connection.cursor() as cursor: for sql in sql_list: cursor.execute(sql) diff --git a/tests/cache/tests.py b/tests/cache/tests.py index 288af6e437..285bcfa4ed 100644 --- a/tests/cache/tests.py +++ b/tests/cache/tests.py @@ -981,9 +981,11 @@ class CreateCacheTableForDBCacheTests(TestCase): # cache table should be created on 'other' # Queries: # 1: check table doesn't already exist - # 2: create the table - # 3: create the index - with self.assertNumQueries(3, using='other'): + # 2: create savepoint + # 3: create the table + # 4: create the index + # 5: release savepoint + with self.assertNumQueries(5, using='other'): management.call_command('createcachetable', database='other', verbosity=0, interactive=False)