diff options
author | Riccardo Magliocchetti <riccardo.magliocchetti@gmail.com> | 2015-10-05 19:25:06 +0200 |
---|---|---|
committer | Tim Graham <timograham@gmail.com> | 2015-10-06 12:32:05 -0400 |
commit | 3543fec3b739864c52de0a116dde3b0e5e885799 (patch) | |
tree | a0b0f470e39b6d9e4f39a70528588858a4e4e585 | |
parent | 6afa6818fcf25665bbf61f0921c8c8c6fa8f223e (diff) | |
download | django-3543fec3b739864c52de0a116dde3b0e5e885799.tar.gz |
Refs #12118 -- Allowed "mode=memory" in SQLite test database names.
-rw-r--r-- | django/db/backends/sqlite3/creation.py | 8 | ||||
-rw-r--r-- | docs/releases/1.8.6.txt | 3 | ||||
-rw-r--r-- | tests/backends/tests.py | 24 |
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): |