X-Git-Url: https://git.cyclocoop.org/%242?a=blobdiff_plain;f=includes%2FTitle.php;h=e45994c0946e44acdcb1ff42d0b0acbee1f20753;hb=17eba67ef329fb8f444f681e6ff515d1919376cb;hp=3ed6b8bb6e14ee728b65a1ea80febf89947ead7d;hpb=d4a1177aa66759a5cf05887830435bb9e50f7780;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Title.php b/includes/Title.php index 3ed6b8bb6e..e45994c094 100644 --- a/includes/Title.php +++ b/includes/Title.php @@ -2943,8 +2943,6 @@ class Title implements LinkTarget { continue; } - // This code should be refactored, now that it's being used more generally, - // But I don't really see any harm in leaving it in Block for now -werdna $expiry = $dbr->decodeExpiry( $row->pr_expiry ); // Only apply the restrictions if they haven't expired! @@ -3963,14 +3961,22 @@ class Title implements LinkTarget { * @return int|bool Old revision ID, or false if none exists */ public function getPreviousRevisionID( $revId, $flags = 0 ) { - $db = ( $flags & self::GAID_FOR_UPDATE ) ? wfGetDB( DB_MASTER ) : wfGetDB( DB_REPLICA ); + /* This function and getNextRevisionID have bad performance when + used on a page with many revisions on mysql. An explicit extended + primary key may help in some cases, if the PRIMARY KEY is banned: + T159319 */ + if ( $flags & self::GAID_FOR_UPDATE ) { + $db = wfGetDB( DB_MASTER ); + } else { + $db = wfGetDB( DB_REPLICA, 'contributions' ); + } $revId = $db->selectField( 'revision', 'rev_id', [ 'rev_page' => $this->getArticleID( $flags ), 'rev_id < ' . intval( $revId ) ], __METHOD__, - [ 'ORDER BY' => 'rev_id DESC' ] + [ 'ORDER BY' => 'rev_id DESC', 'IGNORE INDEX' => 'PRIMARY' ] ); if ( $revId === false ) { @@ -3988,14 +3994,18 @@ class Title implements LinkTarget { * @return int|bool Next revision ID, or false if none exists */ public function getNextRevisionID( $revId, $flags = 0 ) { - $db = ( $flags & self::GAID_FOR_UPDATE ) ? wfGetDB( DB_MASTER ) : wfGetDB( DB_REPLICA ); + if ( $flags & self::GAID_FOR_UPDATE ) { + $db = wfGetDB( DB_MASTER ); + } else { + $db = wfGetDB( DB_REPLICA, 'contributions' ); + } $revId = $db->selectField( 'revision', 'rev_id', [ 'rev_page' => $this->getArticleID( $flags ), 'rev_id > ' . intval( $revId ) ], __METHOD__, - [ 'ORDER BY' => 'rev_id' ] + [ 'ORDER BY' => 'rev_id', 'IGNORE INDEX' => 'PRIMARY' ] ); if ( $revId === false ) {