3 use Wikimedia\Rdbms\IDatabase
;
6 * Factory class for SearchEngine.
7 * Allows to create engine of the specific type.
9 class SearchEngineFactory
{
11 * Configuration for SearchEngine classes.
12 * @var SearchEngineConfig
16 public function __construct( SearchEngineConfig
$config ) {
17 $this->config
= $config;
21 * Create SearchEngine of the given type.
22 * @param string|null $type
23 * @return SearchEngine
25 public function create( $type = null ) {
28 $configType = $this->config
->getSearchType();
29 $alternatives = $this->config
->getSearchTypes();
31 if ( $type && in_array( $type, $alternatives ) ) {
33 } elseif ( $configType !== null ) {
36 $dbr = wfGetDB( DB_REPLICA
);
37 $class = self
::getSearchEngineClass( $dbr );
40 $search = new $class( $dbr );
45 * @param IDatabase $db
46 * @return string SearchEngine subclass name
49 public static function getSearchEngineClass( IDatabase
$db ) {
50 switch ( $db->getType() ) {
52 return SearchSqlite
::class;
54 return SearchMySQL
::class;
56 return SearchPostgres
::class;
58 return SearchMssql
::class;
60 return SearchOracle
::class;
62 return SearchEngineDummy
::class;