* Fixed a bug causing the installer to ignore the "engine" and "charset" settings when installing a MySQL database.

* Fixed a bug causing the engine and charset settings to not be properly preserved when adding new tables on upgrade.
* Fixed total breakage of SQLite upgrade, by reusing the administrative connection to the SQLite database instead of creating a new one when wfGetDB() is called. Added LBFactory_Single to support this. 
* Introduced a "schema variable" concept to DatabaseBase to avoid the use of globals for communication between the installer and the Database. Removed a lot of old global variable names from Database::replaceVars(), most were only added on a whim and were never used.
* Introduced DatabaseInstaller::getSchemaVars(), to allow schema variables to be supplied by the DatabaseInstaller child classes.
* Removed messages config-mysql-egine-mismatch [sic] and config-mysql-charset-mismatch. In the old installer it was possible for users to request a certain character set for an upgrade, but in the new installer the question is never asked. So these warnings were shown whenever a non-default character set or engine was used in the old database.
* In MysqlInstaller::preUpgrade(), fixed the incorrect strings used to identify the MySQL character sets: mysql5 instead of utf8 and mysql5-binary instead of binary.
* On install, initialise the site_stats table, using code copied from the old installer. Unlike the old installer, use SiteStats to increment the user count when the initial user is added.
* Fixed several instances of inappropriate call-by-reference. 
* Replaced call_user_func_array() with call_user_func() where possible, it is shorter and simpler.	
* Moved the caching boilerplate for DatabaseInstaller::getConnection() to the base class, and have the derived classes override an uncached function openConnection() instead. Updates r80892.
* In MysqlInstaller::getLocalSettings(), escape PHP strings correctly with LocalSettingsGenerator::escapePhpString(). 
* Reduce timeout for checks in dirIsExecutable() to 3 seconds, so that it doesn't take 30s to run when apache is in single-threaded mode for debugging.
* MySQL and SQLite have been tested and they appear to work. PostgreSQL upgrade is totally broken, apparently it was like that before I started. The Oracle code is untested.
This commit is contained in:
Tim Starling 2011-01-25 07:37:48 +00:00
parent 957302fe96
commit 0c86b1611a
13 changed files with 300 additions and 182 deletions

View file

@ -396,8 +396,10 @@ $wgAutoloadLocalClasses = array(
'LBFactory' => 'includes/db/LBFactory.php',
'LBFactory_Multi' => 'includes/db/LBFactory_Multi.php',
'LBFactory_Simple' => 'includes/db/LBFactory.php',
'LBFactory_Single' => 'includes/db/LBFactory_Single.php',
'LikeMatch' => 'includes/db/Database.php',
'LoadBalancer' => 'includes/db/LoadBalancer.php',
'LoadBalancer_Single' => 'includes/db/LBFactory_Single.php',
'LoadMonitor' => 'includes/db/LoadMonitor.php',
'LoadMonitor_MySQL' => 'includes/db/LoadMonitor.php',
'MySQLField' => 'includes/db/DatabaseMysql.php',

View file

@ -225,6 +225,7 @@ abstract class DatabaseBase implements DatabaseType {
protected $mLBInfo = array();
protected $mFakeSlaveLag = null, $mFakeMaster = false;
protected $mDefaultBigSelects = null;
protected $mSchemaVars = false;
# ------------------------------------------------------------------------------
# Accessors
@ -2472,6 +2473,17 @@ abstract class DatabaseBase implements DatabaseType {
}
}
/**
* Set variables to be used in sourceFile/sourceStream, in preference to the
* ones in $GLOBALS. If an array is set here, $GLOBALS will not be used at
* all. If it's set to false, $GLOBALS will be used.
*
* @param $vars False, or array mapping variable name to value.
*/
function setSchemaVars( $vars ) {
$this->mSchemaVars = $vars;
}
/**
* Read and execute commands from an open file handle
* Returns true on success, error string or exception on failure (depending on object's error ignore settings)
@ -2547,8 +2559,8 @@ abstract class DatabaseBase implements DatabaseType {
}
/**
* Database independent variable replacement, replaces a set of named variables
* in a sql statement with the contents of their global variables.
* Database independent variable replacement, replaces a set of variables
* in a sql statement with their contents as given by $this->getSchemaVars().
* Supports '{$var}' `{$var}` and / *$var* / (without the spaces) style variables
*
* '{$var}' should be used for text and is passed through the database's addQuotes method
@ -2558,16 +2570,17 @@ abstract class DatabaseBase implements DatabaseType {
* / *$var* / is just encoded, besides traditional dbprefix and tableoptions it's use should be avoided
*
* @param $ins String: SQL statement to replace variables in
* @param $varnames Array: Array of global variable names to replace
* @return String The new SQL statement with variables replaced
*/
protected function replaceGlobalVars( $ins, $varnames ) {
foreach ( $varnames as $var ) {
if ( isset( $GLOBALS[$var] ) ) {
$ins = str_replace( '\'{$' . $var . '}\'', $this->addQuotes( $GLOBALS[$var] ), $ins ); // replace '{$var}'
$ins = str_replace( '`{$' . $var . '}`', $this->addIdentifierQuotes( $GLOBALS[$var] ), $ins ); // replace `{$var}`
$ins = str_replace( '/*$' . $var . '*/', $this->strencode( $GLOBALS[$var] ) , $ins ); // replace /*$var*/
}
protected function replaceSchemaVars( $ins ) {
$vars = $this->getSchemaVars();
foreach ( $vars as $var => $value ) {
// replace '{$var}'
$ins = str_replace( '\'{$' . $var . '}\'', $this->addQuotes( $value ), $ins );
// replace `{$var}`
$ins = str_replace( '`{$' . $var . '}`', $this->addIdentifierQuotes( $value ), $ins );
// replace /*$var*/
$ins = str_replace( '/*$' . $var . '*/', $this->strencode( $value ) , $ins );
}
return $ins;
}
@ -2576,13 +2589,7 @@ abstract class DatabaseBase implements DatabaseType {
* Replace variables in sourced SQL
*/
protected function replaceVars( $ins ) {
$varnames = array(
'wgDBserver', 'wgDBname', 'wgDBintlname', 'wgDBuser',
'wgDBpassword', 'wgDBsqluser', 'wgDBsqlpassword',
'wgDBadminuser', 'wgDBadminpassword', 'wgDBTableOptions',
);
$ins = $this->replaceGlobalVars( $ins, $varnames );
$ins = $this->replaceSchemaVars( $ins );
// Table prefixes
$ins = preg_replace_callback( '!/\*(?:\$wgDBprefix|_)\*/([a-zA-Z_0-9]*)!',
@ -2595,6 +2602,27 @@ abstract class DatabaseBase implements DatabaseType {
return $ins;
}
/**
* Get schema variables. If none have been set via setSchemaVars(), then
* use some defaults from the current object.
*/
protected function getSchemaVars() {
if ( $this->mSchemaVars ) {
return $this->mSchemaVars;
} else {
return $this->getDefaultSchemaVars();
}
}
/**
* Get schema variables to use if none have been set via setSchemaVars().
* Override this in derived classes to provide variables for tables.sql
* and SQL patch files.
*/
protected function getDefaultSchemaVars() {
return array();
}
/**
* Table name callback
* @private

View file

@ -558,6 +558,11 @@ class DatabaseMysql extends DatabaseBase {
return $this->query( "DROP TABLE IF EXISTS " . $this->tableName( $tableName ), $fName );
}
protected function getDefaultSchemaVars() {
$vars = parent::getDefaultSchemaVars();
$vars['wgDBTableOptions'] = $GLOBALS['wgDBTableOptions'];
return $vars;
}
}
/**

View file

@ -1331,18 +1331,6 @@ class DatabaseOracle extends DatabaseBase {
return $this->mServer;
}
public function replaceVars( $ins ) {
$varnames = array( 'wgDBprefix' );
if ( $this->mFlags & DBO_SYSDBA ) {
$varnames[] = '_OracleDefTS';
$varnames[] = '_OracleTempTS';
}
$ins = $this->replaceGlobalVars( $ins, $varnames );
return parent::replaceVars( $ins );
}
public function getSearchEngine() {
return 'SearchOracle';
}

View file

@ -54,6 +54,14 @@ abstract class LBFactory {
}
}
/**
* Set the instance to be the given object
*/
static function setInstance( $instance ) {
self::destroyInstance();
self::$instance = $instance;
}
/**
* Construct a factory based on a configuration array (typically from $wgLBFactoryConf)
*/

View file

@ -0,0 +1,57 @@
<?php
/**
* An LBFactory class that always returns a single database object.
*/
class LBFactory_Single extends LBFactory {
protected $lb;
/**
* @param $conf An associative array with one member:
* - connection: The DatabaseBase connection object
*/
function __construct( $conf ) {
$this->lb = new LoadBalancer_Single( $conf );
}
function newMainLB( $wiki = false ) {
return $this->lb;
}
function getMainLB( $wiki = false ) {
return $this->lb;
}
function newExternalLB( $cluster, $wiki = false ) {
return $this->lb;
}
function &getExternalLB( $cluster, $wiki = false ) {
return $this->lb;
}
function forEachLB( $callback, $params = array() ) {
call_user_func_array( $callback, array_merge( array( $this->lb ), $params ) );
}
}
/**
* Helper class for LBFactory_Single.
*/
class LoadBalancer_Single extends LoadBalancer {
var $db;
function __construct( $params ) {
$this->db = $params['connection'];
parent::__construct( array( 'servers' => array( array(
'type' => $this->db->getType(),
'host' => $this->db->getServer(),
'dbname' => $this->db->getDBname(),
'load' => 1,
) ) ) );
}
function reallyOpenConnection( $server, $dbNameOverride = false ) {
return $this->db;
}
}

View file

@ -95,14 +95,14 @@ abstract class DatabaseInstaller {
}
/**
* Connect to the database using the administrative user/password currently
* defined in the session. On success, return the connection, on failure,
*
* This may be called multiple times, so the result should be cached.
* Open a connection to the database using the administrative user/password
* currently defined in the session, without any caching. Returns a status
* object. On success, the status object will contain a Database object in
* its value member.
*
* @return Status
*/
public abstract function getConnection();
public abstract function openConnection();
/**
* Create the database and return a Status object indicating success or
@ -112,6 +112,29 @@ abstract class DatabaseInstaller {
*/
public abstract function setupDatabase();
/**
* Connect to the database using the administrative user/password currently
* defined in the session. Returns a status object. On success, the status
* object will contain a Database object in its value member.
*
* This will return a cached connection if one is available.
*
* @return DatabaseBase
*/
public function getConnection() {
if ( $this->db ) {
return Status::newGood( $this->db );
}
$status = $this->openConnection();
if ( $status->isOK() ) {
$this->db = $status->value;
// Enable autocommit
$this->db->clearFlag( DBO_TRX );
$this->db->commit();
}
return $status;
}
/**
* Create database tables from scratch.
*
@ -142,7 +165,7 @@ abstract class DatabaseInstaller {
}
// Resume normal operations
if( $status->isOk() ) {
LBFactory::enableBackend();
$this->enableLB();
}
return $status;
}
@ -154,14 +177,57 @@ abstract class DatabaseInstaller {
*/
public abstract function getLocalSettings();
/**
* Override this to provide DBMS-specific schema variables, to be
* substituted into tables.sql and other schema files.
*/
public function getSchemaVars() {
return array();
}
/**
* Set appropriate schema variables in the current database connection.
*
* This should be called after any request data has been imported, but before
* any write operations to the database.
*/
public function setupSchemaVars() {
$status = $this->getConnection();
if ( $status->isOK() ) {
$status->value->setSchemaVars( $this->getSchemaVars() );
}
}
/**
* Set up LBFactory so that wfGetDB() etc. works.
* We set up a special LBFactory instance which returns the current
* installer connection.
*/
public function enableLB() {
$status = $this->getConnection();
if ( !$status->isOK() ) {
throw new MWException( __METHOD__.': unexpected DB connection error' );
}
LBFactory::setInstance( new LBFactory_Single( array(
'connection' => $status->value ) ) );
}
/**
* Get a Database connection object. Throw an exception if we can't get one.
*
* @return DatabaseBase
*/
public function getConnectionOrDie() {
}
/**
* Perform database upgrades
*
* @return Boolean
*/
public function doUpgrade() {
# Maintenance scripts like wfGetDB()
LBFactory::enableBackend();
$this->setupSchemaVars();
$this->enableLB();
$ret = true;
ob_start( array( $this, 'outputHandler' ) );
@ -200,16 +266,6 @@ abstract class DatabaseInstaller {
return $this->globalNames;
}
/**
* Return any table options to be applied to all tables that don't
* override them.
*
* @return Array
*/
public function getTableOptions() {
return array();
}
/**
* Construct and initialise parent.
* This is typically only called from Installer::getDBInstaller()

View file

@ -305,8 +305,6 @@ The account you specify here must already exist.',
'''MyISAM''' may be faster in single-user or read-only installations.
MyISAM databases tend to get corrupted more often than InnoDB databases.",
'config-mysql-egine-mismatch' => "'''Warning:''' you requested the $1 storage engine, but the existing database uses the $2 engine.
This upgrade script can't convert it, so it will remain $2.",
'config-mysql-charset' => 'Database character set:',
'config-mysql-binary' => 'Binary',
'config-mysql-utf8' => 'UTF-8',
@ -314,8 +312,6 @@ This upgrade script can't convert it, so it will remain $2.",
This is more efficient than MySQL's UTF-8 mode, and allows you to use the full range of Unicode characters.
In '''UTF-8 mode''', MySQL will know what character set your data is in, and can present and convert it appropriately, but it will not let you store characters above the [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
'config-mysql-charset-mismatch' => "'''Warning:''' you requested the $1 schema, but the existing database has the $2 schema.
This upgrade script can't convert it, so it will remain $2.",
'config-site-name' => 'Name of wiki:',
'config-site-name-help' => "This will appear in the title bar of the browser and in various other places.",
'config-site-name-blank' => 'Enter a site name.',
@ -467,6 +463,7 @@ Skipping creation.",
'config-install-interwiki-sql' => 'Could not find file <code>interwiki.sql</code>.',
'config-install-interwiki-exists' => "'''Warning''': The interwiki table seems to already have entries.
Skipping default list.",
'config-install-stats' => 'Initializing statistics',
'config-install-secretkey' => 'Generating secret key',
'config-insecure-secret' => "'''Warning:''' Unable to create a secure <code>$1</code>.
Consider changing it manually.",
@ -1125,8 +1122,6 @@ chmod a+w $3</pre>',
'''MyISAM''' можа быць хутчэйшай у вікі з адным удзельнікам, ці толькі для чытаньня.
Базы зьвестак на MyISAM вядомыя тым, што ў іх зьвесткі шкодзяцца нашмат часьцей за InnoDB.",
'config-mysql-egine-mismatch' => "'''Папярэджаньне:''' Вы зрабілі запыт на рухавік сховішча $1, але існуючая база зьвестак выкарыстоўвае рухавік $2.
Гэтае абнаўленьне ня можа вырашыць гэтую праблему, рухавік сховішча застанецца $2.",
'config-mysql-charset' => 'Кадаваньне базы зьвестак:',
'config-mysql-binary' => 'Двайковае',
'config-mysql-utf8' => 'UTF-8',
@ -1134,8 +1129,6 @@ chmod a+w $3</pre>',
Гэта болей эфэктыўна за рэжым MySQL UTF-8, і дазваляе Вам выкарыстоўваць увесь дыяпазон сымбаляў Unicode.
У '''рэжыме UTF-8''', MySQL ведае, якая табліцы сымбаляў выкарыстоўваецца ў Вашых зьвестках, і можа адпаведна прадстаўляць і канвэртаваць іх, але гэта не дазволіць Вам захоўваць сымбалі па-за межамі [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Базавага шматмоўнага дыяпазону].",
'config-mysql-charset-mismatch' => "'''Папярэджаньне:''' Вы зрабілі запыт на схему $1, але існуючая база зьвестак выкарыстоўвае схему $2.
Гэтае абнаўленьне ня можа вырашыць гэтую праблему, таму будзе пакінутая $2.",
'config-site-name' => 'Назва вікі:',
'config-site-name-help' => 'Назва будзе паказвацца ў загалоўку браўзэра і ў некаторых іншых месцах.',
'config-site-name-blank' => 'Увядзіце назву сайта.',
@ -1542,8 +1535,6 @@ $1
Това е по-ефективно от UTF-8 режима на MySQL и позволява използването на пълния набор от символи в Уникод.
В '''UTF-8 режим''' MySQL ще знае в кой набор от символи са данните от уикито и ще може да ги показва и променя по подходящ начин, но няма да позволява складиране на символи извън [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Основния многоезичен набор].",
'config-mysql-charset-mismatch' => "'''Предупреждение:''' заявена е $1 схема, но съществуващата база от данни е с $2 схема.
Скриптът за надграждане не може да я преобразува, затова тя ще остане $2.",
'config-site-name' => 'Име на уикито:',
'config-site-name-help' => 'Това име ще се показва в заглавната лента на браузъра и на различни други места.',
'config-site-name-blank' => 'Необходимо е да се въведе име на уикито.',
@ -2296,8 +2287,6 @@ Das hier angegebene Konto muss bereits vorhanden sein.',
'''MyISAM''' ist in Einzelnutzerumgebungen sowie bei schreibgeschützten Wikis schneller.
Bei MyISAM-Datenbanken treten tendenziell häufiger Fehler auf als bei InnoDB-Datenbanken.",
'config-mysql-egine-mismatch' => "'''Warnung:''' Als Speicher-Engine wurde $1 ausgewählt, während die Datenbank $2 verwendet.
Das Aktualisierungsskript kann die Speicher-Engine nicht konvertieren, so dass weiterhin $2 verwendet wird.",
'config-mysql-charset' => 'Datenbankzeichensatz:',
'config-mysql-binary' => 'binär',
'config-mysql-utf8' => 'UTF-8',
@ -2306,8 +2295,6 @@ Dies ist effizienter als der UTF-8-Modus von MySQL und ermöglicht so die Verwen
Im '''UTF-8-Modus''' wird MySQL den Zeichensatz der Daten erkennen und sie richtig anzeigen und konvertieren,
allerdings können keine Zeichen außerhalb des [http://de.wikipedia.org/wiki/Basic_Multilingual_Plane#Gliederung_in_Ebenen_und_Bl.C3.B6cke ''Basic Multilingual Plane'' (BMP)] gespeichert werden.",
'config-mysql-charset-mismatch' => "'''Warnung:''' Als Datenbankzeichensatz wurde $1 ausgewählt, während die Datenbank $2 verwendet.
Das Aktualisierungsskript kann den Datenbankzeichensatz nicht konvertieren, so dass weiterhin $2 verwendet wird.",
'config-site-name' => 'Name des Wikis:',
'config-site-name-help' => 'Er wird in der Titelleiste des Browsers, wie auch verschiedenen anderen Stellen, genutzt.',
'config-site-name-blank' => 'Sitenamen angeben.',
@ -2702,13 +2689,9 @@ La cuenta que especifiques aquí debe existir.',
'''MyISAM''' es más rápido en instalaciones de usuario único o de sólo lectura.
Las bases de datos MyISAM tienden a corromperse más a menudo que las bases de datos InnoDB.",
'config-mysql-egine-mismatch' => "'''Atención:''' Solicitó el motor de almacenamento $1, pero el existente en la base de datos es el motor $2.
Este código de actualización no lo puede convertir, de modo que permanecerá como $2.",
'config-mysql-charset' => 'Conjunto de caracteres de la base de datos:',
'config-mysql-binary' => 'Binario',
'config-mysql-utf8' => 'UTF-8',
'config-mysql-charset-mismatch' => "'''Advertencia:''' Has solicitado el esquema $1, pero la base de datos existente tiene el esquema $2.
Este script de actualización no puede convertirlo, de modo que permanecerá como $2.",
'config-site-name' => 'Nombre del wiki:',
'config-site-name-help' => 'Esto aparecerá en la barra de título del navegador y en varios otros lugares.',
'config-site-name-blank' => 'Ingresar un nombre de sitio.',
@ -3326,8 +3309,6 @@ Le compte que vous spécifiez ici doit déjà exister.",
'config-mysql-engine-help' => "'''InnoDB''' est presque toujours la meilleure option, car il supporte bien l'[http://fr.wikipedia.org/wiki/Ordonnancement_dans_les_syst%C3%A8mes_d%27exploitation ordonnancement].
'''MyISAM''' peut être plus rapide dans les installations monoposte ou en lecture seule. Les bases de données MyISAM ont tendance à se corrompre plus souvent que celles d'InnoDB.",
'config-mysql-egine-mismatch' => "'''Attention:''' Vous avez demandé le moteur de stockage $1, mais la base de données existante utilise le moteur $2.
Ce script de mise à niveau ne peut pas le convertir, il restera $2.",
'config-mysql-charset' => 'Jeu de caractères de la base de données :',
'config-mysql-binary' => 'Binaire',
'config-mysql-utf8' => 'UTF-8',
@ -3335,8 +3316,6 @@ Ce script de mise à niveau ne peut pas le convertir, il restera $2.",
En ''mode binaire'', MediaWiki stocke le texte UTF-8 dans des champs binaires de la base de données. C'est plus efficace que le ''mode UTF-8'' de MySQL, et vous permet d'utiliser toute la gamme des caractères Unicode.
En ''mode UTF-8'', MySQL connaîtra le jeu de caractères de vos données et pourra présenter et convertir les données de manière appropriée, mais il ne vous laissera pas stocker les caractères au-dessus du [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes plan multilingue de base] (en anglais).",
'config-mysql-charset-mismatch' => "'''Attention:''' Vous avez demandé le schéma $1, mais la base de données existante a le schéma $2.
Ce script de mise à niveau ne peut pas le convertir, il restera $2.",
'config-site-name' => 'Nom du wiki :',
'config-site-name-help' => 'Il apparaîtra dans la barre de titre du navigateur et en divers autres endroits.',
'config-site-name-blank' => 'Entrez un nom de site.',
@ -3789,8 +3768,6 @@ A conta que se especifique aquí xa debe existir.',
'''MyISAM''' é máis rápido en instalacións de usuario único e de lectura.
As bases de datos MyISAM tenden a se corromper máis a miúdo ca as bases de datos InnoDB.",
'config-mysql-egine-mismatch' => "'''Atención:''' Solicitou o motor de almacenamento $1, mais o existente na base de datos é o motor $2.
Esta escritura de actualización non o pode converter, de modo que permanecerá $2.",
'config-mysql-charset' => 'Conxunto de caracteres da base de datos:',
'config-mysql-binary' => 'Binario',
'config-mysql-utf8' => 'UTF-8',
@ -3799,8 +3776,6 @@ Isto é máis eficaz ca o modo UTF-8 de MySQL e permítelle usar o rango complet
No '''modo UTF-8''', MySQL saberá o xogo de caracteres dos seus datos e pode presentar e converter os datos de maneira axeitada,
pero non lle deixará gardar caracteres por riba do [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes plan multilingüe básico].",
'config-mysql-charset-mismatch' => "'''Atención:''' Solicitou o esquema $1, mais o existente na base de datos é o esquema $2.
Esta escritura de actualización non o pode converter, de modo que permanecerá $2.",
'config-site-name' => 'Nome do wiki:',
'config-site-name-help' => 'Isto aparecerá na barra de títulos do navegador e noutros lugares.',
'config-site-name-blank' => 'Escriba o nome do sitio.',
@ -5013,8 +4988,6 @@ Le conto que tu specifica hic debe jam exister.',
'''MyISAM''' pote esser plus rapide in installationes a usator singule o a lectura solmente.
Le bases de datos MyISAM tende a esser corrumpite plus frequentemente que le base de datos InnoDB.",
'config-mysql-egine-mismatch' => "'''Aviso:''' tu requestava le motor de immagazinage $1, ma le base de datos existente usa le motor $2.
Iste script de actualisation non pote converter lo, dunque illo remanera $2.",
'config-mysql-charset' => 'Codification de characteres in le base de datos:',
'config-mysql-binary' => 'Binari',
'config-mysql-utf8' => 'UTF-8',
@ -5022,8 +4995,6 @@ Iste script de actualisation non pote converter lo, dunque illo remanera $2.",
Isto es plus efficiente que le modo UTF-8 de MySQL, e permitte usar le rango complete de characteres Unicode.
In '''modo UTF-8''', MySQL cognoscera le codification de characteres usate pro tu dats, e pote presentar e converter lo appropriatemente, ma illo non permittera immagazinar characteres supra le [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Plano Multilingue Basic].",
'config-mysql-charset-mismatch' => "'''Aviso:''' tu requestava le schema $1, ma le base de datos existente ha le schema $2.
Iste script de actualisation non pote converter lo, dunque illo remanera $2.",
'config-site-name' => 'Nomine del wiki:',
'config-site-name-help' => 'Isto apparera in le barra de titulo del navigator e in varie altere locos.',
'config-site-name-blank' => 'Entra un nomine de sito.',
@ -5494,8 +5465,6 @@ Akun yang Anda berikan harus sudah ada.',
'''MyISAM''' mungkin lebih cepat dalam instalasi pengguna-tunggal atau hanya-baca.
Basis data MyISAM cenderung lebih sering rusak daripada basis data InnoDB.",
'config-mysql-egine-mismatch' => "'''Peringatan:''' Anda meminta mesin penyimpanan $1, tapi basis data yang ada menggunakan mesin $2.
Skrip pemutakhiran ini tidak dapat mengubahnya, sehingga akan tetap $2.",
'config-mysql-charset' => 'Set karakter basis data:',
'config-mysql-binary' => 'Biner',
'config-mysql-utf8' => 'UTF-8',
@ -5503,8 +5472,6 @@ Skrip pemutakhiran ini tidak dapat mengubahnya, sehingga akan tetap $2.",
Ini lebih efisien daripada modus UTF-8 MySQL dan memungkinkan Anda untuk menggunakan ragam penuh karakter Unicode.
Dalam '''modus UTF-8''', MySQL akan tahu apa set karakter data dan dapat menampilkan dan mengubahnya sesuai keperluan, tetapi tidak akan mengizinkan Anda menyimpan karakter di atas [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
'config-mysql-charset-mismatch' => "'''Peringatan:''' Anda meminta skema $1, tapi basis data yang ada menggunakan skema $2.
Skrip pemutakhiran ini tidak dapat mengubahnya, sehingga akan tetap $2.",
'config-site-name' => 'Nama wiki:',
'config-site-name-help' => 'Ini akan muncul di bilah judul peramban dan di berbagai tempat lainnya.',
'config-site-name-blank' => 'Masukkan nama situs.',
@ -5990,8 +5957,6 @@ chmod a+w $3</pre>',
'''MyISAM'''は、利用者が1人の場合、あるいは読み込み専用でインストールする場合に、より処理が早くなるでしょう。
ただし、MyISAMのデータベースは、InnoDBより高頻度で破損する傾向があります。",
'config-mysql-egine-mismatch' => "'''警告:'''$1ストレージエンジンが要求されましたが、既存のデータベースは$2エンジンを使用します。
この更新スクリプトは、これに対応していません、$2のままになります。",
'config-mysql-charset' => 'データベースの文字セット:',
'config-mysql-binary' => 'バイナリ',
'config-mysql-utf8' => 'UTF-8',
@ -6000,8 +5965,6 @@ chmod a+w $3</pre>',
'''UTF-8形式'''では、MySQLは、なんの文字集合がデータのなかに含まれているかを知り、それに対して適切な提示と変換をするでしょうが、
[http://ja.wikipedia.org/wiki/%E5%9F%BA%E6%9C%AC%E5%A4%9A%E8%A8%80%E8%AA%9E%E9%9D%A2 基本多言語面]の外にある文字を格納できるようにはなりません。",
'config-mysql-charset-mismatch' => "'''警告:'''$1スキーマが要求されましたが、既存のデータベースは$2スキーマです。
この更新スクリプトは、これに対応していませんので、$2のままになります。",
'config-site-name' => 'ウィキの名前:',
'config-site-name-help' => 'この事象はブラウザのタイトルバーと他の様々な場所において出現する。',
'config-site-name-blank' => 'サイト名を入力してください。',
@ -6814,8 +6777,6 @@ chmod a+w $3</pre>',
'''MyISAM''' може да е побрз кај инсталациите наменети за само еден корисник или незаписни инсталации (само читање).
Базите на податоци од MyISAM почесто се расипуваат од базите на InnoDB.",
'config-mysql-egine-mismatch' => "'''Предупредување:''' го побаравте складишниот погон $1, но постоечката база на податоци го користи погонот $2.
Оваа надградбена скрипта не може да го претвори, и затоа ќе остане на $2.",
'config-mysql-charset' => 'Збир знаци за базата:',
'config-mysql-binary' => 'Бинарен',
'config-mysql-utf8' => 'UTF-8',
@ -6823,8 +6784,6 @@ chmod a+w $3</pre>',
Ова е поефикасно отколку TF-8 режимот на MySQL, и ви овозможува да ја користите целата палета на уникодни знаци.
Во '''UTF-8 режим''', MySQL ќе знае на кој збир знаци припаѓаат вашите податоци, и може соодветно да ги претстави и претвори, но нема да ви дозволи да складиратезнаци над [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Основната повеќејазична рамнина].",
'config-mysql-charset-mismatch' => "'''Предупредување:''' ја побаравте шемата $1, но постоечката база на податоци ја има шемата $2.
Оваа надградбена скрипта не може да ја претвори, па затоа ќе остане на $2.",
'config-site-name' => 'Име на викито:',
'config-site-name-help' => 'Ова ќе се појавува во заглавната лента на прелистувачот и на разни други места.',
'config-site-name-blank' => 'Внесете име на мрежното место.',
@ -7468,8 +7427,6 @@ De gebruiker die u hier opgeeft moet al bestaan.',
'''MyISAM''' is bij een zeer beperkt aantal gebruikers mogelijk sneller, of als de wiki alleen-lezen is.
MyISAM-databases raken vaker corrupt dan InnoDB-databases.",
'config-mysql-egine-mismatch' => "'''Waarschuwing:''' u wilt de opslagwijze $1 gebruiken, maar de bestaande database gebruikt de opslagwijze $2.
Dit upgradescript kan de opslagwijze niet converteren, dus het blijft $2.",
'config-mysql-charset' => 'Tekenset voor de database:',
'config-mysql-binary' => 'Binair',
'config-mysql-utf8' => 'UTF-8',
@ -7478,8 +7435,6 @@ Dit is efficiënter dan de UTF-8-modus van MySQL en stelt u in staat de volledig
In '''UTF-8-modus''' kent MySQL de tekenset van uw gegevens en kan de databaseserver ze juist weergeven en converteren.
Het is dat niet mogelijk tekens op te slaan die de \"[http://nl.wikipedia.org/wiki/Lijst_van_Unicode-subbereiken#Basic_Multilingual_Plane Basic Multilingual Plane]\" te boven gaan.",
'config-mysql-charset-mismatch' => "'''Waarschuwing:''' u wilt het schema $1 gebruiken, maar de bestaande database gebruikt het schema $2.
Dit upgradescript kan het schema niet converteren, dus het blijft $2.",
'config-site-name' => 'Naam van de wiki:',
'config-site-name-help' => 'Deze naam verschijnt in de titelbalk van browsers en op andere plaatsen.',
'config-site-name-blank' => 'Geef een naam op voor de site.',
@ -7966,8 +7921,6 @@ Kontoen du oppgir her må finnes allerede.',
'''MyISAM''' kan være raskere i enbruker- eller les-bare-installasjoner.
MyISAM-databaser har en tendens til å bli ødelagt oftere enn InnoDB-databaser.",
'config-mysql-egine-mismatch' => "'''Advarsel:''' du ba om lagringsmotoren $1, men den eksisterende databasen bruker motoren $2.
Dette oppgraderingsskriptet kan ikke konvertere den, den vil forbli $2.",
'config-mysql-charset' => 'Databasetegnsett:',
'config-mysql-binary' => 'Binær',
'config-mysql-utf8' => 'UTF-8',
@ -7976,8 +7929,6 @@ Dette er mer effektivt enn MySQLs UTF-8 modus og tillater deg å bruke hele spek
I '''UTF-8 mode''' vil MySQL vite hvilket tegnsett dataene dine er i og kan presentere og konvertere det en riktig måte,
men det vil ikke la deg lagre tegn over «[http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes the Basic Multilingual Plane]».",
'config-mysql-charset-mismatch' => "'''Advarsel:''' du ba om skjemaet $1, men den eksisterende databasen bruker skjemaet $2.
Dette oppgraderingsskriptet kan ikke konvertere det, det vil forbli $2.",
'config-site-name' => 'Navn på wiki:',
'config-site-name-help' => 'Dette vil vises i tittellinjen i nettleseren og diverse andre steder.',
'config-site-name-blank' => 'Skriv inn et nettstedsnavn.',
@ -8706,8 +8657,6 @@ Sòn a l'è '''pa arcomandà''' gavà ch'a rancontra dij problema con soa wiki."
'''MyISAM''' a peul esse pi lest an instalassion për n'utent sol o mach an letura.
La base ëd dàit MyISAM a tira a corompse pi 'd soens che la base ëd dàit InnoDB.",
'config-mysql-egine-mismatch' => "'''Avis:''' it l'has ciamà ël motor ëd memorisassion $1, ma la base ëd dàit esistenta a deuvra ël motor $2.
Cost senari d'agiornament a peul pa convertilo, parèj a restrà $2.",
'config-mysql-charset' => 'Ansem ëd caràter dla base ëd dàit:',
'config-mysql-binary' => 'Binari',
'config-mysql-utf8' => 'UTF-8',
@ -8715,8 +8664,6 @@ Cost senari d'agiornament a peul pa convertilo, parèj a restrà $2.",
Sòn a l'é pi eficient che la manera UTF-8 ëd MySQL, e a-j përmët ëd dovré l'ansema antregh ëd caràter Unicode.
An '''manera UTF-8''', MySQL a conossrà an che ansem ëd caràter a son ij dat, e a peul presenteje e convertije apropriatament, ma a-j lassa pa memorisé ij caràter ëdzora al [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes pian multilenghìstich ëd base].",
'config-mysql-charset-mismatch' => "'''Avis:''' a l'ha ciamà lë schema $1, ma la base ëd dàit esistenta a l'ha lë schema $2.
Cost senari d'agiornament a peul pa convertilo, parèj a restrà $2.",
'config-site-name' => 'Nòm ëd la wiki:',
'config-site-name-help' => "Sòn a comparirà ant la bara dël tìtol dël navigador e an vàire d'àutri pòst.",
'config-site-name-blank' => "Ch'a buta un nòm ëd sit.",
@ -9187,7 +9134,6 @@ A conta que especificar aqui já tem de existir.',
'''MyISAM''' pode ser mais rápido no modo de utilizador único ou em instalações somente para leitura.
As bases de dados MyISAM tendem a ficar corrompidas com maior frequência do que as bases de dados InnoDB.",
'config-mysql-egine-mismatch' => "'''Aviso:''' pediu a plataforma de armazenamento $1, mas a base de dados existente usa a plataforma $2. Este código de actualização não pode fazer a conversão, por isso permanecerá como $2.",
'config-mysql-charset' => 'Conjunto de caracteres da base de dados:',
'config-mysql-binary' => 'Binary',
'config-mysql-utf8' => 'UTF-8',
@ -9196,7 +9142,6 @@ Isto é mais eficiente do que o modo UTF-8 do MySQL e permite que sejam usados t
No modo '''UTF-8''', o MySQL saberá em que conjunto de caracteres os seus dados estão e pode apresentá-los e convertê-los da forma mais adequada,
mas não lhe permitirá armazenar caracteres acima do [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Plano Multilingue Básico].",
'config-mysql-charset-mismatch' => "'''Aviso:''' pediu o esquema ''(schema)'' $1, mas a base de dados existente usa o esquema $2. Este código de actualização não pode fazer a conversão, por isso permanecerá como $2.",
'config-site-name' => 'Nome da wiki:',
'config-site-name-help' => 'Este nome aparecerá no título da janela do seu browser e em vários outros sítios.',
'config-site-name-blank' => 'Introduza o nome do site.',
@ -9798,8 +9743,6 @@ chmod a+w $3</pre>',
'config-mysql-engine-help' => "'''InnoDB''' почти всегда предпочтительнее, так как он лучше справляется с параллельным доступом.
'''MyISAM''' может оказаться быстрее для вики с одним пользователем или с минимальным количеством поступающих правок, однако базы данных на нём портятся чаще, чем на InnoDB.",
'config-mysql-egine-mismatch' => "'''Внимание:''' Вы запросили метод хранения $1, однако существующая база данных использует $2.
Этот сценарий обновления не может изменить преобразовать его и поэтому метод хранения останется $2.",
'config-mysql-charset' => 'Набор символов (кодовая таблица) базы данных:',
'config-mysql-binary' => 'Двоичный',
'config-mysql-utf8' => 'UTF-8',
@ -9807,8 +9750,6 @@ chmod a+w $3</pre>',
Это более эффективно, чем ''UTF-8 режим'' MySQL, и позволяет использовать полный набор символов Unicode.
В '''режиме UTF-8''' MySQL будет знать в какой кодировке находятся Ваши данные и может отображать и преобразовывать их соответствующим образом, но это не позволит вам хранить символы выше [http://en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Базовой Многоязыковой Плоскости].",
'config-mysql-charset-mismatch' => "'''Внимание.''' Вы запросили схему $1, но существующая база данных имеет схему $2.
Этот сценарий обновления не сможет преобразовать схему, она останется типа $2.",
'config-site-name' => 'Название вики:',
'config-site-name-help' => 'Название будет отображаться в заголовке окна браузера и в некоторых других местах вики.',
'config-site-name-blank' => 'Введите название сайта.',
@ -10623,14 +10564,12 @@ chmod a+w $3</pre>',
'config-mysql-engine-help' => "'''InnoDB'''通常是最佳选项,因为它对并发操作有着良好的支持。
'''MyISAM'''在单用户或只读环境下可能会有更快的性能表现。但MyISAM数据库出错的概率一般要大于InnoDB数据库。",
'config-mysql-egine-mismatch' => "'''警告:'''您选择了使用$1存储引擎但现有的数据库使用了$2引擎。升级脚本无法转换它故将保持$2。",
'config-mysql-charset' => '数据库字符集:',
'config-mysql-binary' => '二进制',
'config-mysql-utf8' => 'UTF-8',
'config-mysql-charset-help' => "在'''二进制模式'''下MediaWiki会将UTF-8编码的文本存于数据库的二进制字段中。相对于MySQL的UTF-8模式这种方法效率更高并允许您使用全范围的Unicode字符。
'''UTF-8模式'''MySQL将知道您数据使用的字符集并能适当地提供和转换内容。但这样做您将无法在数据库中存储[http://zh.wikipedia.org/wiki/基本多文种平面 基本多文种平面]以外的字符。",
'config-mysql-charset-mismatch' => "'''警告:'''您选择了使用$1模式但现有的数据库使用了$2模式。升级脚本无法转换它故将保持$2。",
'config-site-name' => 'Wiki的名称',
'config-site-name-help' => '填入的内容会出现在浏览器的标题栏以及其他多处位置中。',
'config-site-name-blank' => '输入网站的名称。',

View file

@ -555,6 +555,27 @@ abstract class Installer {
$this->parserOptions->setExternalLinkTarget( $wgExternalLinkTarget );
}
/**
* Install step which adds a row to the site_stats table with appropriate
* initial values.
*/
public function populateSiteStats( DatabaseInstaller $installer ) {
$status = $installer->getConnection();
if ( !$status->isOK() ) {
return $status;
}
$status->value->insert( 'site_stats', array(
'ss_row_id' => 1,
'ss_total_views' => 0,
'ss_total_edits' => 0,
'ss_good_articles' => 0,
'ss_total_pages' => 0,
'ss_users' => 0,
'ss_admins' => 0,
'ss_images' => 0 ) );
return Status::newGood();
}
/**
* Exports all wg* variables stored by the installer into global scope.
*/
@ -1098,7 +1119,7 @@ abstract class Installer {
break;
}
$text = Http::get( $url . $file );
$text = Http::get( $url . $file, array( 'timeout' => 3 ) );
unlink( $dir . $file );
if ( $text == 'exec' ) {
@ -1202,11 +1223,12 @@ abstract class Installer {
* @param $installer DatabaseInstaller so we can make callbacks
* @return array
*/
protected function getInstallSteps( DatabaseInstaller &$installer ) {
protected function getInstallSteps( DatabaseInstaller $installer ) {
$coreInstallSteps = array(
array( 'name' => 'database', 'callback' => array( $installer, 'setupDatabase' ) ),
array( 'name' => 'tables', 'callback' => array( $installer, 'createTables' ) ),
array( 'name' => 'interwiki', 'callback' => array( $installer, 'populateInterwikiTable' ) ),
array( 'name' => 'stats', 'callback' => array( $this, 'populateSiteStats' ) ),
array( 'name' => 'secretkey', 'callback' => array( $this, 'generateSecretKey' ) ),
array( 'name' => 'upgradekey', 'callback' => array( $this, 'generateUpgradeKey' ) ),
array( 'name' => 'sysop', 'callback' => array( $this, 'createSysop' ) ),
@ -1254,16 +1276,17 @@ abstract class Installer {
$installResults = array();
$installer = $this->getDBInstaller();
$installer->preInstall();
$installer->setupSchemaVars();
$steps = $this->getInstallSteps( $installer );
foreach( $steps as $stepObj ) {
$name = $stepObj['name'];
call_user_func_array( $startCB, array( $name ) );
// Perform the callback step
$status = call_user_func_array( $stepObj['callback'], array( &$installer ) );
$status = call_user_func( $stepObj['callback'], $installer );
// Output and save the results
call_user_func_array( $endCB, array( $name, $status ) );
call_user_func( $endCB, $name, $status );
$installResults[$name] = $status;
// If we've hit some sort of fatal, we need to bail.
@ -1364,6 +1387,10 @@ abstract class Installer {
$user->setEmail( $this->getVar( '_AdminEmail' ) );
}
$user->saveSettings();
// Update user count
$ssUpdate = new SiteStatsUpdate( 0, 0, 0, 0, 1 );
$ssUpdate->doUpdate();
}
$status = Status::newGood();
@ -1400,7 +1427,7 @@ abstract class Installer {
*
* @return Status
*/
protected function createMainpage( DatabaseInstaller &$installer ) {
protected function createMainpage( DatabaseInstaller $installer ) {
$status = Status::newGood();
try {
// STUPID STUPID $wgTitle. PST calls getUserSig(), which joyfully

View file

@ -111,25 +111,21 @@ class MysqlInstaller extends DatabaseInstaller {
return $status;
}
public function getConnection() {
public function openConnection() {
$status = Status::newGood();
if( is_null( $this->db ) ) {
try {
$this->db = new DatabaseMysql(
$this->getVar( 'wgDBserver' ),
$this->getVar( '_InstallUser' ),
$this->getVar( '_InstallPassword' ),
false,
false,
0,
$this->getVar( 'wgDBprefix' )
);
$status->value = $this->db;
} catch ( DBConnectionError $e ) {
$status->fatal( 'config-connection-error', $e->getMessage() );
}
} else {
$status->value = $this->db;
try {
$db = new DatabaseMysql(
$this->getVar( 'wgDBserver' ),
$this->getVar( '_InstallUser' ),
$this->getVar( '_InstallPassword' ),
false,
false,
0,
$this->getVar( 'wgDBprefix' )
);
$status->value = $db;
} catch ( DBConnectionError $e ) {
$status->fatal( 'config-connection-error', $e->getMessage() );
}
return $status;
}
@ -158,9 +154,9 @@ class MysqlInstaller extends DatabaseInstaller {
if ( preg_match( '/^latin1/', $row->Collation ) ) {
$existingSchema = 'mysql4';
} elseif ( preg_match( '/^utf8/', $row->Collation ) ) {
$existingSchema = 'mysql5';
$existingSchema = 'utf8';
} elseif ( preg_match( '/^binary/', $row->Collation ) ) {
$existingSchema = 'mysql5-binary';
$existingSchema = 'binary';
} else {
$existingSchema = false;
$this->parent->showMessage( 'config-unknown-collation' );
@ -177,11 +173,9 @@ class MysqlInstaller extends DatabaseInstaller {
}
if ( $existingSchema && $existingSchema != $this->getVar( '_MysqlCharset' ) ) {
$this->parent->showMessage( 'config-mysql-charset-mismatch', $this->getVar( '_MysqlCharset' ), $existingSchema );
$this->setVar( '_MysqlCharset', $existingSchema );
}
if ( $existingEngine && $existingEngine != $this->getVar( '_MysqlEngine' ) ) {
$this->parent->showMessage( 'config-mysql-egine-mismatch', $this->getVar( '_MysqlEngine' ), $existingEngine );
$this->setVar( '_MysqlEngine', $existingEngine );
}
@ -445,16 +439,36 @@ class MysqlInstaller extends DatabaseInstaller {
return $status;
}
public function getTableOptions() {
return array( 'engine' => $this->getVar( '_MysqlEngine' ),
'default charset' => $this->getVar( '_MysqlCharset' ) );
/**
* Return any table options to be applied to all tables that don't
* override them.
*
* @return String
*/
protected function getTableOptions() {
$options = array();
if ( $this->getVar( '_MysqlEngine' ) !== null ) {
$options[] = "ENGINE=" . $this->getVar( '_MysqlEngine' );
}
if ( $this->getVar( '_MysqlCharset' ) !== null ) {
$options[] = 'DEFAULT CHARSET=' . $this->getVar( '_MysqlCharset' );
}
return implode( ', ', $options );
}
/**
* Get variables to substitute into tables.sql and the SQL patch files.
*/
public function getSchemaVars() {
return array(
'wgDBTableOptions' => $this->getTableOptions(),
);
}
public function getLocalSettings() {
$dbmysql5 = wfBoolToStr( $this->getVar( 'wgDBmysql5', true ) );
$prefix = $this->getVar( 'wgDBprefix' );
$opts = $this->getTableOptions();
$tblOpts = "ENGINE=" . $opts['engine'] . ', DEFAULT CHARSET=' . $opts['default charset'];
$prefix = LocalSettingsGenerator::escapePhpString( $this->getVar( 'wgDBprefix' ) );
$tblOpts = LocalSettingsGenerator::escapePhpString( $this->getTableOptions() );
return
"# MySQL specific settings
\$wgDBprefix = \"{$prefix}\";

View file

@ -109,11 +109,11 @@ class OracleInstaller extends DatabaseInstaller {
return $status;
}
public function getConnection() {
public function openConnection() {
$status = Status::newGood();
try {
if ( $this->useSysDBA ) {
$this->db = new DatabaseOracle(
$db = new DatabaseOracle(
$this->getVar( 'wgDBserver' ),
$this->getVar( '_InstallUser' ),
$this->getVar( '_InstallPassword' ),
@ -122,7 +122,7 @@ class OracleInstaller extends DatabaseInstaller {
$this->getVar( 'wgDBprefix' )
);
} else {
$this->db = new DatabaseOracle(
$db = new DatabaseOracle(
$this->getVar( 'wgDBserver' ),
$this->getVar( 'wgDBuser' ),
$this->getVar( 'wgDBpassword' ),
@ -131,7 +131,7 @@ class OracleInstaller extends DatabaseInstaller {
$this->getVar( 'wgDBprefix' )
);
}
$status->value = $this->db;
$status->value = $db;
} catch ( DBConnectionError $e ) {
$status->fatal( 'config-connection-error', $e->getMessage() );
}
@ -176,12 +176,6 @@ class OracleInstaller extends DatabaseInstaller {
}
if ( !$this->db->selectDB( $this->getVar( 'wgDBuser' ) ) ) {
/**
* The variables $_OracleDefTS, $_OracleTempTS are used by maintenance/oracle/user.sql
* Set here for fetching in DatabaseOracle::replaceVars()
*/
$GLOBALS['_OracleDefTS'] = $this->getVar( '_OracleDefTS' );
$GLOBALS['_OracleTempTS'] = $this->getVar( '_OracleTempTS' );
$this->db->setFlag( DBO_DDLMODE );
$error = $this->db->sourceFile( "$IP/maintenance/oracle/user.sql" );
if ( $error !== true || !$this->db->selectDB( $this->getVar( 'wgDBuser' ) ) ) {
@ -203,6 +197,15 @@ class OracleInstaller extends DatabaseInstaller {
return $status;
}
public function getSchemaVars() {
/**
* The variables $_OracleDefTS, $_OracleTempTS are used by maintenance/oracle/user.sql
*/
return array(
'_OracleDefTS' => $this->getVar( '_OracleDefTS' ),
'_OracleTempTS' => $this->getVar( '_OracleTempTS' ),
);
}
public function getLocalSettings() {
$prefix = $this->getVar( 'wgDBprefix' );

View file

@ -98,21 +98,17 @@ class PostgresInstaller extends DatabaseInstaller {
return $status;
}
function getConnection($database = 'template1') {
function openConnection( $database = 'template1' ) {
$status = Status::newGood();
if( is_null( $this->db ) ) {
try {
$this->db = new DatabasePostgres(
$this->getVar( 'wgDBserver' ),
$this->getVar( '_InstallUser' ),
$this->getVar( '_InstallPassword' ),
$database );
$status->value = $this->db;
} catch ( DBConnectionError $e ) {
$status->fatal( 'config-connection-error', $e->getMessage() );
}
} else {
$status->value = $this->db;
try {
$db = new DatabasePostgres(
$this->getVar( 'wgDBserver' ),
$this->getVar( '_InstallUser' ),
$this->getVar( '_InstallPassword' ),
$database );
$status->value = $db;
} catch ( DBConnectionError $e ) {
$status->fatal( 'config-connection-error', $e->getMessage() );
}
return $status;
}

View file

@ -89,25 +89,20 @@ class SqliteInstaller extends DatabaseInstaller {
return Status::newGood();
}
public function getConnection() {
public function openConnection() {
global $wgSQLiteDataDir;
$status = Status::newGood();
if( is_null( $this->db ) ) {
$dir = $this->getVar( 'wgSQLiteDataDir' );
$dbName = $this->getVar( 'wgDBname' );
try {
# FIXME: need more sensible constructor parameters, e.g. single associative array
# Setting globals kind of sucks
$wgSQLiteDataDir = $dir;
$this->db = new DatabaseSqlite( false, false, false, $dbName );
$status->value = $this->db;
} catch ( DBConnectionError $e ) {
$status->fatal( 'config-sqlite-connection-error', $e->getMessage() );
}
} else {
$status->value = $this->db;
$dir = $this->getVar( 'wgSQLiteDataDir' );
$dbName = $this->getVar( 'wgDBname' );
try {
# FIXME: need more sensible constructor parameters, e.g. single associative array
# Setting globals kind of sucks
$wgSQLiteDataDir = $dir;
$db = new DatabaseSqlite( false, false, false, $dbName );
$status->value = $db;
} catch ( DBConnectionError $e ) {
$status->fatal( 'config-sqlite-connection-error', $e->getMessage() );
}
return $status;
}