From dfca688070e8fc87966545f6791ad5ed65d6477a Mon Sep 17 00:00:00 2001
From: Cyril Vazquez <cyril.vazquez@maarch.org>
Date: Thu, 21 Mar 2013 13:54:38 +0000
Subject: [PATCH] Fix: test connection before query, connect and disconnect

---
 core/trunk/core/class/class_db.php | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/core/trunk/core/class/class_db.php b/core/trunk/core/class/class_db.php
index 63c3960af70..2d1d58033eb 100644
--- a/core/trunk/core/class/class_db.php
+++ b/core/trunk/core/class/class_db.php
@@ -195,9 +195,13 @@ class dbquery extends functions
     */
     public function connect()
     {
+        # Do not connect if already connected
+        if($this->_sqlLink)
+            return;
+            
         $this->_debug = 0;
         $this->_nbQuery = 0;
-        
+
         switch($this->_databasetype) 
         {
         case 'MYSQL' : 
@@ -285,20 +289,15 @@ class dbquery extends functions
     {
         switch($this->_databasetype) 
         {
-        
         case 'POSTGRESQL'   : 
-            $this->connect();
             $this->query("select column_name from information_schema.columns where table_name = '" . $table . "' and column_name = '" . $field . "'");
             $res = $this->nb_result();
-            $this->disconnect();
             if ($res > 0) return true; 
             else return false;
             
         case 'ORACLE'       : 
-            $this->connect();
             $this->query("SELECT * from USER_TAB_COLUMNS where TABLE_NAME = '" . $table . "' AND COLUMN_NAME = '" . $field . "'");
             $res = $this->nb_result();
-            $this->disconnect();
             if ($res > 0) return true; 
             else return false;
         
@@ -319,6 +318,10 @@ class dbquery extends functions
     */
     public function query($sqlQuery, $catchError = false, $noFilter = false)
     {
+        # Connect if not already connected
+        if(!$this->_sqlLink)
+            $this->connect();
+        
         $canExecute = true;        
         // if filter, we looking for ; or -- in the sql query
         if (!$noFilter) {
@@ -619,6 +622,7 @@ class dbquery extends functions
             $dbNbResult->connect();
             $dbNbResult->query("SELECT COUNT(*) FROM  (" . $this->_debugQuery . ")");
             $row = $dbNbResult->fetch_array();
+            $dbNbResult->disconnect();
             return $row[0]; 
         default             : return false;
         }
@@ -630,6 +634,9 @@ class dbquery extends functions
     */
     public function disconnect()
     {
+        if(!$this->_sqlLink)
+            return;
+
         switch($this->_databasetype)
         {
         case 'MYSQL':
-- 
GitLab