Do not insert page titles into querycache.qc_value
authormszabo-wikia <mszabo@wikia-inc.com>
Wed, 14 Mar 2018 14:38:14 +0000 (15:38 +0100)
committerReedy <reedy@wikimedia.org>
Mon, 4 Nov 2019 16:59:05 +0000 (16:59 +0000)
commit9c7f6734c397a954b8eaa5ec73876f2b4bf92afb
treed57d179300b43802f54550fd40d6824072c4dbc0
parent25242105e8fd03c9900250bdf9ea91be9a286625
Do not insert page titles into querycache.qc_value

querycache.qc_value column is used to store a numeric value related
to the query results, generally a COUNT(*) aggregation or timestamp,
but some query pages insert the page title here after passing it through
PHP's intval() function to parse it into a number.
While this will cause 0 to be inserted for pages whose title is not numeric
(i.e. most titles), a DB error may occur for numeric page titles that exceed
the maximum value for unsigned integers, depending on relevant DB settings,
such as MySQL's strict mode.[1]

This patch changes query pages not to insert page titles into the qc_value
column. Also, it adds the getOrderFields() method to query pages that were
missing them, to ensure that the result set inserted into the querycache
table is correctly ordered by title.

---
[1] https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html#sql-mode-strict

Bug: T181658
Change-Id: I1ef297257c6f419826ba4ffc6e875389ccec46db
(cherry picked from commit 335fabf5fba49fa43c0e876996baa165a7ff4350)
includes/specials/SpecialBrokenRedirects.php
includes/specials/SpecialDoubleRedirects.php
includes/specials/SpecialListRedirects.php
includes/specials/SpecialLonelyPages.php
includes/specials/SpecialUncategorizedImages.php
includes/specials/SpecialUncategorizedPages.php
includes/specials/SpecialUnusedCategories.php
includes/specials/SpecialUnusedTemplates.php
includes/specials/SpecialWithoutInterwiki.php
tests/phpunit/includes/specials/SpecialUncategorizedCategoriesTest.php