From ff00b052ce127fbdb431c7c19aff52c3cc43aed0 Mon Sep 17 00:00:00 2001 From: Chad Horohoe Date: Tue, 22 Apr 2014 00:52:19 -0700 Subject: [PATCH] Clean up database-backed SearchResultSets SqlSearchResultSet basically handles all of the work in a DB-agnostic manner. Remove specific implementations for MySQL, Mssql and Sqlite Change-Id: Iae3fd5cc40dfbc50917be73d7ace668681e4148a --- includes/AutoLoader.php | 3 --- includes/search/SearchMssql.php | 34 ++++------------------------- includes/search/SearchMySQL.php | 20 +++-------------- includes/search/SearchOracle.php | 2 +- includes/search/SearchPostgres.php | 6 +---- includes/search/SearchResultSet.php | 30 +++++++++++++++---------- includes/search/SearchSqlite.php | 20 +++-------------- 7 files changed, 30 insertions(+), 85 deletions(-) diff --git a/includes/AutoLoader.php b/includes/AutoLoader.php index 077c72cee0..55457679af 100644 --- a/includes/AutoLoader.php +++ b/includes/AutoLoader.php @@ -887,8 +887,6 @@ $wgAutoloadLocalClasses = array( 'RevisionDeleteUser' => 'includes/revisiondelete/RevisionDeleteUser.php', # includes/search - 'MssqlSearchResultSet' => 'includes/search/SearchMssql.php', - 'MySQLSearchResultSet' => 'includes/search/SearchMySQL.php', 'PostgresSearchResult' => 'includes/search/SearchPostgres.php', 'PostgresSearchResultSet' => 'includes/search/SearchPostgres.php', 'SearchDatabase' => 'includes/search/SearchDatabase.php', @@ -904,7 +902,6 @@ $wgAutoloadLocalClasses = array( 'SearchResultSet' => 'includes/search/SearchResultSet.php', 'SearchResultTooMany' => 'includes/search/SearchEngine.php', 'SearchSqlite' => 'includes/search/SearchSqlite.php', - 'SqliteSearchResultSet' => 'includes/search/SearchSqlite.php', 'SqlSearchResultSet' => 'includes/search/SearchResultSet.php', # includes/site diff --git a/includes/search/SearchMssql.php b/includes/search/SearchMssql.php index 6326112316..3eef498768 100644 --- a/includes/search/SearchMssql.php +++ b/includes/search/SearchMssql.php @@ -30,24 +30,24 @@ class SearchMssql extends SearchDatabase { * Perform a full text search query and return a result set. * * @param string $term Raw search term - * @return MssqlSearchResultSet + * @return SqlSearchResultSet * @access public */ function searchText( $term ) { $resultSet = $this->db->resultObject( $this->db->query( $this->getQuery( $this->filter( $term ), true ) ) ); - return new MssqlSearchResultSet( $resultSet, $this->searchTerms ); + return new SqlSearchResultSet( $resultSet, $this->searchTerms ); } /** * Perform a title-only search query and return a result set. * * @param string $term Raw search term - * @return MssqlSearchResultSet + * @return SqlSearchResultSet * @access public */ function searchTitle( $term ) { $resultSet = $this->db->resultObject( $this->db->query( $this->getQuery( $this->filter( $term ), false ) ) ); - return new MssqlSearchResultSet( $resultSet, $this->searchTerms ); + return new SqlSearchResultSet( $resultSet, $this->searchTerms ); } /** @@ -204,29 +204,3 @@ class SearchMssql extends SearchDatabase { return $this->db->query( $sql, 'SearchMssql::updateTitle' ); } } - -/** - * @ingroup Search - */ -class MssqlSearchResultSet extends SearchResultSet { - function __construct( $resultSet, $terms ) { - $this->mResultSet = $resultSet; - $this->mTerms = $terms; - } - - function termMatches() { - return $this->mTerms; - } - - function numRows() { - return $this->mResultSet->numRows(); - } - - function next() { - $row = $this->mResultSet->fetchObject(); - if ( $row === false ) { - return false; - } - return new SearchResult( $row ); - } -} diff --git a/includes/search/SearchMySQL.php b/includes/search/SearchMySQL.php index cfe4c29699..345ced551b 100644 --- a/includes/search/SearchMySQL.php +++ b/includes/search/SearchMySQL.php @@ -153,7 +153,7 @@ class SearchMySQL extends SearchDatabase { * Perform a full text search query and return a result set. * * @param string $term Raw search term - * @return MySQLSearchResultSet + * @return SqlSearchResultSet */ function searchText( $term ) { return $this->searchInternal( $term, true ); @@ -163,7 +163,7 @@ class SearchMySQL extends SearchDatabase { * Perform a title-only search query and return a result set. * * @param string $term Raw search term - * @return MySQLSearchResultSet + * @return SqlSearchResultSet */ function searchTitle( $term ) { return $this->searchInternal( $term, false ); @@ -199,7 +199,7 @@ class SearchMySQL extends SearchDatabase { $totalResult->free(); } - return new MySQLSearchResultSet( $resultSet, $this->searchTerms, $total ); + return new SqlSearchResultSet( $resultSet, $this->searchTerms, $total ); } public function supports( $feature ) { @@ -452,17 +452,3 @@ class SearchMySQL extends SearchDatabase { return self::$mMinSearchLength; } } - -/** - * @ingroup Search - */ -class MySQLSearchResultSet extends SqlSearchResultSet { - function __construct( $resultSet, $terms, $totalHits = null ) { - parent::__construct( $resultSet, $terms ); - $this->mTotalHits = $totalHits; - } - - function getTotalHits() { - return $this->mTotalHits; - } -} diff --git a/includes/search/SearchOracle.php b/includes/search/SearchOracle.php index d5a6597c11..93427d196f 100644 --- a/includes/search/SearchOracle.php +++ b/includes/search/SearchOracle.php @@ -86,7 +86,7 @@ class SearchOracle extends SearchDatabase { } $resultSet = $this->db->resultObject( $this->db->query( $this->getQuery( $this->filter( $term ), false ) ) ); - return new MySQLSearchResultSet( $resultSet, $this->searchTerms ); + return new SqlSearchResultSet( $resultSet, $this->searchTerms ); } /** diff --git a/includes/search/SearchPostgres.php b/includes/search/SearchPostgres.php index 2a20d70e99..42b67f3679 100644 --- a/includes/search/SearchPostgres.php +++ b/includes/search/SearchPostgres.php @@ -222,12 +222,8 @@ class PostgresSearchResult extends SearchResult { * @ingroup Search */ class PostgresSearchResultSet extends SqlSearchResultSet { - function __construct( $resultSet, $terms ) { - parent::__construct( $resultSet, $terms ); - } - function next() { - $row = $this->mResultSet->fetchObject(); + $row = $this->resultSet->fetchObject(); if ( $row === false ) { return false; } else { diff --git a/includes/search/SearchResultSet.php b/includes/search/SearchResultSet.php index 178129aa74..f753e3d190 100644 --- a/includes/search/SearchResultSet.php +++ b/includes/search/SearchResultSet.php @@ -139,32 +139,34 @@ class SearchResultSet { * @ingroup Search */ class SqlSearchResultSet extends SearchResultSet { + protected $resultSet; + protected $terms; + protected $totalHits; - protected $mResultSet; - - function __construct( $resultSet, $terms ) { - $this->mResultSet = $resultSet; - $this->mTerms = $terms; + function __construct( $resultSet, $terms, $total = null ) { + $this->resultSet = $resultSet; + $this->terms = $terms; + $this->totalHits = $total; } function termMatches() { - return $this->mTerms; + return $this->terms; } function numRows() { - if ( $this->mResultSet === false ) { + if ( $this->resultSet === false ) { return false; } - return $this->mResultSet->numRows(); + return $this->resultSet->numRows(); } function next() { - if ( $this->mResultSet === false ) { + if ( $this->resultSet === false ) { return false; } - $row = $this->mResultSet->fetchObject(); + $row = $this->resultSet->fetchObject(); if ( $row === false ) { return false; } @@ -173,11 +175,15 @@ class SqlSearchResultSet extends SearchResultSet { } function free() { - if ( $this->mResultSet === false ) { + if ( $this->resultSet === false ) { return false; } - $this->mResultSet->free(); + $this->resultSet->free(); + } + + function getTotalHits() { + return $this->totalHits; } } diff --git a/includes/search/SearchSqlite.php b/includes/search/SearchSqlite.php index 1a05ee2496..1ac4946a9c 100644 --- a/includes/search/SearchSqlite.php +++ b/includes/search/SearchSqlite.php @@ -145,7 +145,7 @@ class SearchSqlite extends SearchDatabase { * Perform a full text search query and return a result set. * * @param string $term Raw search term - * @return SqliteSearchResultSet + * @return SqlSearchResultSet */ function searchText( $term ) { return $this->searchInternal( $term, true ); @@ -155,7 +155,7 @@ class SearchSqlite extends SearchDatabase { * Perform a title-only search query and return a result set. * * @param string $term Raw search term - * @return SqliteSearchResultSet + * @return SqlSearchResultSet */ function searchTitle( $term ) { return $this->searchInternal( $term, false ); @@ -181,7 +181,7 @@ class SearchSqlite extends SearchDatabase { $totalResult->free(); } - return new SqliteSearchResultSet( $resultSet, $this->searchTerms, $total ); + return new SqlSearchResultSet( $resultSet, $this->searchTerms, $total ); } /** @@ -303,17 +303,3 @@ class SearchSqlite extends SearchDatabase { __METHOD__ ); } } - -/** - * @ingroup Search - */ -class SqliteSearchResultSet extends SqlSearchResultSet { - function __construct( $resultSet, $terms, $totalHits = null ) { - parent::__construct( $resultSet, $terms ); - $this->mTotalHits = $totalHits; - } - - function getTotalHits() { - return $this->mTotalHits; - } -} -- 2.20.1