﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
33159	Missing table alias in generated query after used in subquery	Michal Čihař	Mariusz Felisiak	"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"	Bug	closed	Database layer (models, ORM)	4.0	Release blocker	fixed		Keryn Knight	Accepted	1	0	0	0	0	0
