wiki.techinc.nl/includes/search/SqlSearchResultSet.php
Erik Bernhardson c2a308075f Convert SearchResultSet to typical iteration
The funky iteration here was at best annoying. Switch
it over to an iterator based approach with appropriate
BC code to simulate the old iteration style.

Depends-On: I19a8d6621a130811871dec9335038797627d9448
Change-Id: I9fccda15dd58a0dc35771d3b5cd7a6e8b02514a0
2018-06-11 13:35:41 -07:00

68 lines
1.4 KiB
PHP

<?php
use Wikimedia\Rdbms\ResultWrapper;
/**
* This class is used for different SQL-based search engines shipped with MediaWiki
* @ingroup Search
*/
class SqlSearchResultSet extends SearchResultSet {
/** @var ResultWrapper Result object from database */
protected $resultSet;
/** @var string Requested search query */
protected $terms;
/** @var int|null Total number of hits for $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();
}
public function extractResults() {
if ( $this->resultSet === false ) {
return [];
}
if ( $this->results === null ) {
$this->results = [];
$this->resultSet->rewind();
while ( ( $row = $this->resultSet->fetchObject() ) !== false ) {
$this->results[] = SearchResult::newFromTitle(
Title::makeTitle( $row->page_namespace, $row->page_title ), $this
);
}
}
return $this->results;
}
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();
}
}
}