thomascube
2010-09-21 a3de4f6054b02af4a58bd061d27a0afbca736a42
Fix selection of read/write db connection

2 files modified
19 ■■■■ changed files
program/include/rcmail.php 1 ●●●● patch | view | raw | blame | history
program/include/rcube_mdb2.php 18 ●●●● patch | view | raw | blame | history
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;
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();