summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRiccardo Magliocchetti <riccardo.magliocchetti@gmail.com>2015-10-05 19:25:06 +0200
committerTim Graham <timograham@gmail.com>2015-10-06 12:32:05 -0400
commit3543fec3b739864c52de0a116dde3b0e5e885799 (patch)
treea0b0f470e39b6d9e4f39a70528588858a4e4e585
parent6afa6818fcf25665bbf61f0921c8c8c6fa8f223e (diff)
downloaddjango-3543fec3b739864c52de0a116dde3b0e5e885799.tar.gz
Refs #12118 -- Allowed "mode=memory" in SQLite test database names.
-rw-r--r--django/db/backends/sqlite3/creation.py8
-rw-r--r--docs/releases/1.8.6.txt3
-rw-r--r--tests/backends/tests.py24
3 files changed, 32 insertions, 3 deletions
diff --git a/django/db/backends/sqlite3/creation.py b/django/db/backends/sqlite3/creation.py
index a6e3155aa8..9f1598e3ee 100644
--- a/django/db/backends/sqlite3/creation.py
+++ b/django/db/backends/sqlite3/creation.py
@@ -11,14 +11,16 @@ class DatabaseCreation(BaseDatabaseCreation):
def _get_test_db_name(self):
test_database_name = self.connection.settings_dict['TEST']['NAME']
+ can_share_in_memory_db = self.connection.features.can_share_in_memory_db
if test_database_name and test_database_name != ':memory:':
- if 'mode=memory' in test_database_name:
+ if 'mode=memory' in test_database_name and not can_share_in_memory_db:
raise ImproperlyConfigured(
- "Using `mode=memory` parameter in the database name is not allowed, "
+ "Using a shared memory database with `mode=memory` in the "
+ "database name is not supported in your environment, "
"use `:memory:` instead."
)
return test_database_name
- if self.connection.features.can_share_in_memory_db:
+ if can_share_in_memory_db:
return 'file:memorydb_%s?mode=memory&cache=shared' % self.connection.alias
return ':memory:'
diff --git a/docs/releases/1.8.6.txt b/docs/releases/1.8.6.txt
index 9292d7835b..15b85a66c8 100644
--- a/docs/releases/1.8.6.txt
+++ b/docs/releases/1.8.6.txt
@@ -11,3 +11,6 @@ Bugfixes
* Fixed a regression causing ``ModelChoiceField`` to ignore
``prefetch_related()`` on its queryset (:ticket:`25496`).
+
+* Allowed "mode=memory" in SQLite test database name if supported
+ (:ticket:`12118`).
diff --git a/tests/backends/tests.py b/tests/backends/tests.py
index 39a2654a77..6237e860fb 100644
--- a/tests/backends/tests.py
+++ b/tests/backends/tests.py
@@ -142,6 +142,30 @@ class SQLiteTests(TestCase):
models.Item.objects.all().aggregate,
**{'complex': aggregate('last_modified') + aggregate('last_modified')})
+ def test_memory_db_test_name(self):
+ """
+ A named in-memory db should be allowed where supported.
+ """
+ from django.db.backends.sqlite3.base import DatabaseWrapper
+ settings_dict = {
+ 'TEST': {
+ 'NAME': 'file:memorydb_test?mode=memory&cache=shared',
+ }
+ }
+ wrapper = DatabaseWrapper(settings_dict)
+ creation = wrapper.creation
+ if creation.connection.features.can_share_in_memory_db:
+ expected = creation.connection.settings_dict['TEST']['NAME']
+ self.assertEqual(creation._get_test_db_name(), expected)
+ else:
+ msg = (
+ "Using a shared memory database with `mode=memory` in the "
+ "database name is not supported in your environment, "
+ "use `:memory:` instead."
+ )
+ with self.assertRaisesMessage(ImproperlyConfigured, msg):
+ creation._get_test_db_name()
+
@unittest.skipUnless(connection.vendor == 'postgresql', "Test only for PostgreSQL")
class PostgreSQLTests(TestCase):