Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Avoided transactional DDL on castrated databases.

Fixed a test failure that appeared after 753a22a, although the bug
existed before that commit.

Refs #22308.
  • Loading branch information...
commit 0757e0f30d5ad3731d4a59fe571256369663c2f6 1 parent 6ca6c36
@aaugustin aaugustin authored
View
5 django/core/management/commands/createcachetable.py
@@ -71,7 +71,9 @@ def create_table(self, database, tablename):
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(using=database):
+
+ with transaction.atomic(using=database,
+ savepoint=connection.features.can_rollback_ddl):
with connection.cursor() as curs:
try:
curs.execute("\n".join(full_statement))
@@ -81,5 +83,6 @@ def create_table(self, database, tablename):
(tablename, force_text(e)))
for statement in index_output:
curs.execute(statement)
+
if self.verbosity > 1:
self.stdout.write("Cache table '%s' created." % tablename)
View
9 tests/cache/tests.py
@@ -18,7 +18,7 @@
from django.core import management
from django.core.cache import (cache, caches, CacheKeyWarning,
InvalidCacheBackendError, DEFAULT_CACHE_ALIAS)
-from django.db import connection, router, transaction
+from django.db import connection, connections, router, transaction
from django.core.cache.utils import make_template_fragment_key
from django.http import HttpResponse, StreamingHttpResponse
from django.middleware.cache import (FetchFromCacheMiddleware,
@@ -981,11 +981,12 @@ def test_createcachetable_observes_database_router(self):
# cache table should be created on 'other'
# Queries:
# 1: check table doesn't already exist
- # 2: create savepoint
+ # 2: create savepoint (if transactional DDL is supported)
# 3: create the table
# 4: create the index
- # 5: release savepoint
- with self.assertNumQueries(5, using='other'):
+ # 5: release savepoint (if transactional DDL is supported)
+ num = 5 if connections['other'].features.can_rollback_ddl else 3
+ with self.assertNumQueries(num, using='other'):
management.call_command('createcachetable',
database='other',
verbosity=0, interactive=False)
Please sign in to comment.
Something went wrong with that request. Please try again.