From 11de3cf8b42927a859dc59e99fcb3560394cda2a Mon Sep 17 00:00:00 2001 From: Andrew Garrett Date: Tue, 11 Sep 2007 08:10:28 +0000 Subject: [PATCH] * Speed up Special:UncategorizedPages and Special:Deadendpages (no longer marked as slow queries). They now add blank ('','') entries for pages without ANY links or categories. Note that these entries are now what is checked by Special:Uncategorizedpages and Special:Deadendpages. Thus, refreshLinks.php needs to be run before either of these pages will work correctly. An update script will be forthcoming. * RELEASE-NOTES comments forgotten in a previous commit. --- RELEASE-NOTES | 7 ++++++- includes/LinksUpdate.php | 20 ++++++++++++++++++++ includes/SpecialDeadendpages.php | 15 ++++++--------- includes/SpecialUncategorizedpages.php | 13 ++++++------- 4 files changed, 38 insertions(+), 17 deletions(-) diff --git a/RELEASE-NOTES b/RELEASE-NOTES index c7e08a0720..fcbbecdf8c 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -19,6 +19,9 @@ Those wishing to use the latest code instead of a branch release can obtain it from source control: http://www.mediawiki.org/wiki/Download_from_SVN === Configuration changes in 1.12 === +* The permission key required to edit another user's css/js subpage is now + editusercssjs, rather than editinterface, as it was previously. This permission + is assigned by default to the sysop group. === New features in 1.12 === * Add a warning for non-descriptive filenames at Special:Upload @@ -45,7 +48,9 @@ it from source control: http://www.mediawiki.org/wiki/Download_from_SVN * (bug 11266) Set fallback language for Fulfulde (ff) to French * (bug 11179) Include image version deletion comment in public log * (bug 11158) Fix escaping in API HTML-formatted JSON - +* Speed up Special:UncategorizedPages and Special:Deadendpages (no longer marked + as slow queries). They now add blank ('','') entries for pages without ANY links + or categories. === API changes in 1.12 === diff --git a/includes/LinksUpdate.php b/includes/LinksUpdate.php index 9bcd9d67e6..1958d74bba 100644 --- a/includes/LinksUpdate.php +++ b/includes/LinksUpdate.php @@ -52,6 +52,10 @@ class LinksUpdate { $this->mExternals = $parserOutput->getExternalLinks(); $this->mCategories = $parserOutput->getCategories(); + # Insert (0,'') entries if there are none of a given type of link (page and category links only) + $this->mLinks = $this->addNullEntries( $this->mLinks, array( 0 => array( '' => 0 ) ) ); + $this->mCategories = $this->addNullEntries( $this->mCategories ); + # Convert the format of the interlanguage links # I didn't want to change it in the ParserOutput, because that array is passed all # the way back to the skin, so either a skin API break would be required, or an @@ -68,6 +72,21 @@ class LinksUpdate { wfRunHooks( 'LinksUpdateConstructed', array( &$this ) ); } + /** + * Add "no links" entries to the parser-output. + * @param $links array The links array to add null entries to. + * @param $replace array What to replace it with if $links is empty. + * @return array The links array, after being modified. + */ + function addNullEntries( $links, $replace = array( '' => '' ) ) + { + if ( count( $links ) == 0 ) { + $links = $replace; + } + + return $links; + } + /** * Update link tables with outgoing links from an updated article */ @@ -322,6 +341,7 @@ class LinksUpdate { # array_diff_key() was introduced in PHP 5.1, there is a compatibility function # in GlobalFunctions.php $diffs = isset( $existing[$ns] ) ? array_diff_key( $dbkeys, $existing[$ns] ) : $dbkeys; + foreach ( $diffs as $dbk => $id ) { $arr[] = array( 'pl_from' => $this->mId, diff --git a/includes/SpecialDeadendpages.php b/includes/SpecialDeadendpages.php index 0d94161b67..2ee23e2ecb 100644 --- a/includes/SpecialDeadendpages.php +++ b/includes/SpecialDeadendpages.php @@ -18,13 +18,8 @@ class DeadendPagesPage extends PageQueryPage { return wfMsgExt( 'deadendpagestext', array( 'parse' ) ); } - /** - * LEFT JOIN is expensive - * - * @return true - */ function isExpensive( ) { - return 1; + return false; } function isSyndicated() { return false; } @@ -43,10 +38,12 @@ class DeadendPagesPage extends PageQueryPage { $dbr = wfGetDB( DB_SLAVE ); list( $page, $pagelinks ) = $dbr->tableNamesN( 'page', 'pagelinks' ); return "SELECT 'Deadendpages' as type, page_namespace AS namespace, page_title as title, page_title AS value " . - "FROM $page LEFT JOIN $pagelinks ON page_id = pl_from " . - "WHERE pl_from IS NULL " . + "FROM $page,$pagelinks " . + "WHERE page_id = pl_from " . "AND page_namespace = 0 " . - "AND page_is_redirect = 0"; + "AND page_is_redirect = 0 " . + "AND pl_title = '' " . + "AND pl_namespace = 0"; } } diff --git a/includes/SpecialUncategorizedpages.php b/includes/SpecialUncategorizedpages.php index b26f6d93e4..4419663e04 100644 --- a/includes/SpecialUncategorizedpages.php +++ b/includes/SpecialUncategorizedpages.php @@ -20,7 +20,7 @@ class UncategorizedPagesPage extends PageQueryPage { } function isExpensive() { - return true; + return false; } function isSyndicated() { return false; } @@ -33,12 +33,11 @@ class UncategorizedPagesPage extends PageQueryPage { " SELECT $name as type, - page_namespace AS namespace, - page_title AS title, - page_title AS value - FROM $page - LEFT JOIN $categorylinks ON page_id=cl_from - WHERE cl_from IS NULL AND page_namespace={$this->requestedNamespace} AND page_is_redirect=0 + page.page_namespace AS namespace, + page.page_title AS title, + page.page_title AS value + FROM $page,$categorylinks + WHERE page_id=cl_from AND page_namespace={$this->requestedNamespace} AND page_is_redirect=0 AND cl_to='' "; } } -- 2.20.1