From 0f1bc4bf0351dd8b284c7b4b69d350e61164b138 Mon Sep 17 00:00:00 2001
From: svncommit <devs@roundcube.net>
Date: Sun, 02 Oct 2005 11:01:44 -0400
Subject: [PATCH] 

---
 program/include/rcube_db.inc |   20 ++++++++++++++++----
 1 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/program/include/rcube_db.inc b/program/include/rcube_db.inc
index f4dc222..87cb869 100755
--- a/program/include/rcube_db.inc
+++ b/program/include/rcube_db.inc
@@ -51,7 +51,9 @@
 	// Connect to specific database	
 	function dsn_connect($dsn)
 	{
-		$dbh = DB::connect($dsn);
+		// Use persistent connections if available
+		
+		$dbh = DB::connect($dsn, array('persistent' => $true));
 
 		if (DB::isError($dbh))
 			raise_error(array('code' => 500,
@@ -65,10 +67,20 @@
 	// Connect to appropiate databse	
 	function db_connect ($mode)
 	{
-		if ($this->db_connected && $this->db_mode=='w') return;
+		// Already connected
+		
+		if ($this->db_connected)
+			{
+			// no replication, current connection is ok
+			if ($this->db_dsnw==$this->db_dsnr) return;
+			
+			// connected to master, current connection is ok
+			if ($this->db_mode=='w') return;
 
-		if ($this->db_connected && $this->db_mode==$mode) return;
-
+			// Same mode, current connection is ok
+			if ($this->db_mode==$mode) return;
+			}
+			
 		if ($mode=='r')
 			$dsn=$this->db_dsnr;
 		else

--
Gitblit v1.9.1