#33159: Missing table alias in generated query after used in subquery
-------------------------------------+-------------------------------------
               Reporter:  Michal     |          Owner:  nobody
  Čihař                              |
                   Type:  Bug        |         Status:  new
              Component:  Database   |        Version:  4.0
  layer (models, ORM)                |
               Severity:  Release    |       Keywords:
  blocker                            |
           Triage Stage:             |      Has patch:  0
  Unreviewed                         |
    Needs documentation:  0          |    Needs tests:  0
Patch needs improvement:  0          |  Easy pickings:  0
                  UI/UX:  0          |
-------------------------------------+-------------------------------------
 When running our tests against 4.0a1, it fails with:

 {{{
  Traceback (most recent call last):
   File "/opt/hostedtoolcache/Python/3.9.7/x64/lib/python3.9/site-
 packages/django/db/backends/utils.py", line 84, in _execute
     return self.cursor.execute(sql, params)
 psycopg2.errors.UndefinedTable: missing FROM-clause entry for table "U0"
 LINE 1: ...UNT(*) AS "__count" FROM "trans_component" WHERE ("U0"."repo...
 }}}

 It seems that the table alias is missing from the query. Full log can be
 seen at
 https://github.com/WeblateOrg/weblate/pull/6608/checks?check_run_id=3751233865


 Reproducing outside the test case:

 {{{
 >>> from weblate.trans.models import Component
 >>> from django.db.models import Q
 >>> c = Component.objects.filter(Q(repo__in=('x', 'y')) |
 Q(repo__endswith='xxxx'))
 >>> c.count()
 0
 >>> Component.objects.filter(linked_component__in=c).count()
 0
 >>> c.count()
 Traceback (most recent call last):
   File "/home/nijel/weblate/weblate/.venv/lib/python3.9/site-
 packages/django/db/backends/utils.py", line 84, in _execute
     return self.cursor.execute(sql, params)
 psycopg2.errors.UndefinedTable: missing FROM-clause entry for table "U0"
 LINE 1: ...UNT(*) AS "__count" FROM "trans_component" WHERE ("U0"."repo...
                                                              ^


 The above exception was the direct cause of the following exception:

 Traceback (most recent call last):
   File "<console>", line 1, in <module>
   File "/home/nijel/weblate/weblate/.venv/lib/python3.9/site-
 packages/django/db/models/query.py", line 416, in count
     return self.query.get_count(using=self.db)
   File "/home/nijel/weblate/weblate/.venv/lib/python3.9/site-
 packages/django/db/models/sql/query.py", line 515, in get_count
     number = obj.get_aggregation(using, ['__count'])['__count']
   File "/home/nijel/weblate/weblate/.venv/lib/python3.9/site-
 packages/django/db/models/sql/query.py", line 500, in get_aggregation
     result = compiler.execute_sql(SINGLE)
   File "/home/nijel/weblate/weblate/.venv/lib/python3.9/site-
 packages/django/db/models/sql/compiler.py", line 1198, in execute_sql
     cursor.execute(sql, params)
   File "/home/nijel/weblate/weblate/.venv/lib/python3.9/site-
 packages/django/db/backends/utils.py", line 98, in execute
     return super().execute(sql, params)
   File "/home/nijel/weblate/weblate/.venv/lib/python3.9/site-
 packages/django/db/backends/utils.py", line 66, in execute
     return self._execute_with_wrappers(sql, params, many=False,
 executor=self._execute)
   File "/home/nijel/weblate/weblate/.venv/lib/python3.9/site-
 packages/django/db/backends/utils.py", line 75, in _execute_with_wrappers
     return executor(sql, params, many, context)
   File "/home/nijel/weblate/weblate/.venv/lib/python3.9/site-
 packages/django/db/backends/utils.py", line 84, in _execute
     return self.cursor.execute(sql, params)
   File "/home/nijel/weblate/weblate/.venv/lib/python3.9/site-
 packages/django/db/utils.py", line 90, in __exit__
     raise dj_exc_value.with_traceback(traceback) from exc_value
   File "/home/nijel/weblate/weblate/.venv/lib/python3.9/site-
 packages/django/db/backends/utils.py", line 84, in _execute
     return self.cursor.execute(sql, params)
 django.db.utils.ProgrammingError: missing FROM-clause entry for table "U0"
 LINE 1: ...UNT(*) AS "__count" FROM "trans_component" WHERE ("U0"."repo...
                                                              ^

 }}}

 Note:

 * The queryset has to consist of multiple Q
 * Calling count on the queryset works until it is used in a subquery

-- 
Ticket URL: <https://code.djangoproject.com/ticket/33159>
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 django-updates+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/048.5c12725ecab7e2a625d4135918382dd0%40djangoproject.com.

Reply via email to