From 9c5bee69d7e30bf9b019d63627a3395a10af1229 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Fri, 16 Jan 2009 07:19:16 -0500
Subject: [PATCH] - Fix SQL query execution errors handling in rcube_mdb2 class (#1485509)

---
 CHANGELOG                      |    1 +
 program/include/rcube_mdb2.php |   55 +++++++++++++++++++++++++++----------------------------
 2 files changed, 28 insertions(+), 28 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index baa4c1a..0b60931 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -5,6 +5,7 @@
 ----------
 - Allow absolute URLs to images in HTML messages/sigs (#1485666)
 - Fix message body which contains both inline attachments and emotions
+- Fix SQL query execution errors handling in rcube_mdb2 class (#1485509)
 
 2009/01/08 (alec)
 ----------
diff --git a/program/include/rcube_mdb2.php b/program/include/rcube_mdb2.php
index b5767e3..3801b71 100644
--- a/program/include/rcube_mdb2.php
+++ b/program/include/rcube_mdb2.php
@@ -288,17 +288,18 @@
 
 
   /**
-   * Get number of affected rows fort he last query
+   * Get number of affected rows for the last query
    *
+   * @param  number  Optional query handle identifier
    * @return mixed   Number of rows or FALSE on failure
    * @access public
    */
-  function affected_rows($result = null)
+  function affected_rows($res_id = null)
     {
     if (!$this->db_handle)
       return FALSE;
 
-    return $this->_get_result($result);
+    return (int) $this->_get_result($res_id);
     }
 
 
@@ -350,7 +351,7 @@
 
 
   /**
-   * Get co values for a result row
+   * Get col values for a result row
    *
    * @param  object  Query result handle
    * @param  number  Fetch mode identifier
@@ -359,12 +360,8 @@
    */
   function _fetch_row($result, $mode)
     {
-    if (PEAR::isError($result))
-      {
-      raise_error(array('code' => 500, 'type' => 'db', 'line' => __LINE__, 'file' => __FILE__,
-                        'message' => $this->db_link->getMessage()), TRUE, FALSE);
+    if ($result === FALSE || PEAR::isError($result))
       return FALSE;
-      }
 
     return $result->fetchRow($mode);
     }
@@ -398,13 +395,13 @@
    * @param  string  Value to quote
    * @return string  Quoted string for use in query
    * @deprecated     Replaced by rcube_MDB2::quote_identifier
-   * @see            rcube_MDB2::quote_identifier
+   * @see            rcube_mdb2::quote_identifier
    * @access public
    */
   function quoteIdentifier($str)
-	{
+    {
     return $this->quote_identifier($str);
-	}
+    }
 
 
   /**
@@ -529,7 +526,7 @@
    * Adds a query result and returns a handle ID
    *
    * @param  object  Query handle
-   * @return mixed   Handle ID or FALE on failure
+   * @return mixed   Handle ID
    * @access private
    */
   function _add_result($res)
@@ -537,26 +534,27 @@
     // sql error occured
     if (PEAR::isError($res))
       {
+      $this->db_error = TRUE;
+      $this->db_error_msg = $res->getMessage();
       raise_error(array('code' => 500, 'type' => 'db', 'line' => __LINE__, 'file' => __FILE__,
-                        'message' => $res->getMessage() . " Query: " . substr(preg_replace('/[\r\n]+\s*/', ' ', $res->userinfo), 0, 512)), TRUE, FALSE);
-      return FALSE;
+    	    'message' => $res->getMessage() . " Query: " 
+	    . substr(preg_replace('/[\r\n]+\s*/', ' ', $res->userinfo), 0, 512)),
+	    TRUE, FALSE);
       }
-    else
-      {
-      $res_id = sizeof($this->a_query_results);
-      $this->a_query_results[$res_id] = $res;
-      $this->last_res_id = $res_id;
-      return $res_id;
-      }
+    
+    $res_id = sizeof($this->a_query_results);
+    $this->last_res_id = $res_id;
+    $this->a_query_results[$res_id] = $res;
+    return $res_id;
     }
 
 
   /**
    * Resolves a given handle ID and returns the according query handle
-   * If no ID is specified, the last ressource handle will be returned
+   * If no ID is specified, the last resource handle will be returned
    *
    * @param  number  Handle ID
-   * @return mixed   Ressource handle or FALE on failure
+   * @return mixed   Resource handle or FALSE on failure
    * @access private
    */
   function _get_result($res_id=NULL)
@@ -564,10 +562,11 @@
     if ($res_id==NULL)
       $res_id = $this->last_res_id;
 
-     if ($res_id && isset($this->a_query_results[$res_id]))
-       return $this->a_query_results[$res_id];
-     else
-       return FALSE;
+    if (isset($this->a_query_results[$res_id]))
+      if (!PEAR::isError($this->a_query_results[$res_id]))
+        return $this->a_query_results[$res_id];
+    
+    return FALSE;
     }
 
 

--
Gitblit v1.9.1