summaryrefslogtreecommitdiff
path: root/program/include
diff options
context:
space:
mode:
authorthomascube <thomas@roundcube.net>2010-09-21 06:43:24 +0000
committerthomascube <thomas@roundcube.net>2010-09-21 06:43:24 +0000
commita3de4f6054b02af4a58bd061d27a0afbca736a42 (patch)
tree6a89fd2d0520ee4d82c5a86b48c99288c2c4ef2d /program/include
parent11be9330dee677a25653dcb83adc343b8bf95a88 (diff)
Fix selection of read/write db connection
Diffstat (limited to 'program/include')
-rw-r--r--program/include/rcmail.php1
-rw-r--r--program/include/rcube_mdb2.php18
2 files changed, 9 insertions, 10 deletions
diff --git a/program/include/rcmail.php b/program/include/rcmail.php
index e91111975..97d4b54f9 100644
--- a/program/include/rcmail.php
+++ b/program/include/rcmail.php
@@ -236,7 +236,6 @@ class rcmail
$this->db = new rcube_mdb2($config_all['db_dsnw'], $config_all['db_dsnr'], $config_all['db_persistent']);
$this->db->sqlite_initials = INSTALL_PATH . 'SQL/sqlite.initial.sql';
$this->db->set_debug((bool)$config_all['sql_debug']);
- $this->db->db_connect('w');
}
return $this->db;
diff --git a/program/include/rcube_mdb2.php b/program/include/rcube_mdb2.php
index cecb7ab65..84b6e2f62 100644
--- a/program/include/rcube_mdb2.php
+++ b/program/include/rcube_mdb2.php
@@ -30,7 +30,7 @@
* @author David Saez Padros <david@ols.es>
* @author Thomas Bruederli <roundcube@gmail.com>
* @author Lukas Kahwe Smith <smith@pooteeweet.org>
- * @version 1.16
+ * @version 1.17
* @link http://pear.php.net/package/MDB2
*/
class rcube_mdb2
@@ -121,15 +121,13 @@ class rcube_mdb2
*/
function db_connect($mode)
{
- $this->db_mode = $mode;
-
// Already connected
if ($this->db_connected) {
// no replication, current connection is ok
- if ($this->db_dsnw == $this->db_dsnr)
+ if (empty($this->db_dsnr) || $this->db_dsnw == $this->db_dsnr)
return;
- // connected to master, current connection is ok
+ // connected to read-write db, current connection is ok
if ($this->db_mode == 'w')
return;
@@ -141,7 +139,8 @@ class rcube_mdb2
$dsn = ($mode == 'r') ? $this->db_dsnr : $this->db_dsnw;
$this->db_handle = $this->dsn_connect($dsn);
- $this->db_connected = true;
+ $this->db_connected = !PEAR::isError($this->db_handle);
+ $this->db_mode = $mode;
}
@@ -195,9 +194,6 @@ class rcube_mdb2
*/
function query()
{
- if (!$this->is_connected())
- return null;
-
$params = func_get_args();
$query = array_shift($params);
@@ -243,6 +239,10 @@ class rcube_mdb2
$this->db_connect($mode);
+ // check connection before proceeding
+ if (!$this->is_connected())
+ return null;
+
if ($this->db_provider == 'sqlite')
$this->_sqlite_prepare();