From: Aaron Schulz Date: Fri, 24 Apr 2015 18:07:02 +0000 (-0700) Subject: Allow setting MySQL session variables via config X-Git-Tag: 1.31.0-rc.0~11596^2 X-Git-Url: http://git.cyclocoop.org/%7B%24www_url%7Dadmin/compta/exercices/?a=commitdiff_plain;h=fe728597160b77395bfa4501d74960262834ddc0;p=lhc%2Fweb%2Fwiklou.git Allow setting MySQL session variables via config Change-Id: I39c7e0f5ffe53a3fb15da489f4dddc36af99a4b3 --- diff --git a/includes/db/Database.php b/includes/db/Database.php index 8c1ebf91cc..605dc7c470 100644 --- a/includes/db/Database.php +++ b/includes/db/Database.php @@ -69,6 +69,8 @@ abstract class DatabaseBase implements IDatabase { protected $mLBInfo = array(); protected $mDefaultBigSelects = null; protected $mSchemaVars = false; + /** @var array */ + protected $mSessionVars = array(); protected $preparedArgs; @@ -813,6 +815,8 @@ abstract class DatabaseBase implements IDatabase { } } + $this->mSessionVars = $params['variables']; + /** Get the default table prefix*/ if ( $tablePrefix == 'get from global' ) { $this->mTablePrefix = $wgDBprefix; @@ -926,6 +930,7 @@ abstract class DatabaseBase implements IDatabase { $p['password'] = isset( $p['password'] ) ? $p['password'] : false; $p['dbname'] = isset( $p['dbname'] ) ? $p['dbname'] : false; $p['flags'] = isset( $p['flags'] ) ? $p['flags'] : 0; + $p['variables'] = isset( $p['variables'] ) ? $p['variables'] : array(); $p['tablePrefix'] = isset( $p['tablePrefix'] ) ? $p['tablePrefix'] : 'get from global'; $p['schema'] = isset( $p['schema'] ) ? $p['schema'] : $defaultSchemas[$dbType]; $p['foreign'] = isset( $p['foreign'] ) ? $p['foreign'] : false; diff --git a/includes/db/DatabaseMysqlBase.php b/includes/db/DatabaseMysqlBase.php index aac95a8cca..89d34560b4 100644 --- a/includes/db/DatabaseMysqlBase.php +++ b/includes/db/DatabaseMysqlBase.php @@ -132,6 +132,15 @@ abstract class DatabaseMysqlBase extends DatabaseBase { if ( is_string( $wgSQLMode ) ) { $set[] = 'sql_mode = ' . $this->addQuotes( $wgSQLMode ); } + // Set any custom settings defined by site config + // (e.g. https://dev.mysql.com/doc/refman/4.1/en/innodb-parameters.html) + foreach ( $this->mSessionVars as $var => $val ) { + // Escape strings but not numbers to avoid MySQL complaining + if ( !is_int( $val ) && !is_float( $val ) ) { + $val = $this->addQuotes( $val ); + } + $set[] = $this->addIdentifierQuotes( $var ) . ' = ' . $val; + } if ( $set ) { // Use doQuery() to avoid opening implicit transactions (DBO_TRX)