Page MenuHomePhabricator

Run tests with ONLY_FULL_GROUP_BY
Closed, ResolvedPublic

Description

I'm filing a task for my proposed core change since it looks like it'll need quite a few extension updates, and it's nice to have a task to link extension updates together and to refer to in release notes.

Following the SQL standard, PostgreSQL throws an error if you try to select fields that have ambiguous values according to the GROUP BY clause. In MySQL, this is optional -- by default it will just give you some random value from the selected rows.

> CREATE TABLE test (a INT, b INT);
> INSERT INTO test VALUES (1, 1), (1, 2), (2, 1), (2, 2);
> SELECT a, b FROM test GROUP BY a;
+------+------+
| a    | b    |
+------+------+
|    1 |    1 |
|    2 |    1 |
+------+------+
2 rows in set (0.001 sec)

The value of b here is 1 by some accident of the order in which rows were scanned.

With sql_mode='ONLY_FULL_GROUP_BY', MySQL matches PostgreSQL's behaviour:

> SET sql_mode='ONLY_FULL_GROUP_BY';
> SELECT a, b FROM test GROUP BY a;
ERROR 1055 (42000): 'mw.test.b' isn't in GROUP BY

PostgreSQL does not have a corresponding mode in which it is as lax as MySQL. So ONLY_FULL_GROUP_BY is the only way to get consistent behaviour between the two DBMSs. As I wrote in T164898, the maintenance burden of PostgreSQL support is minimised when they are as consistent as possible.

The initial change I'm proposing in this direction is to use ONLY_FULL_GROUP_BY during PHPUnit tests. Core tests are fine with this, since they are already run against PostgreSQL in CI, but some extension tests break.

Event Timeline

Change 683115 had a related patch set uploaded (by Tim Starling; author: Tim Starling):

[mediawiki/core@master] Run tests with ONLY_FULL_GROUP_BY

https://gerrit.wikimedia.org/r/683115

Change 683122 had a related patch set uploaded (by Tim Starling; author: Tim Starling):

[mediawiki/extensions/Echo@master] EchoEventMapper: use DISTINCT instead of GROUP BY

https://gerrit.wikimedia.org/r/683122

Change 683472 had a related patch set uploaded (by Tim Starling; author: Tim Starling):

[mediawiki/extensions/CheckUser@master] Fix CompareService to work with ONLY_FULL_GROUP_BY

https://gerrit.wikimedia.org/r/683472

Change 683478 had a related patch set uploaded (by Tim Starling; author: Tim Starling):

[mediawiki/extensions/Translate@master] Make TranslatablePageMessageGroupStore work with ONLY_FULL_GROUP_BY

https://gerrit.wikimedia.org/r/683478

Change 683472 merged by jenkins-bot:

[mediawiki/extensions/CheckUser@master] Fix CompareService to work with ONLY_FULL_GROUP_BY

https://gerrit.wikimedia.org/r/683472

Change 683122 merged by jenkins-bot:

[mediawiki/extensions/Echo@master] EchoEventMapper: use DISTINCT instead of GROUP BY

https://gerrit.wikimedia.org/r/683122

Change 683478 merged by jenkins-bot:

[mediawiki/extensions/Translate@master] Make TranslatablePageMessageGroupStore work with ONLY_FULL_GROUP_BY

https://gerrit.wikimedia.org/r/683478

Change 683115 merged by jenkins-bot:

[mediawiki/core@master] Run tests with ONLY_FULL_GROUP_BY

https://gerrit.wikimedia.org/r/683115

Change 690005 had a related patch set uploaded (by Umherirrender; author: Umherirrender):

[mediawiki/extensions/PageTriage@master] Fix GROUP BY in PageTriageUtil

https://gerrit.wikimedia.org/r/690005

Change 690005 merged by jenkins-bot:

[mediawiki/extensions/PageTriage@master] Fix GROUP BY in PageTriageUtil

https://gerrit.wikimedia.org/r/690005

Change 694310 had a related patch set uploaded (by Nikerabbit; author: Tim Starling):

[mediawiki/extensions/Translate@mleb] Make TranslatablePageMessageGroupStore work with ONLY_FULL_GROUP_BY

https://gerrit.wikimedia.org/r/694310

Change 694310 merged by Abijeet Patro:

[mediawiki/extensions/Translate@mleb] Make TranslatablePageMessageGroupStore work with ONLY_FULL_GROUP_BY

https://gerrit.wikimedia.org/r/694310

Change 701871 had a related patch set uploaded (by Nikerabbit; author: Nikerabbit):

[mediawiki/extensions/Translate@master] Make Special:PageTranslation work with ONLY_FULL_GROUP_BY

https://gerrit.wikimedia.org/r/701871

Change 701871 merged by jenkins-bot:

[mediawiki/extensions/Translate@master] Make Special:PageTranslation work with ONLY_FULL_GROUP_BY

https://gerrit.wikimedia.org/r/701871

tstarling claimed this task.

We are now running tests with ONLY_FULL_GROUP_BY, so this is resolved. I see some other changes were linked to this task, but it wasn't really intended to be a tracking task.