From 8f485469c7955fbf5b420ee0b6f043282965715b Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Tue, 24 Feb 2015 12:23:11 +0100 Subject: Add possibility to configure max_allowed_packet value for all database engines (#1490283) --- CHANGELOG | 1 + config/defaults.inc.php | 6 ++++++ program/lib/Roundcube/rcube_db.php | 2 +- program/lib/Roundcube/rcube_db_mysql.php | 6 ++++++ program/lib/Roundcube/rcube_db_pgsql.php | 4 +++- 5 files changed, 17 insertions(+), 2 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index ee4a81e7d..064023187 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -3,6 +3,7 @@ CHANGELOG Roundcube Webmail - Plugin API: Add special onload() method to execute plugin actions before startup (session and GUI initialization) - Add possibility to print contact information (of a single contact) +- Add possibility to configure max_allowed_packet value for all database engines (#1490283) - Fix refreshing of drafts list when sending a message which was saved in meantime (#1490238) - Fix saving/sending emoticon images when assets_dir is set - Fix PHP fatal error when visiting Vacation interface and there's no sieve script yet diff --git a/config/defaults.inc.php b/config/defaults.inc.php index 06ea9ec21..edc5b32df 100644 --- a/config/defaults.inc.php +++ b/config/defaults.inc.php @@ -51,6 +51,12 @@ $config['db_table_dsn'] = array( // 'cache_messages' => 'r', ); +// It is possible to specify database variable values e.g. some limits here. +// Use them if your server is not MySQL or for better performance. +// For example Roundcube uses max_allowed_packet value (in bytes) +// which limits query size for database cache operations. +$config['db_max_allowed_packet'] = 23423440; + // ---------------------------------- // LOGGING/DEBUGGING diff --git a/program/lib/Roundcube/rcube_db.php b/program/lib/Roundcube/rcube_db.php index ab7058f2f..2cacb3013 100644 --- a/program/lib/Roundcube/rcube_db.php +++ b/program/lib/Roundcube/rcube_db.php @@ -357,7 +357,7 @@ class rcube_db public function get_variable($varname, $default = null) { // to be implemented by driver class - return $default; + return rcube::get_instance()->config->get('db_' . $varname, $default); } /** diff --git a/program/lib/Roundcube/rcube_db_mysql.php b/program/lib/Roundcube/rcube_db_mysql.php index 067e94be6..dd28c25c8 100644 --- a/program/lib/Roundcube/rcube_db_mysql.php +++ b/program/lib/Roundcube/rcube_db_mysql.php @@ -167,6 +167,12 @@ class rcube_db_mysql extends rcube_db return $this->variables[$varname]; } + // configured value has higher prio + $conf_value = rcube::get_instance()->config->get('db_' . $varname); + if ($conf_value !== null) { + return $this->variables[$varname] = $conf_value; + } + $result = $this->query('SHOW VARIABLES LIKE ?', $varname); while ($row = $this->fetch_array($result)) { diff --git a/program/lib/Roundcube/rcube_db_pgsql.php b/program/lib/Roundcube/rcube_db_pgsql.php index d33cdd859..ff41df224 100644 --- a/program/lib/Roundcube/rcube_db_pgsql.php +++ b/program/lib/Roundcube/rcube_db_pgsql.php @@ -139,9 +139,11 @@ class rcube_db_pgsql extends rcube_db // There's a known case when max_allowed_packet is queried // PostgreSQL doesn't have such limit, return immediately if ($varname == 'max_allowed_packet') { - return $default; + return rcube::get_instance()->config->get('db_' . $varname, $default); } + $this->variables[$varname] = rcube::get_instance()->config->get('db_' . $varname); + if (!isset($this->variables)) { $this->variables = array(); -- cgit v1.2.3