MediaWiki REL1_37
SearchEngineFactory.php
Go to the documentation of this file.
1<?php
2
4use Wikimedia\ObjectFactory;
7
17 private $config;
18
21
24
30 public function __construct(
31 SearchEngineConfig $config,
32 HookContainer $hookContainer,
33 ILoadBalancer $loadBalancer
34 ) {
35 $this->config = $config;
36 $this->hookContainer = $hookContainer;
37 $this->loadBalancer = $loadBalancer;
38 }
39
46 public function create( $type = null ) {
47 $configuredClass = $this->config->getSearchType();
48 $alternativesClasses = $this->config->getSearchTypes();
49
50 if ( $type !== null && in_array( $type, $alternativesClasses ) ) {
51 $class = $type;
52 } elseif ( $configuredClass !== null ) {
53 $class = $configuredClass;
54 } else {
55 $class = self::getSearchEngineClass( $this->loadBalancer );
56 }
57
58 $mappings = $this->config->getSearchMappings();
59
60 if ( isset( $mappings[$class] ) ) {
61 $spec = $mappings[$class];
62 } else {
63 // Convert non mapped classes to ObjectFactory spec
64 $spec = [ 'class' => $class ];
65 }
66
67 $args = [];
68
69 if ( isset( $spec['class'] ) && is_subclass_of( $spec['class'], SearchDatabase::class ) ) {
70 $args['extraArgs'][] = $this->loadBalancer;
71 }
72
73 // ObjectFactory::getObjectFromSpec accepts an array, not just a callable (phan bug)
74 // @phan-suppress-next-line PhanTypeInvalidCallableArraySize
75 $engine = ObjectFactory::getObjectFromSpec( $spec, $args );
77 $engine->setHookContainer( $this->hookContainer );
78 return $engine;
79 }
80
86 public static function getSearchEngineClass( $dbOrLb ) {
87 $type = ( $dbOrLb instanceof IDatabase )
88 ? $dbOrLb->getType()
89 : $dbOrLb->getServerType( $dbOrLb->getWriterIndex() );
90
91 switch ( $type ) {
92 case 'sqlite':
93 return SearchSqlite::class;
94 case 'mysql':
95 return SearchMySQL::class;
96 case 'postgres':
97 return SearchPostgres::class;
98 default:
99 return SearchEngineDummy::class;
100 }
101 }
102}
Configuration handling class for SearchEngine.
Factory class for SearchEngine.
__construct(SearchEngineConfig $config, HookContainer $hookContainer, ILoadBalancer $loadBalancer)
create( $type=null)
Create SearchEngine of the given type.
static getSearchEngineClass( $dbOrLb)
SearchEngineConfig $config
Configuration for SearchEngine classes.
Basic database interface for live and lazy-loaded relation database handles.
Definition IDatabase.php:38
Database cluster connection, tracking, load balancing, and transaction manager interface.
if( $line===false) $args
Definition mcc.php:124