From d8395768a8106fb2b5c9925b0b07c280aae7bb4c Mon Sep 17 00:00:00 2001 From: Yuri Astrakhan Date: Thu, 20 Apr 2006 21:52:30 +0000 Subject: [PATCH] Consolidated sql query generation. Fixed memory leak. --- includes/SpecialDoubleRedirects.php | 60 ++++++++++++++--------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/includes/SpecialDoubleRedirects.php b/includes/SpecialDoubleRedirects.php index 7246c1586a..af02269e13 100644 --- a/includes/SpecialDoubleRedirects.php +++ b/includes/SpecialDoubleRedirects.php @@ -29,24 +29,38 @@ class DoubleRedirectsPage extends PageQueryPage { return '

'.wfMsg("doubleredirectstext")."


\n"; } - function getSQL() { - $dbr =& wfGetDB( DB_SLAVE ); + function getSQLText( &$dbr, $namespace = null, $title = null ) { + extract( $dbr->tableNames( 'page', 'pagelinks' ) ); - $sql = "SELECT 'DoubleRedirects' as type," . - " pa.page_namespace as namespace, pa.page_title as title," . - " pb.page_namespace as nsb, pb.page_title as tb," . - " pc.page_namespace as nsc, pc.page_title as tc" . - " FROM $pagelinks AS la, $pagelinks AS lb, $page AS pa, $page AS pb, $page AS pc" . - " WHERE pa.page_is_redirect=1 AND pb.page_is_redirect=1" . - " AND la.pl_from=pa.page_id" . - " AND la.pl_namespace=pb.page_namespace" . - " AND la.pl_title=pb.page_title" . - " AND lb.pl_from=pb.page_id" . - " AND lb.pl_namespace=pc.page_namespace" . - " AND lb.pl_title=pc.page_title"; + $limitToTitle = !( $namespace === null && $title === null ); + $sql = $limitToTitle ? "SELECT" : "SELECT 'DoubleRedirects' as type," ; + $sql .= + " pa.page_namespace as namespace, pa.page_title as title," . + " pb.page_namespace as nsb, pb.page_title as tb," . + " pc.page_namespace as nsc, pc.page_title as tc" . + " FROM $pagelinks AS la, $pagelinks AS lb, $page AS pa, $page AS pb, $page AS pc" . + " WHERE pa.page_is_redirect=1 AND pb.page_is_redirect=1" . + " AND la.pl_from=pa.page_id" . + " AND la.pl_namespace=pb.page_namespace" . + " AND la.pl_title=pb.page_title" . + " AND lb.pl_from=pb.page_id" . + " AND lb.pl_namespace=pc.page_namespace" . + " AND lb.pl_title=pc.page_title"; + + if( $limitToTitle ) { + $encTitle = $dbr->addQuotes( $title ); + $sql .= " AND pa.page_namespace=$namespace" . + " AND pa.page_title=$encTitle"; + } + return $sql; } + + function getSQL() { + $dbr =& wfGetDB( DB_SLAVE ); + return $this->getSQLText( $dbr ); + } function getOrder() { return ''; @@ -60,25 +74,11 @@ class DoubleRedirectsPage extends PageQueryPage { if ( $result && !isset( $result->nsb ) ) { $dbr =& wfGetDB( DB_SLAVE ); - extract( $dbr->tableNames( 'page', 'pagelinks' ) ); - $encTitle = $dbr->addQuotes( $result->title ); - - $sql = "SELECT pa.page_namespace as namespace, pa.page_title as title," . - " pb.page_namespace as nsb, pb.page_title as tb," . - " pc.page_namespace as nsc, pc.page_title as tc" . - " FROM $pagelinks AS la, $pagelinks AS lb, $page AS pa, $page AS pb, $page AS pc" . - " WHERE pa.page_is_redirect=1 AND pb.page_is_redirect=1" . - " AND la.pl_from=pa.page_id" . - " AND la.pl_namespace=pb.page_namespace" . - " AND la.pl_title=pb.page_title" . - " AND lb.pl_from=pb.page_id" . - " AND lb.pl_namespace=pc.page_namespace" . - " AND lb.pl_title=pc.page_title" . - " AND pa.page_namespace={$result->namespace}" . - " AND pa.page_title=$encTitle"; + $sql = $this->getSQLText( $dbr, $result->namespace, $result->title ); $res = $dbr->query( $sql, $fname ); if ( $res ) { $result = $dbr->fetchObject( $res ); + $dbr->freeResult( $res ); } } if ( !$result ) { -- 2.20.1