Refs #12118 -- Allowed "mode=memory" in SQLite test database names.
This commit is contained in:
parent
6afa6818fc
commit
3543fec3b7
|
@ -11,14 +11,16 @@ class DatabaseCreation(BaseDatabaseCreation):
|
||||||
|
|
||||||
def _get_test_db_name(self):
|
def _get_test_db_name(self):
|
||||||
test_database_name = self.connection.settings_dict['TEST']['NAME']
|
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 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(
|
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."
|
"use `:memory:` instead."
|
||||||
)
|
)
|
||||||
return test_database_name
|
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 'file:memorydb_%s?mode=memory&cache=shared' % self.connection.alias
|
||||||
return ':memory:'
|
return ':memory:'
|
||||||
|
|
||||||
|
|
|
@ -11,3 +11,6 @@ Bugfixes
|
||||||
|
|
||||||
* Fixed a regression causing ``ModelChoiceField`` to ignore
|
* Fixed a regression causing ``ModelChoiceField`` to ignore
|
||||||
``prefetch_related()`` on its queryset (:ticket:`25496`).
|
``prefetch_related()`` on its queryset (:ticket:`25496`).
|
||||||
|
|
||||||
|
* Allowed "mode=memory" in SQLite test database name if supported
|
||||||
|
(:ticket:`12118`).
|
||||||
|
|
|
@ -142,6 +142,30 @@ class SQLiteTests(TestCase):
|
||||||
models.Item.objects.all().aggregate,
|
models.Item.objects.all().aggregate,
|
||||||
**{'complex': aggregate('last_modified') + aggregate('last_modified')})
|
**{'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")
|
@unittest.skipUnless(connection.vendor == 'postgresql', "Test only for PostgreSQL")
|
||||||
class PostgreSQLTests(TestCase):
|
class PostgreSQLTests(TestCase):
|
||||||
|
|
Loading…
Reference in New Issue