X-Git-Url: https://scripts.mit.edu/gitweb/autoinstallsdev/mediawiki.git/blobdiff_plain/19e297c21b10b1b8a3acad5e73fc71dcb35db44a..6932310fd58ebef145fa01eb76edf7150284d8ea:/includes/search/SearchEngineFactory.php diff --git a/includes/search/SearchEngineFactory.php b/includes/search/SearchEngineFactory.php new file mode 100644 index 00000000..613d33ca --- /dev/null +++ b/includes/search/SearchEngineFactory.php @@ -0,0 +1,65 @@ +config = $config; + } + + /** + * Create SearchEngine of the given type. + * @param string $type + * @return SearchEngine + */ + public function create( $type = null ) { + $dbr = null; + + $configType = $this->config->getSearchType(); + $alternatives = $this->config->getSearchTypes(); + + if ( $type && in_array( $type, $alternatives ) ) { + $class = $type; + } elseif ( $configType !== null ) { + $class = $configType; + } else { + $dbr = wfGetDB( DB_REPLICA ); + $class = self::getSearchEngineClass( $dbr ); + } + + $search = new $class( $dbr ); + return $search; + } + + /** + * @param IDatabase $db + * @return string SearchEngine subclass name + * @since 1.28 + */ + public static function getSearchEngineClass( IDatabase $db ) { + switch ( $db->getType() ) { + case 'sqlite': + return 'SearchSqlite'; + case 'mysql': + return 'SearchMySQL'; + case 'postgres': + return 'SearchPostgres'; + case 'mssql': + return 'SearchMssql'; + case 'oracle': + return 'SearchOracle'; + default: + return 'SearchEngineDummy'; + } + } +}