From 3d0a3c5fff2f9ee5e0d7ee3340878e0986b0e3b2 Mon Sep 17 00:00:00 2001 From: Chris Jerdonek Date: Wed, 17 Aug 2016 17:34:18 -0700 Subject: [PATCH] Fixed #27077 -- Made SQLite's in-memory database checks DRYer. --- django/db/backends/sqlite3/base.py | 6 +++--- django/db/backends/sqlite3/creation.py | 15 ++++++++++----- django/test/testcases.py | 4 ++-- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/django/db/backends/sqlite3/base.py b/django/db/backends/sqlite3/base.py index 870dc10353..0d6b4e3d00 100644 --- a/django/db/backends/sqlite3/base.py +++ b/django/db/backends/sqlite3/base.py @@ -233,7 +233,7 @@ class DatabaseWrapper(BaseDatabaseWrapper): # If database is in memory, closing the connection destroys the # database. To prevent accidental data loss, ignore close requests on # an in-memory db. - if not self.is_in_memory_db(self.settings_dict['NAME']): + if not self.is_in_memory_db(): BaseDatabaseWrapper.close(self) def _savepoint_allowed(self): @@ -319,8 +319,8 @@ class DatabaseWrapper(BaseDatabaseWrapper): """ self.cursor().execute("BEGIN") - def is_in_memory_db(self, name): - return name == ":memory:" or "mode=memory" in force_text(name) + def is_in_memory_db(self): + return self.creation.is_in_memory_db(self.settings_dict['NAME']) FORMAT_QMARK_REGEX = re.compile(r'(?= 1: print("Destroying old test database for alias %s..." % ( @@ -56,7 +61,7 @@ class DatabaseCreation(BaseDatabaseCreation): def get_test_db_clone_settings(self, number): orig_settings_dict = self.connection.settings_dict source_database_name = orig_settings_dict['NAME'] - if self.connection.is_in_memory_db(source_database_name): + if self.is_in_memory_db(source_database_name): return orig_settings_dict else: new_settings_dict = orig_settings_dict.copy() @@ -68,7 +73,7 @@ class DatabaseCreation(BaseDatabaseCreation): source_database_name = self.connection.settings_dict['NAME'] target_database_name = self.get_test_db_clone_settings(number)['NAME'] # Forking automatically makes a copy of an in-memory database. - if not self.connection.is_in_memory_db(source_database_name): + if not self.is_in_memory_db(source_database_name): # Erase the old test database if os.access(target_database_name, os.F_OK): if keepdb: @@ -89,7 +94,7 @@ class DatabaseCreation(BaseDatabaseCreation): sys.exit(2) def _destroy_test_db(self, test_database_name, verbosity): - if test_database_name and not self.connection.is_in_memory_db(test_database_name): + if test_database_name and not self.is_in_memory_db(test_database_name): # Remove the SQLite database file os.remove(test_database_name) @@ -103,6 +108,6 @@ class DatabaseCreation(BaseDatabaseCreation): """ test_database_name = self._get_test_db_name() sig = [self.connection.settings_dict['NAME']] - if self.connection.is_in_memory_db(test_database_name): + if self.is_in_memory_db(test_database_name): sig.append(self.connection.alias) return tuple(sig) diff --git a/django/test/testcases.py b/django/test/testcases.py index 2220ec7f52..399c8adf57 100644 --- a/django/test/testcases.py +++ b/django/test/testcases.py @@ -1299,7 +1299,7 @@ class LiveServerTestCase(TransactionTestCase): for conn in connections.all(): # If using in-memory sqlite databases, pass the connections to # the server thread. - if conn.vendor == 'sqlite' and conn.is_in_memory_db(conn.settings_dict['NAME']): + if conn.vendor == 'sqlite' and conn.is_in_memory_db(): # Explicitly enable thread-shareability for this connection conn.allow_thread_sharing = True connections_override[conn.alias] = conn @@ -1339,7 +1339,7 @@ class LiveServerTestCase(TransactionTestCase): # Restore sqlite in-memory database connections' non-shareability for conn in connections.all(): - if conn.vendor == 'sqlite' and conn.is_in_memory_db(conn.settings_dict['NAME']): + if conn.vendor == 'sqlite' and conn.is_in_memory_db(): conn.allow_thread_sharing = False @classmethod