3 use Wikimedia\Rdbms\IDatabase
;
4 use Wikimedia\Rdbms\ILoadBalancer
;
5 use MediaWiki\MediaWikiServices
;
8 * Factory class for SearchEngine.
9 * Allows to create engine of the specific type.
11 class SearchEngineFactory
{
13 * Configuration for SearchEngine classes.
14 * @var SearchEngineConfig
18 public function __construct( SearchEngineConfig
$config ) {
19 $this->config
= $config;
23 * Create SearchEngine of the given type.
24 * @param string|null $type
25 * @return SearchEngine
27 public function create( $type = null ) {
28 $configuredClass = $this->config
->getSearchType();
29 $alternativesClasses = $this->config
->getSearchTypes();
31 $lb = MediaWikiServices
::getInstance()->getDBLoadBalancer();
32 if ( $type !== null && in_array( $type, $alternativesClasses ) ) {
34 } elseif ( $configuredClass !== null ) {
35 $class = $configuredClass;
37 $class = self
::getSearchEngineClass( $lb );
40 if ( is_subclass_of( $class, SearchDatabase
::class ) ) {
41 return new $class( $lb );
48 * @param IDatabase|ILoadBalancer $dbOrLb
49 * @return string SearchEngine subclass name
52 public static function getSearchEngineClass( $dbOrLb ) {
53 $type = ( $dbOrLb instanceof IDatabase
)
55 : $dbOrLb->getServerType( $dbOrLb->getWriterIndex() );
59 return SearchSqlite
::class;
61 return SearchMySQL
::class;
63 return SearchPostgres
::class;
65 return SearchMssql
::class;
67 return SearchOracle
::class;
69 return SearchEngineDummy
::class;