#34992: MariaDB does not support functional group by dependencies
-------------------------------------+-------------------------------------
               Reporter:  Matthew    |          Owner:  nobody
  Somerville                         |
                   Type:  Bug        |         Status:  new
              Component:  Database   |        Version:  4.2
  layer (models, ORM)                |
               Severity:  Normal     |       Keywords:
           Triage Stage:             |      Has patch:  0
  Unreviewed                         |
    Needs documentation:  0          |    Needs tests:  0
Patch needs improvement:  0          |  Easy pickings:  0
                  UI/UX:  0          |
-------------------------------------+-------------------------------------
 Requested to be opened from comment 11 on #34978. If you're using MariaDB
 with ONLY_FULL_GROUP_BY turned on, all queries that end up using a `GROUP
 BY` fail. Given a model such as:

 {{{#!python
 class Author(models.Model):
     pass

 class Play(models.Model):
     title = models.CharField(max_length=100)
     authors = models.ManyToManyField(Author)
 }}}

 Then `list(Play.objects.annotate(Count('authors')))` generates the SQL:

 {{{#!sql
 SELECT app_play.id, app_play.title, COUNT(app_play_authors.author_id) AS
 authors__count
 FROM app_play
 LEFT OUTER JOIN app_play_authors ON (app_play.id =
 app_play_authors.play_id)
 GROUP BY app_play.id
 ORDER BY NULL
 }}}

 Which errors with `django.db.utils.OperationalError: (1055,
 "'mariadbtest.app_play.title' isn't in GROUP BY")`

 Unlike MySQL since 5.7.5 (release notes: "MySQL now recognizes when a
 nonaggregated selected column is functionally dependent on (uniquely
 determined by) GROUP BY columns."), MariaDB does not support this feature.
 But Django 4.2 assumes both MySQL and MariaDB support it.

 Simon's comment on #34978 said: "The solution will likely be to turn off
 the allows_group_by_selected_pks feature on MariaDB when
 ONLY_FULL_GROUP_BY mode is turned on. Note that the
 allows_group_by_selected_pks feature is different from the
 allows_group_by_pk feature removed in
 041551d716b69ee7c81199eee86a2d10a72e15ab."

-- 
Ticket URL: <https://code.djangoproject.com/ticket/34992>
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/0107018bfb9bf69d-33e93533-b9dd-45b7-9f92-9f0f3a0b99b6-000000%40eu-central-1.amazonses.com.

Reply via email to