diff --git a/django/contrib/gis/db/backends/spatialite/base.py b/django/contrib/gis/db/backends/spatialite/base.py index f23ec53cf8..aea52f5777 100644 --- a/django/contrib/gis/db/backends/spatialite/base.py +++ b/django/contrib/gis/db/backends/spatialite/base.py @@ -38,22 +38,7 @@ class DatabaseWrapper(SQLiteDatabaseWrapper): def _cursor(self): if self.connection is None: - ## The following is the same as in django.db.backends.sqlite3.base ## - settings_dict = self.settings_dict - if not settings_dict['NAME']: - raise ImproperlyConfigured("Please fill out the database NAME in the settings module before using the database.") - kwargs = { - 'database': settings_dict['NAME'], - 'detect_types': Database.PARSE_DECLTYPES | Database.PARSE_COLNAMES, - } - kwargs.update(settings_dict['OPTIONS']) - self.connection = Database.connect(**kwargs) - # Register extract, date_trunc, and regexp functions. - self.connection.create_function("django_extract", 2, _sqlite_extract) - self.connection.create_function("django_date_trunc", 2, _sqlite_date_trunc) - self.connection.create_function("regexp", 2, _sqlite_regexp) - self.connection.create_function("django_format_dtdelta", 5, _sqlite_format_dtdelta) - connection_created.send(sender=self.__class__, connection=self) + self._sqlite_create_connection() ## From here on, customized for GeoDjango ## diff --git a/django/db/backends/sqlite3/base.py b/django/db/backends/sqlite3/base.py index b5d38bb367..f5f0c644e9 100644 --- a/django/db/backends/sqlite3/base.py +++ b/django/db/backends/sqlite3/base.py @@ -230,39 +230,42 @@ class DatabaseWrapper(BaseDatabaseWrapper): self.introspection = DatabaseIntrospection(self) self.validation = BaseDatabaseValidation(self) + def _sqlite_create_connection(self): + settings_dict = self.settings_dict + if not settings_dict['NAME']: + from django.core.exceptions import ImproperlyConfigured + raise ImproperlyConfigured("Please fill out the database NAME in the settings module before using the database.") + kwargs = { + 'database': settings_dict['NAME'], + 'detect_types': Database.PARSE_DECLTYPES | Database.PARSE_COLNAMES, + } + kwargs.update(settings_dict['OPTIONS']) + # Always allow the underlying SQLite connection to be shareable + # between multiple threads. The safe-guarding will be handled at a + # higher level by the `BaseDatabaseWrapper.allow_thread_sharing` + # property. This is necessary as the shareability is disabled by + # default in pysqlite and it cannot be changed once a connection is + # opened. + if 'check_same_thread' in kwargs and kwargs['check_same_thread']: + warnings.warn( + 'The `check_same_thread` option was provided and set to ' + 'True. It will be overriden with False. Use the ' + '`DatabaseWrapper.allow_thread_sharing` property instead ' + 'for controlling thread shareability.', + RuntimeWarning + ) + kwargs.update({'check_same_thread': False}) + self.connection = Database.connect(**kwargs) + # Register extract, date_trunc, and regexp functions. + self.connection.create_function("django_extract", 2, _sqlite_extract) + self.connection.create_function("django_date_trunc", 2, _sqlite_date_trunc) + self.connection.create_function("regexp", 2, _sqlite_regexp) + self.connection.create_function("django_format_dtdelta", 5, _sqlite_format_dtdelta) + connection_created.send(sender=self.__class__, connection=self) + def _cursor(self): if self.connection is None: - settings_dict = self.settings_dict - if not settings_dict['NAME']: - from django.core.exceptions import ImproperlyConfigured - raise ImproperlyConfigured("Please fill out the database NAME in the settings module before using the database.") - kwargs = { - 'database': settings_dict['NAME'], - 'detect_types': Database.PARSE_DECLTYPES | Database.PARSE_COLNAMES, - } - kwargs.update(settings_dict['OPTIONS']) - # Always allow the underlying SQLite connection to be shareable - # between multiple threads. The safe-guarding will be handled at a - # higher level by the `BaseDatabaseWrapper.allow_thread_sharing` - # property. This is necessary as the shareability is disabled by - # default in pysqlite and it cannot be changed once a connection is - # opened. - if 'check_same_thread' in kwargs and kwargs['check_same_thread']: - warnings.warn( - 'The `check_same_thread` option was provided and set to ' - 'True. It will be overriden with False. Use the ' - '`DatabaseWrapper.allow_thread_sharing` property instead ' - 'for controlling thread shareability.', - RuntimeWarning - ) - kwargs.update({'check_same_thread': False}) - self.connection = Database.connect(**kwargs) - # Register extract, date_trunc, and regexp functions. - self.connection.create_function("django_extract", 2, _sqlite_extract) - self.connection.create_function("django_date_trunc", 2, _sqlite_date_trunc) - self.connection.create_function("regexp", 2, _sqlite_regexp) - self.connection.create_function("django_format_dtdelta", 5, _sqlite_format_dtdelta) - connection_created.send(sender=self.__class__, connection=self) + self._sqlite_create_connection() return self.connection.cursor(factory=SQLiteCursorWrapper) def check_constraints(self, table_names=None):