From a3de4f6054b02af4a58bd061d27a0afbca736a42 Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Tue, 21 Sep 2010 02:43:24 -0400
Subject: [PATCH] Fix selection of read/write db connection

---
 program/include/rcube_mdb2.php |   18 +++++++++---------
 program/include/rcmail.php     |    1 -
 2 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/program/include/rcmail.php b/program/include/rcmail.php
index e911119..97d4b54 100644
--- a/program/include/rcmail.php
+++ b/program/include/rcmail.php
@@ -236,7 +236,6 @@
       $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 cecb7ab..84b6e2f 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 @@
      */
     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 @@
         $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 @@
      */
     function query()
     {
-        if (!$this->is_connected())
-            return null;
-
         $params = func_get_args();
         $query = array_shift($params);
 
@@ -243,6 +239,10 @@
 
         $this->db_connect($mode);
 
+        // check connection before proceeding
+        if (!$this->is_connected())
+            return null;
+
         if ($this->db_provider == 'sqlite')
             $this->_sqlite_prepare();
 

--
Gitblit v1.9.1