#32182: Nested KeyTransform errors when used with a subquery
-------------------------------------+-------------------------------------
               Reporter:  Hannes     |          Owner:  Hannes Ljungberg
  Ljungberg                          |
                   Type:  Bug        |         Status:  assigned
              Component:  Database   |        Version:  3.1
  layer (models, ORM)                |
               Severity:  Normal     |       Keywords:
           Triage Stage:             |      Has patch:  0
  Unreviewed                         |
    Needs documentation:  0          |    Needs tests:  0
Patch needs improvement:  0          |  Easy pickings:  0
                  UI/UX:  0          |
-------------------------------------+-------------------------------------
 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
 }}}

-- 
Ticket URL: <https://code.djangoproject.com/ticket/32182>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/052.fa4079eebe85a5613e96d719f35744d3%40djangoproject.com.

Reply via email to