Fixed #32224 -- Avoided suppressing connection errors in supports_json_field on SQLite.`
Regression in 6789ded0a6
.
Thanks Juan Garcia Alvite for the report.
This commit is contained in:
parent
b996424199
commit
f5e5aac59e
|
@ -70,11 +70,12 @@ class DatabaseFeatures(BaseDatabaseFeatures):
|
|||
|
||||
@cached_property
|
||||
def supports_json_field(self):
|
||||
try:
|
||||
with self.connection.cursor() as cursor, transaction.atomic():
|
||||
cursor.execute('SELECT JSON(\'{"a": "b"}\')')
|
||||
except OperationalError:
|
||||
return False
|
||||
with self.connection.cursor() as cursor:
|
||||
try:
|
||||
with transaction.atomic(self.connection.alias):
|
||||
cursor.execute('SELECT JSON(\'{"a": "b"}\')')
|
||||
except OperationalError:
|
||||
return False
|
||||
return True
|
||||
|
||||
can_introspect_json_field = property(operator.attrgetter('supports_json_field'))
|
||||
|
|
|
@ -24,3 +24,7 @@ Bugfixes
|
|||
|
||||
* Fixed a regression in Django 3.1 that caused the incorrect grouping by a
|
||||
``Q`` object annotation (:ticket:`32200`).
|
||||
|
||||
* Fixed a regression in Django 3.1 that caused suppressing connection errors
|
||||
when :class:`~django.db.models.JSONField` is used on SQLite
|
||||
(:ticket:`32224`).
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
from unittest import mock, skipUnless
|
||||
|
||||
from django.db import OperationalError, connection
|
||||
from django.test import TestCase
|
||||
|
||||
|
||||
@skipUnless(connection.vendor == 'sqlite', 'SQLite tests.')
|
||||
class FeaturesTests(TestCase):
|
||||
def test_supports_json_field_operational_error(self):
|
||||
if hasattr(connection.features, 'supports_json_field'):
|
||||
del connection.features.supports_json_field
|
||||
msg = 'unable to open database file'
|
||||
with mock.patch(
|
||||
'django.db.backends.base.base.BaseDatabaseWrapper.cursor',
|
||||
side_effect=OperationalError(msg),
|
||||
):
|
||||
with self.assertRaisesMessage(OperationalError, msg):
|
||||
connection.features.supports_json_field
|
Loading…
Reference in New Issue