mirror of
https://github.com/django/django.git
synced 2025-08-04 02:48:35 +00:00
Fixed #31835 -- Dropped support for JSONField __contains lookup on Oracle.
The current implementation works only for basic examples without supporting nested structures and doesn't follow "the general principle that the contained object must match the containing object as to structure and data contents, possibly after discarding some non-matching array elements or object key/value pairs from the containing object".
This commit is contained in:
parent
628c4a26ee
commit
02447fb133
3 changed files with 22 additions and 20 deletions
|
@ -441,6 +441,10 @@ class TestQuerying(TestCase):
|
|||
[self.objs[3], self.objs[4], self.objs[6]],
|
||||
)
|
||||
|
||||
@skipIf(
|
||||
connection.vendor == 'oracle',
|
||||
"Oracle doesn't support contains lookup.",
|
||||
)
|
||||
def test_contains(self):
|
||||
tests = [
|
||||
({}, self.objs[2:5] + self.objs[6:8]),
|
||||
|
@ -456,6 +460,17 @@ class TestQuerying(TestCase):
|
|||
qs = NullableJSONModel.objects.filter(value__contains=value)
|
||||
self.assertSequenceEqual(qs, expected)
|
||||
|
||||
@skipUnless(
|
||||
connection.vendor == 'oracle',
|
||||
"Oracle doesn't support contains lookup.",
|
||||
)
|
||||
def test_contains_unsupported(self):
|
||||
msg = 'contains lookup is not supported on Oracle.'
|
||||
with self.assertRaisesMessage(NotSupportedError, msg):
|
||||
NullableJSONModel.objects.filter(
|
||||
value__contains={'baz': {'a': 'b', 'c': 'd'}},
|
||||
).get()
|
||||
|
||||
@skipUnlessDBFeature('supports_primitives_in_json_field')
|
||||
def test_contains_primitives(self):
|
||||
for value in self.primitives:
|
||||
|
@ -662,12 +677,12 @@ class TestQuerying(TestCase):
|
|||
('value__baz__has_key', 'c'),
|
||||
('value__baz__has_keys', ['a', 'c']),
|
||||
('value__baz__has_any_keys', ['a', 'x']),
|
||||
('value__contains', KeyTransform('bax', 'value')),
|
||||
('value__has_key', KeyTextTransform('foo', 'value')),
|
||||
)
|
||||
# contained_by lookup is not supported on Oracle.
|
||||
# contained_by and contains lookups are not supported on Oracle.
|
||||
if connection.vendor != 'oracle':
|
||||
tests += (
|
||||
('value__contains', KeyTransform('bax', 'value')),
|
||||
('value__baz__contained_by', {'a': 'b', 'c': 'd', 'e': 'f'}),
|
||||
(
|
||||
'value__contained_by',
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue