#26071: IN queries inside conditional case expressions crashes on django 1.8
-------------------------------------+-------------------------------------
     Reporter:  albertein            |                    Owner:  nobody
         Type:  Bug                  |                   Status:  new
    Component:  Database layer       |                  Version:  1.8
  (models, ORM)                      |
     Severity:  Normal               |               Resolution:
     Keywords:                       |             Triage Stage:
                                     |  Unreviewed
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
Description changed by albertein:

Old description:

> When making a IN filter expression inside a conditional case expression
> django crashes with the following exception:
>
>  AttributeError: 'SubqueryConstraint' object has no attribute 'lhs'
>
> The stacktrace looks like:
>
> {{{
>     lib/python2.7/site-packages/django/db/models/query.py line 794 in
> annotate
>       obj.query.add_annotation(annotation, alias, is_summary=False)
>     lib/python2.7/site-packages/django/db/models/sql/query.py line 983 in
> add_annotation
>       summarize=is_summary)
>     lib/python2.7/site-packages/django/db/models/aggregates.py line 21 in
> resolve_expression
>       if c.source_expressions[0].contains_aggregate and not summarize:
>     lib/python2.7/site-packages/django/utils/functional.py line 59 in
> __get__
>       res = instance.__dict__[self.name] = self.func(instance)
>     lib/python2.7/site-packages/django/db/models/expressions.py line 179
> in contains_aggregate
>       if expr and expr.contains_aggregate:
>     lib/python2.7/site-packages/django/utils/functional.py line 59 in
> __get__
>       res = instance.__dict__[self.name] = self.func(instance)
>     lib/python2.7/site-packages/django/db/models/expressions.py line 179
> in contains_aggregate
>       if expr and expr.contains_aggregate:
>     lib/python2.7/site-packages/django/utils/functional.py line 59 in
> __get__
>       res = instance.__dict__[self.name] = self.func(instance)
>     lib/python2.7/site-packages/django/db/models/sql/where.py line 324 in
> contains_aggregate
>       return self._contains_aggregate(self)
>     lib/python2.7/site-packages/django/db/models/sql/where.py line 320 in
> _contains_aggregate
>       return any(cls._contains_aggregate(c) for c in obj.children)
>     lib/python2.7/site-packages/django/db/models/sql/where.py line 320 in
> <genexpr>
>       return any(cls._contains_aggregate(c) for c in obj.children)
>     lib/python2.7/site-packages/django/db/models/sql/where.py line 319 in
> _contains_aggregate
>       return getattr(obj.lhs, 'contains_aggregate', False) or
> getattr(obj.rhs, 'contains_aggregate', False)
>    AttributeError: 'SubqueryConstraint' object has no attribute 'lhs'
> }}}
>
> This error is already fixed on django 1.9 branch. The problem was fixed
> with this commit:
>
> https://github.com/django/django/commit/afe0bb7b13bb8dc4370f32225238012c873b0ee3
> #diff-73bc0dcb1a1c931adcf1d344abca22ffR180
>
> I'll create a PR with the changes from that commit that fixes the issue,
> not sure if the entire commit can be (or should be) backported to 1.8
>
> UPDATE: PR with only the changes needed and its test:
> https://github.com/django/django/pull/5967

New description:

 When making a IN filter expression inside a conditional case expression
 django crashes with the following exception:

 {{{ AttributeError: 'SubqueryConstraint' object has no attribute 'lhs' }}}

 The stacktrace looks like:

 {{{
     lib/python2.7/site-packages/django/db/models/query.py line 794 in
 annotate
       obj.query.add_annotation(annotation, alias, is_summary=False)
     lib/python2.7/site-packages/django/db/models/sql/query.py line 983 in
 add_annotation
       summarize=is_summary)
     lib/python2.7/site-packages/django/db/models/aggregates.py line 21 in
 resolve_expression
       if c.source_expressions[0].contains_aggregate and not summarize:
     lib/python2.7/site-packages/django/utils/functional.py line 59 in
 __get__
       res = instance.__dict__[self.name] = self.func(instance)
     lib/python2.7/site-packages/django/db/models/expressions.py line 179
 in contains_aggregate
       if expr and expr.contains_aggregate:
     lib/python2.7/site-packages/django/utils/functional.py line 59 in
 __get__
       res = instance.__dict__[self.name] = self.func(instance)
     lib/python2.7/site-packages/django/db/models/expressions.py line 179
 in contains_aggregate
       if expr and expr.contains_aggregate:
     lib/python2.7/site-packages/django/utils/functional.py line 59 in
 __get__
       res = instance.__dict__[self.name] = self.func(instance)
     lib/python2.7/site-packages/django/db/models/sql/where.py line 324 in
 contains_aggregate
       return self._contains_aggregate(self)
     lib/python2.7/site-packages/django/db/models/sql/where.py line 320 in
 _contains_aggregate
       return any(cls._contains_aggregate(c) for c in obj.children)
     lib/python2.7/site-packages/django/db/models/sql/where.py line 320 in
 <genexpr>
       return any(cls._contains_aggregate(c) for c in obj.children)
     lib/python2.7/site-packages/django/db/models/sql/where.py line 319 in
 _contains_aggregate
       return getattr(obj.lhs, 'contains_aggregate', False) or
 getattr(obj.rhs, 'contains_aggregate', False)
    AttributeError: 'SubqueryConstraint' object has no attribute 'lhs'
 }}}

 This error is already fixed on django 1.9 branch. The problem was fixed
 with this commit:

 
https://github.com/django/django/commit/afe0bb7b13bb8dc4370f32225238012c873b0ee3
 #diff-73bc0dcb1a1c931adcf1d344abca22ffR180

 I'll create a PR with the changes from that commit that fixes the issue,
 not sure if the entire commit can be (or should be) backported to 1.8

 UPDATE: PR with only the changes needed and its test:
 https://github.com/django/django/pull/5967

--

--
Ticket URL: <https://code.djangoproject.com/ticket/26071#comment:3>
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 post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/067.43e529899083f1a53be9ff933157aeef%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to