From 723b73dd549c7567d3a8400fba1556339b3120f6 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Fri, 3 Apr 2009 12:58:39 +0000 Subject: [PATCH] RevisionDelete log extract query optimizations --- includes/LogEventsList.php | 4 +++- includes/specials/SpecialRevisiondelete.php | 17 ++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/includes/LogEventsList.php b/includes/LogEventsList.php index f0b2756e19..a31124330a 100644 --- a/includes/LogEventsList.php +++ b/includes/LogEventsList.php @@ -365,7 +365,9 @@ class LogEventsList { $del = ''; // No one should be hiding from the oversight log } else { $target = SpecialPage::getTitleFor( 'Log', $row->log_type ); - $query = array( 'target' => $target->getPrefixedDBkey(), 'logid' => $row->log_id ); + $page = Title::makeTitle( $row->log_namespace, $row->log_title ); + $query = array( 'target' => $target->getPrefixedDBkey(), + 'logid' => $row->log_id, 'page' => $page->getPrefixedDBkey() ); $del = $this->skin->revDeleteLink( $query, self::isDeleted( $row, LogPage::DELETED_RESTRICTED ) ); } diff --git a/includes/specials/SpecialRevisiondelete.php b/includes/specials/SpecialRevisiondelete.php index 0afefa2744..65a9f4fe3c 100644 --- a/includes/specials/SpecialRevisiondelete.php +++ b/includes/specials/SpecialRevisiondelete.php @@ -49,6 +49,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage { return; } $this->page = Title::newFromUrl( $this->target ); + $this->contextPage = Title::newFromUrl( $wgRequest->getText( 'page' ) ); # If we have revisions, get the title from the first one # since they should all be from the same page. This allows # for more flexibility with page moves... @@ -146,6 +147,19 @@ class SpecialRevisionDelete extends UnlistedSpecialPage { $safeIds[] = $m[0]; } } + // Optimization for logs + if( $action == 'event' ) { + # If a context page is given, use title,time index + if( $this->contextPage ) { + $conds['log_namespace'] = $this->contextPage->getNamespace(); + $conds['log_title'] = $this->contextPage->getDBKey(); + } else { + $first = wfGetDB( DB_SLAVE )->selectField( 'logging', + 'MIN(log_timestamp)', array('log_id' => $safeIds) ); + # The event was be hidden after it was made + $conds[] = "log_timestamp >= {$first}"; // use type,time index + } + } // Format is if( count($safeIds) ) { $conds[] = "log_params RLIKE '(^|\n|,)(".implode('|',$safeIds).")(,|$)'"; @@ -548,7 +562,8 @@ class SpecialRevisionDelete extends UnlistedSpecialPage { Xml::submitButton( wfMsg( 'revdelete-submit' ) ) ); $hidden = array( Xml::hidden( 'wpEditToken', $wgUser->editToken() ), - Xml::hidden( 'target', $this->page->getPrefixedText() ), + Xml::hidden( 'target', $this->page->getPrefixedDBKey() ), + Xml::hidden( 'page', $this->contextPage ? $this->contextPage->getPrefixedDBKey() : '' ), Xml::hidden( 'type', $this->deleteKey ), Xml::hidden( 'logid', implode(',',$this->logids) ) ); -- 2.20.1