use MediaWiki\Logger\LoggerFactory;
use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\DatabaseDomain;
/**
* MediaWiki-specific class for generating database load balancers
public static function applyDefaultConfig( array $lbConf, Config $mainConfig ) {
global $wgCommandLineMode;
+ static $typesWithSchema = [ 'postgres', 'msssql' ];
+
$lbConf += [
'localDomain' => new DatabaseDomain(
$mainConfig->get( 'DBname' ),
'readOnlyReason' => wfConfiguredReadOnlyReason(),
];
+ // When making changes here, remember to also specify MediaWiki-specific options
+ // for Database classes in the relevant Installer subclass.
+ // Such as MysqlInstaller::openConnection and PostgresInstaller::openConnectionWithParams.
if ( $lbConf['class'] === 'LBFactorySimple' ) {
if ( isset( $lbConf['servers'] ) ) {
// Server array is already explicitly configured; leave alone
// Work around the reserved word usage in MediaWiki schema
'keywordTableMap' => [ 'user' => 'mwuser', 'text' => 'pagecontent' ]
];
+ } elseif ( $server['type'] === 'mssql' ) {
+ $server += [
+ 'port' => $mainConfig->get( 'DBport' ),
+ 'useWindowsAuth' => $mainConfig->get( 'DBWindowsAuthentication' )
+ ];
}
- $lbConf['servers'][$i] = $server + [
- 'schema' => $mainConfig->get( 'DBmwschema' ),
+
+ if ( in_array( $server['type'], $typesWithSchema, true ) ) {
+ $server += [ 'schema' => $mainConfig->get( 'DBmwschema' ) ];
+ }
+
+ $server += [
'tablePrefix' => $mainConfig->get( 'DBprefix' ),
'flags' => DBO_DEFAULT,
'sqlMode' => $mainConfig->get( 'SQLMode' ),
'utf8Mode' => $mainConfig->get( 'DBmysql5' )
];
+
+ $lbConf['servers'][$i] = $server;
}
} else {
$flags = DBO_DEFAULT;
'user' => $mainConfig->get( 'DBuser' ),
'password' => $mainConfig->get( 'DBpassword' ),
'dbname' => $mainConfig->get( 'DBname' ),
- 'schema' => $mainConfig->get( 'DBmwschema' ),
'tablePrefix' => $mainConfig->get( 'DBprefix' ),
'type' => $mainConfig->get( 'DBtype' ),
'load' => 1,
'sqlMode' => $mainConfig->get( 'SQLMode' ),
'utf8Mode' => $mainConfig->get( 'DBmysql5' )
];
+ if ( in_array( $server['type'], $typesWithSchema, true ) ) {
+ $server += [ 'schema' => $mainConfig->get( 'DBmwschema' ) ];
+ }
if ( $server['type'] === 'sqlite' ) {
$server[ 'dbDirectory'] = $mainConfig->get( 'SQLiteDataDir' );
} elseif ( $server['type'] === 'postgres' ) {
$server['port'] = $mainConfig->get( 'DBport' );
// Work around the reserved word usage in MediaWiki schema
$server['keywordTableMap'] = [ 'user' => 'mwuser', 'text' => 'pagecontent' ];
+ } elseif ( $server['type'] === 'mssql' ) {
+ $server['port'] = $mainConfig->get( 'DBport' );
+ $server['useWindowsAuth'] = $mainConfig->get( 'DBWindowsAuthentication' );
}
$lbConf['servers'] = [ $server ];
}
}
} elseif ( $lbConf['class'] === 'LBFactoryMulti' ) {
if ( isset( $lbConf['serverTemplate'] ) ) {
- $lbConf['serverTemplate']['schema'] = $mainConfig->get( 'DBmwschema' );
+ if ( in_array( $lbConf['serverTemplate']['type'], $typesWithSchema, true ) ) {
+ $lbConf['serverTemplate']['schema'] = $mainConfig->get( 'DBmwschema' );
+ }
$lbConf['serverTemplate']['sqlMode'] = $mainConfig->get( 'SQLMode' );
$lbConf['serverTemplate']['utf8Mode'] = $mainConfig->get( 'DBmysql5' );
}
);
}
+ // For configuration backward compatibility after moving classes to namespaces (1.29)
+ $compat = [
+ 'LBFactorySingle' => Wikimedia\Rdbms\LBFactorySingle::class,
+ 'LBFactorySimple' => Wikimedia\Rdbms\LBFactorySimple::class,
+ 'LBFactoryMulti' => Wikimedia\Rdbms\LBFactoryMulti::class
+ ];
+
+ if ( isset( $compat[$class] ) ) {
+ $class = $compat[$class];
+ }
+
return $class;
}
}