]> source.dussan.org Git - nextcloud-server.git/commitdiff
isError should detect a PEAR_Error even if the backend is PDO.
authorThomas Mueller <thomas.mueller@tmit.eu>
Thu, 27 Jun 2013 14:48:09 +0000 (16:48 +0200)
committerJörn Friedrich Dreyer <jfd@butonic.de>
Fri, 28 Jun 2013 18:16:01 +0000 (20:16 +0200)
This can happen on errors during schema migration - which is always done with MDB2

lib/db.php

index 5e624bf30b9cbb17ac97a1412834cf4964c633b4..515563b78e10d1062a0e3645cbf90328785a2e7f 100644 (file)
@@ -962,21 +962,21 @@ class OC_DB {
         * @return bool
         */
        public static function isError($result) {
+               //MDB2 returns an MDB2_Error object
+               if (class_exists('PEAR') === true && PEAR::isError($result)) {
+                       return true;
+               }
                //PDO returns false on error (and throws an exception)
                if (self::$backend===self::BACKEND_PDO and $result === false) {
                        return true;
-               } else
-               //MDB2 returns an MDB2_Error object
-               if (self::$backend===self::BACKEND_MDB2 and PEAR::isError($result)) {
-                       return true;
-               } else {
-                       return false;
                }
+
+               return false;
        }
        /**
         * check if a result is an error and throws an exception, works with MDB2 and PDOException
         * @param mixed $result
-        * @param string message
+        * @param string $message
         * @return void
         * @throws DatabaseException
         */
@@ -992,12 +992,15 @@ class OC_DB {
        }
 
        public static function getErrorCode($error) {
-               if ( self::$backend==self::BACKEND_MDB2 and PEAR::isError($error) ) {
-                       $code = $error->getCode();
-               } elseif ( self::$backend==self::BACKEND_PDO and self::$PDO ) {
-                       $code = self::$PDO->errorCode();
+               if ( class_exists('PEAR') === true && PEAR::isError($error) ) {
+                       /** @var $error PEAR_Error */
+                       return $error->getCode();
+               }
+               if ( self::$backend==self::BACKEND_PDO and self::$PDO ) {
+                       return self::$PDO->errorCode();
                }
-               return $code;
+
+               return -1;
        }
        /**
         * returns the error code and message as a string for logging
@@ -1006,23 +1009,24 @@ class OC_DB {
         * @return string
         */
        public static function getErrorMessage($error) {
-               if ( self::$backend==self::BACKEND_MDB2 and PEAR::isError($error) ) {
+               if ( class_exists('PEAR') === true && PEAR::isError($error) ) {
                        $msg = $error->getCode() . ': ' . $error->getMessage();
                        $msg .= ' (' . $error->getDebugInfo() . ')';
-               } elseif (self::$backend==self::BACKEND_PDO and self::$PDO) {
+
+                       return $msg;
+               }
+               if (self::$backend==self::BACKEND_PDO and self::$PDO) {
                        $msg = self::$PDO->errorCode() . ': ';
                        $errorInfo = self::$PDO->errorInfo();
                        if (is_array($errorInfo)) {
                                $msg .= 'SQLSTATE = '.$errorInfo[0] . ', ';
                                $msg .= 'Driver Code = '.$errorInfo[1] . ', ';
                                $msg .= 'Driver Message = '.$errorInfo[2];
-                       }else{
-                               $msg = '';
                        }
-               }else{
-                       $msg = '';
+                       return $msg;
                }
-               return $msg;
+
+               return '';
        }
 
        /**