#31835 closed Bug (fixed)
JSONField's __contains lookup doesn't work in nested values on Oracle.
Reported by: | Mariusz Felisiak | Owned by: | Mariusz Felisiak |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 3.1 |
Severity: | Release blocker | Keywords: | |
Cc: | Triage Stage: | Accepted | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
Oracle doesn't provide a native way for testing containment of JSONField. 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".
It looks that building multi-level/recursive filters with JSON_EXISTS()
is the only feasible way, but it's really complicated and can be clunky.
I think we should drop this lookup on Oracle and raise NotSupportedError
.
Some examples:
diff --git a/tests/model_fields/test_jsonfield.py b/tests/model_fields/test_jsonfield.py index 3ce7fc51a9..b659675ec8 100644 --- a/tests/model_fields/test_jsonfield.py +++ b/tests/model_fields/test_jsonfield.py @@ -445,8 +445,12 @@ class TestQuerying(TestCase): tests = [ ({}, self.objs[2:5] + self.objs[6:8]), ({'baz': {'a': 'b', 'c': 'd'}}, [self.objs[7]]), + ({'baz': {'a': 'b'}}, [self.objs[7]]), + ({'baz': {'c': 'd'}}, [self.objs[7]]), ({'k': True, 'l': False}, [self.objs[6]]), ({'d': ['e', {'f': 'g'}]}, [self.objs[4]]), + ({'d': ['e']}, [self.objs[4]]), + ({'d': [{'f': 'g'}]}, [self.objs[4]]), ([1, [2]], [self.objs[5]]), ({'n': [None]}, [self.objs[4]]), ({'j': None}, [self.objs[4]]),
Change History (4)
comment:1 by , 4 years ago
Summary: | JSONField's __cointains lookup doesn't work in nested values on Oracle. → JSONField's __contains lookup doesn't work in nested values on Oracle. |
---|---|
Triage Stage: | Unreviewed → Accepted |
comment:2 by , 4 years ago
Has patch: | set |
---|
PR