Merge "Type hint against LinkTarget in WatchedItemStore"
[lhc/web/wiklou.git] / includes / search / SqlSearchResultSet.php
1 <?php
2
3 use Wikimedia\Rdbms\IResultWrapper;
4
5 /**
6 * This class is used for different SQL-based search engines shipped with MediaWiki
7 * @ingroup Search
8 */
9 class SqlSearchResultSet extends SearchResultSet {
10 /** @noinspection PhpMissingParentConstructorInspection */
11
12 /** @var IResultWrapper Result object from database */
13 protected $resultSet;
14 /** @var string[] Requested search query */
15 protected $terms;
16 /** @var int|null Total number of hits for $terms */
17 protected $totalHits;
18
19 /**
20 * @param IResultWrapper $resultSet
21 * @param string[] $terms
22 * @param int|null $total
23 */
24 function __construct( IResultWrapper $resultSet, array $terms, $total = null ) {
25 parent::__construct();
26 $this->resultSet = $resultSet;
27 $this->terms = $terms;
28 $this->totalHits = $total;
29 }
30
31 /**
32 * @return string[]
33 * @deprecated since 1.34
34 */
35 function termMatches() {
36 return $this->terms;
37 }
38
39 function numRows() {
40 if ( $this->resultSet === false ) {
41 return false;
42 }
43
44 return $this->resultSet->numRows();
45 }
46
47 public function extractResults() {
48 if ( $this->resultSet === false ) {
49 return [];
50 }
51
52 if ( $this->results === null ) {
53 $this->results = [];
54 $this->resultSet->rewind();
55 $terms = \MediaWiki\MediaWikiServices::getInstance()->getContentLanguage()
56 ->convertForSearchResult( $this->terms );
57 while ( ( $row = $this->resultSet->fetchObject() ) !== false ) {
58 $result = new SqlSearchResult(
59 Title::makeTitle( $row->page_namespace, $row->page_title ),
60 $terms
61 );
62 $this->augmentResult( $result );
63 $this->results[] = $result;
64 }
65 }
66 return $this->results;
67 }
68
69 function getTotalHits() {
70 if ( !is_null( $this->totalHits ) ) {
71 return $this->totalHits;
72 } else {
73 // Special:Search expects a number here.
74 return $this->numRows();
75 }
76 }
77 }