http://www.mediawiki.org/wiki/Special:Code/MediaWiki/89512
Revision: 89512
Author: reedy
Date: 2011-06-05 17:49:00 +0000 (Sun, 05 Jun 2011)
Log Message:
-----------
* (bug 25734) API: possible issue with revids validation
It seems, on databases with loads of revision rows (ie enwiki, not testwiki),
although the EXPLAIN is sane, it's doing something stupid (table scan? I've
nfi). So, as any revision id's less than 0 aren't valid, just prefilter them
from the database SQL query
mysql> DESCRIBE SELECT /* ApiPageSet::initFromRevIDs */ rev_id,rev_page FROM
`revision`,`page` WHERE rev_id IN ('10','20','30','40','-50','60') AND
(rev_page = page_id);
+----+-------------+----------+-------+-------------------------------+---------+---------+-----------------------+-------+--------------------------+
| id | select_type | table | type | possible_keys | key
| key_len | ref | rows | Extra |
+----+-------------+----------+-------+-------------------------------+---------+---------+-----------------------+-------+--------------------------+
| 1 | SIMPLE | page | index | PRIMARY | PRIMARY
| 4 | NULL | 22982 | Using index |
| 1 | SIMPLE | revision | ref | PRIMARY,rev_id,page_timestamp | PRIMARY
| 4 | testwiki.page.page_id | 1 | Using where; Using index |
+----+-------------+----------+-------+-------------------------------+---------+---------+-----------------------+-------+--------------------------+
Modified Paths:
--------------
trunk/phase3/RELEASE-NOTES-1.19
trunk/phase3/includes/api/ApiPageSet.php
Modified: trunk/phase3/RELEASE-NOTES-1.19
===================================================================
--- trunk/phase3/RELEASE-NOTES-1.19 2011-06-05 17:46:32 UTC (rev 89511)
+++ trunk/phase3/RELEASE-NOTES-1.19 2011-06-05 17:49:00 UTC (rev 89512)
@@ -96,6 +96,7 @@
* (bug 29221) Expose oldrevid in watchlist output
* (bug 29267) always give the servername for meta=siteinfo&siprop=dbrepllag
* (bug 28897) rvparse doesn’t seem to work with rvsection
+* (bug 25734) API: possible issue with revids validation
=== Languages updated in 1.19 ===
Modified: trunk/phase3/includes/api/ApiPageSet.php
===================================================================
--- trunk/phase3/includes/api/ApiPageSet.php 2011-06-05 17:46:32 UTC (rev
89511)
+++ trunk/phase3/includes/api/ApiPageSet.php 2011-06-05 17:49:00 UTC (rev
89512)
@@ -535,6 +535,15 @@
$pageids = array();
$remaining = array_flip( $revids );
+ // bug 25734 API: possible issue with revids validation
+ // It seems with a load of revision rows, MySQL gets upset
+ // Remove any < 0 revids, as they can't be valid
+ foreach( $revids as $i => $revid ) {
+ if ( $revid < 0 ) {
+ unset( $revids[$i] );
+ }
+ }
+
$tables = array( 'revision', 'page' );
$fields = array( 'rev_id', 'rev_page' );
$where = array( 'rev_id' => $revids, 'rev_page = page_id' );
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs