#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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/048.5c12725ecab7e2a625d4135918382dd0%40djangoproject.com.