]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - classes/Memcached_DataObject.php
Merge remote branch 'gitorious/0.9.x' into 1.0.x
[quix0rs-gnu-social.git] / classes / Memcached_DataObject.php
index 8ffb46cc52d5da0e4a4a2b43cf453f3748858da6..b92b67e77557530827ca2bc919c9832dea77ad56 100644 (file)
@@ -74,7 +74,7 @@ class Memcached_DataObject extends Safe_DataObject
             return $i;
         } else {
             $i = DB_DataObject::factory($cls);
-            if (empty($i)) {
+            if (empty($i) || PEAR::isError($i)) {
                 return false;
             }
             foreach ($kv as $k => $v) {
@@ -338,13 +338,31 @@ class Memcached_DataObject extends Safe_DataObject
         }
 
         $start = microtime(true);
-        $result = parent::_query($string);
+        $fail = false;
+        $result = null;
+        if (Event::handle('StartDBQuery', array($this, $string, &$result))) {
+            try {
+                $result = parent::_query($string);
+            } catch (Exception $e) {
+                $fail = $e;
+            }
+            Event::handle('EndDBQuery', array($this, $string, &$result));
+        }
         $delta = microtime(true) - $start;
 
         $limit = common_config('db', 'log_slow_queries');
         if (($limit > 0 && $delta >= $limit) || common_config('db', 'log_queries')) {
             $clean = $this->sanitizeQuery($string);
-            common_log(LOG_DEBUG, sprintf("DB query (%0.3fs): %s", $delta, $clean));
+            if ($fail) {
+                $msg = sprintf("FAILED DB query (%0.3fs): %s - %s", $delta, $fail->getMessage(), $clean);
+            } else {
+                $msg = sprintf("DB query (%0.3fs): %s", $delta, $clean);
+            }
+            common_log(LOG_DEBUG, $msg);
+        }
+
+        if ($fail) {
+            throw $fail;
         }
         return $result;
     }