MediaWiki master
SearchEngineFactory.php
Go to the documentation of this file.
1<?php
2
5use Wikimedia\ObjectFactory\ObjectFactory;
7
13
14 private SearchEngineConfig $config;
15 private HookContainer $hookContainer;
16 private IConnectionProvider $dbProvider;
17
18 public function __construct(
19 SearchEngineConfig $config,
20 HookContainer $hookContainer,
21 IConnectionProvider $dbProvider
22 ) {
23 $this->config = $config;
24 $this->hookContainer = $hookContainer;
25 $this->dbProvider = $dbProvider;
26 }
27
34 public function create( $type = null ) {
35 $configuredClass = $this->config->getSearchType();
36 $alternativesClasses = $this->config->getSearchTypes();
37
38 if ( $type !== null && in_array( $type, $alternativesClasses ) ) {
39 $class = $type;
40 } elseif ( $configuredClass !== null ) {
41 $class = $configuredClass;
42 } else {
43 $class = self::getSearchEngineClass( $this->dbProvider );
44 }
45
46 $mappings = $this->config->getSearchMappings();
47
48 // Convert non mapped classes to ObjectFactory spec
49 $spec = $mappings[$class] ?? [ 'class' => $class ];
50
51 $args = [];
52
53 if ( isset( $spec['class'] ) && is_subclass_of( $spec['class'], SearchDatabase::class ) ) {
54 $args['extraArgs'][] = $this->dbProvider;
55 }
56
57 // ObjectFactory::getObjectFromSpec accepts an array, not just a callable (phan bug)
58 // @phan-suppress-next-line PhanTypeInvalidCallableArraySize
59 $engine = ObjectFactory::getObjectFromSpec( $spec, $args );
61 $engine->setHookContainer( $this->hookContainer );
62 return $engine;
63 }
64
70 public static function getSearchEngineClass( IConnectionProvider $dbProvider ) {
71 $type = $dbProvider->getReplicaDatabase()->getType();
72
73 switch ( $type ) {
74 case 'sqlite':
75 return SearchSqlite::class;
76 case 'mysql':
77 return SearchMySQL::class;
78 case 'postgres':
79 return SearchPostgres::class;
80 default:
81 return SearchEngineDummy::class;
82 }
83 }
84}
Search engine hook for MySQL.
Configuration handling class for SearchEngine.
Factory class for SearchEngine.
create( $type=null)
Create SearchEngine of the given type.
__construct(SearchEngineConfig $config, HookContainer $hookContainer, IConnectionProvider $dbProvider)
static getSearchEngineClass(IConnectionProvider $dbProvider)
Provide primary and replica IDatabase connections.
getReplicaDatabase(string|false $domain=false, $group=null)
Get connection to a replica database.