diff options
Diffstat (limited to 'www/wiki/includes/search/SqlSearchResultSet.php')
-rw-r--r-- | www/wiki/includes/search/SqlSearchResultSet.php | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/www/wiki/includes/search/SqlSearchResultSet.php b/www/wiki/includes/search/SqlSearchResultSet.php new file mode 100644 index 00000000..53d09e82 --- /dev/null +++ b/www/wiki/includes/search/SqlSearchResultSet.php @@ -0,0 +1,69 @@ +<?php + +use Wikimedia\Rdbms\ResultWrapper; + +/** + * This class is used for different SQL-based search engines shipped with MediaWiki + * @ingroup Search + */ +class SqlSearchResultSet extends SearchResultSet { + protected $resultSet; + protected $terms; + protected $totalHits; + + function __construct( ResultWrapper $resultSet, $terms, $total = null ) { + $this->resultSet = $resultSet; + $this->terms = $terms; + $this->totalHits = $total; + } + + function termMatches() { + return $this->terms; + } + + function numRows() { + if ( $this->resultSet === false ) { + return false; + } + + return $this->resultSet->numRows(); + } + + function next() { + if ( $this->resultSet === false ) { + return false; + } + + $row = $this->resultSet->fetchObject(); + if ( $row === false ) { + return false; + } + + return SearchResult::newFromTitle( + Title::makeTitle( $row->page_namespace, $row->page_title ), $this + ); + } + + function rewind() { + if ( $this->resultSet ) { + $this->resultSet->rewind(); + } + } + + function free() { + if ( $this->resultSet === false ) { + return false; + } + + $this->resultSet->free(); + } + + function getTotalHits() { + if ( !is_null( $this->totalHits ) ) { + return $this->totalHits; + } else { + // Special:Search expects a number here. + return $this->numRows(); + } + } +} |