#32182 closed Bug (fixed)
Nested KeyTransform errors when used with a subquery on PostgreSQL.
Reported by: | Hannes Ljungberg | Owned by: | Hannes Ljungberg |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 3.1 |
Severity: | Release blocker | Keywords: | |
Cc: | Triage Stage: | Ready for checkin | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
Annotating a subquery which returns a JSONField and then applying a nested KeyTransform on that annotation results in a TypeError
.
Example:
NullableJSONModel.objects.annotate( subquery_value=models.Subquery( NullableJSONModel.objects.filter(id=OuterRef("id")).values("value")[:1] ), expr=KeyTransform("foo", KeyTransform("bar", "subquery_value")), )
Traceback (most recent call last): File "/tests/django/tests/model_fields/test_jsonfield.py", line 421, in test_nested_key_transform_on_subquery [self.objs[4]], File "/usr/local/lib/python3.6/unittest/case.py", line 1005, in assertSequenceEqual difflib.ndiff(pprint.pformat(seq1).splitlines(), File "/usr/local/lib/python3.6/pprint.py", line 58, in pformat compact=compact).pformat(object) File "/usr/local/lib/python3.6/pprint.py", line 144, in pformat self._format(object, sio, 0, 0, {}, 0) File "/usr/local/lib/python3.6/pprint.py", line 161, in _format rep = self._repr(object, context, level) File "/usr/local/lib/python3.6/pprint.py", line 393, in _repr self._depth, level) File "/usr/local/lib/python3.6/pprint.py", line 405, in format return _safe_repr(object, context, maxlevels, level) File "/usr/local/lib/python3.6/pprint.py", line 555, in _safe_repr rep = repr(object) File "/tests/django/django/db/models/query.py", line 256, in __repr__ data = list(self[:REPR_OUTPUT_SIZE + 1]) File "/tests/django/django/db/models/query.py", line 280, in __iter__ self._fetch_all() File "/tests/django/django/db/models/query.py", line 1320, in _fetch_all self._result_cache = list(self._iterable_class(self)) File "/tests/django/django/db/models/query.py", line 51, in __iter__ results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size) File "/tests/django/django/db/models/sql/compiler.py", line 1147, in execute_sql sql, params = self.as_sql() File "/tests/django/django/db/models/sql/compiler.py", line 498, in as_sql extra_select, order_by, group_by = self.pre_sql_setup() File "/tests/django/django/db/models/sql/compiler.py", line 55, in pre_sql_setup self.setup_query() File "/tests/django/django/db/models/sql/compiler.py", line 46, in setup_query self.select, self.klass_info, self.annotation_col_map = self.get_select() File "/tests/django/django/db/models/sql/compiler.py", line 262, in get_select sql, params = self.compile(col) File "/tests/django/django/db/models/sql/compiler.py", line 428, in compile sql, params = vendor_impl(self, self.connection) File "/tests/django/django/db/models/fields/json.py", line 305, in as_postgresql return '(%s %s %%s)' % (lhs, self.postgres_nested_operator), params + [key_transforms,] TypeError: can only concatenate tuple (not "list") to tuple
Change History (5)
comment:1 by , 4 years ago
Has patch: | set |
---|
comment:2 by , 4 years ago
Severity: | Normal → Release blocker |
---|---|
Summary: | Nested KeyTransform errors when used with a subquery → Nested KeyTransform errors when used with a subquery on PostgreSQL. |
Triage Stage: | Unreviewed → Accepted |
It's not a regression, but a bug in a new feature.
comment:3 by , 4 years ago
Triage Stage: | Accepted → Ready for checkin |
---|
Note:
See TracTickets
for help on using tickets.
PR: https://github.com/django/django/pull/13657