#35369: MySQL .union().aggregate() raises Unknown Column
-------------------------------------+-------------------------------------
     Reporter:  DS/Charlie           |                    Owner:  nobody
         Type:  Bug                  |                   Status:  new
    Component:  Database layer       |                  Version:  5.0
  (models, ORM)                      |
     Severity:  Normal               |               Resolution:
     Keywords:                       |             Triage Stage:
  union,aggregate,mysql              |  Unreviewed
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
Description changed by DS/Charlie:

Old description:

> {{{
>
> class BugModel(models.Model):
>     foo = models.CharField(max_length=255)
>
> class BugTestCase(TestCase):
>     def test_bug(self):
>         a = BugModel.objects.all()
>         b = BugModel.objects.all()
>
>         ab = a.union(b, all=False)
>         """
>             (
>                 SELECT `bugapp_bugmodel`.`id` AS `col1`,
> `bugapp_bugmodel`.`foo` AS `col2`
>                 FROM `bugapp_bugmodel`
>             ) UNION (
>                 SELECT `bugapp_bugmodel`.`id` AS `col1`,
> `bugapp_bugmodel`.`foo` AS `col2`
>                 FROM `bugapp_bugmodel`
>             )
>         """
>
>         ab.aggregate(max=Max("foo"))
>         """
>         SELECT MAX(`__col1`)
>         FROM (
>             (
>                 SELECT  `bugapp_bugmodel`.`id` AS `col1`,
> `bugapp_bugmodel`.`foo` AS `col2`
>                 FROM `bugapp_bugmodel`
>             ) UNION (
>                 SELECT `bugapp_bugmodel`.`id` AS `col1`,
> `bugapp_bugmodel`.`foo` AS `col2`
>                 FROM `bugapp_bugmodel`
>             )
>         ) subquery
>

>         Traceback (most recent call last):
>           File "/private/tmp/djangobug/venv/lib/python3.12/site-
> packages/django/db/backends/utils.py", line 89, in _execute
>             return self.cursor.execute(sql, params)
>                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>           File "/private/tmp/djangobug/venv/lib/python3.12/site-
> packages/django/db/backends/mysql/base.py", line 75, in execute
>             return self.cursor.execute(query, args)
>                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>           File "/private/tmp/djangobug/venv/lib/python3.12/site-
> packages/MySQLdb/cursors.py", line 179, in execute
>             res = self._query(mogrified_query)
>                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>           File "/private/tmp/djangobug/venv/lib/python3.12/site-
> packages/MySQLdb/cursors.py", line 330, in _query
>             db.query(q)
>           File "/private/tmp/djangobug/venv/lib/python3.12/site-
> packages/MySQLdb/connections.py", line 261, in query
>             _mysql.connection.query(self, query)
>         MySQLdb.OperationalError: (1054, "Unknown column '__col1' in
> 'field list'")
>         """
> }}}
>

> Django 4.2.11 and 5.0.4
> mysqlclient 2.2.4
>
> all in a clean virtualenv on python 3.12.2

New description:

 {{{

 class BugModel(models.Model):
     foo = models.CharField(max_length=255)

 class BugTestCase(TestCase):
     def test_bug(self):
         a = BugModel.objects.all()
         b = BugModel.objects.all()

         ab = a.union(b)
         """
             (
                 SELECT `bugapp_bugmodel`.`id` AS `col1`,
 `bugapp_bugmodel`.`foo` AS `col2`
                 FROM `bugapp_bugmodel`
             ) UNION (
                 SELECT `bugapp_bugmodel`.`id` AS `col1`,
 `bugapp_bugmodel`.`foo` AS `col2`
                 FROM `bugapp_bugmodel`
             )
         """

         ab.aggregate(max=Max("foo"))
         """
         SELECT MAX(`__col1`)
         FROM (
             (
                 SELECT  `bugapp_bugmodel`.`id` AS `col1`,
 `bugapp_bugmodel`.`foo` AS `col2`
                 FROM `bugapp_bugmodel`
             ) UNION (
                 SELECT `bugapp_bugmodel`.`id` AS `col1`,
 `bugapp_bugmodel`.`foo` AS `col2`
                 FROM `bugapp_bugmodel`
             )
         ) subquery


         Traceback (most recent call last):
           File "/private/tmp/djangobug/venv/lib/python3.12/site-
 packages/django/db/backends/utils.py", line 89, in _execute
             return self.cursor.execute(sql, params)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
           File "/private/tmp/djangobug/venv/lib/python3.12/site-
 packages/django/db/backends/mysql/base.py", line 75, in execute
             return self.cursor.execute(query, args)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
           File "/private/tmp/djangobug/venv/lib/python3.12/site-
 packages/MySQLdb/cursors.py", line 179, in execute
             res = self._query(mogrified_query)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
           File "/private/tmp/djangobug/venv/lib/python3.12/site-
 packages/MySQLdb/cursors.py", line 330, in _query
             db.query(q)
           File "/private/tmp/djangobug/venv/lib/python3.12/site-
 packages/MySQLdb/connections.py", line 261, in query
             _mysql.connection.query(self, query)
         MySQLdb.OperationalError: (1054, "Unknown column '__col1' in
 'field list'")
         """
 }}}


 Django 4.2.11 and 5.0.4
 mysqlclient 2.2.4

 all in a clean virtualenv on python 3.12.2

--
-- 
Ticket URL: <https://code.djangoproject.com/ticket/35369#comment:2>
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/0107018ed2ea0afe-9e4211b6-08a1-4411-92f0-1465c8c99ae0-000000%40eu-central-1.amazonses.com.

Reply via email to