Fix selection of read/write db connection

release-0.6
thomascube 14 years ago
parent 11be9330de
commit a3de4f6054

@ -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 = 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->sqlite_initials = INSTALL_PATH . 'SQL/sqlite.initial.sql';
$this->db->set_debug((bool)$config_all['sql_debug']); $this->db->set_debug((bool)$config_all['sql_debug']);
$this->db->db_connect('w');
} }
return $this->db; return $this->db;

@ -30,7 +30,7 @@
* @author David Saez Padros <david@ols.es> * @author David Saez Padros <david@ols.es>
* @author Thomas Bruederli <roundcube@gmail.com> * @author Thomas Bruederli <roundcube@gmail.com>
* @author Lukas Kahwe Smith <smith@pooteeweet.org> * @author Lukas Kahwe Smith <smith@pooteeweet.org>
* @version 1.16 * @version 1.17
* @link http://pear.php.net/package/MDB2 * @link http://pear.php.net/package/MDB2
*/ */
class rcube_mdb2 class rcube_mdb2
@ -121,15 +121,13 @@ class rcube_mdb2
*/ */
function db_connect($mode) function db_connect($mode)
{ {
$this->db_mode = $mode;
// Already connected // Already connected
if ($this->db_connected) { if ($this->db_connected) {
// no replication, current connection is ok // 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; return;
// connected to master, current connection is ok // connected to read-write db, current connection is ok
if ($this->db_mode == 'w') if ($this->db_mode == 'w')
return; return;
@ -141,7 +139,8 @@ class rcube_mdb2
$dsn = ($mode == 'r') ? $this->db_dsnr : $this->db_dsnw; $dsn = ($mode == 'r') ? $this->db_dsnr : $this->db_dsnw;
$this->db_handle = $this->dsn_connect($dsn); $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() function query()
{ {
if (!$this->is_connected())
return null;
$params = func_get_args(); $params = func_get_args();
$query = array_shift($params); $query = array_shift($params);
@ -243,6 +239,10 @@ class rcube_mdb2
$this->db_connect($mode); $this->db_connect($mode);
// check connection before proceeding
if (!$this->is_connected())
return null;
if ($this->db_provider == 'sqlite') if ($this->db_provider == 'sqlite')
$this->_sqlite_prepare(); $this->_sqlite_prepare();

Loading…
Cancel
Save