]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - classes/Memcached_DataObject.php
add cleanup method to cleanup a single row
[quix0rs-gnu-social.git] / classes / Memcached_DataObject.php
index 753fe954e06495a231776d3f50fce09b7930ba95..cf7fb4340ab9f301e2f516b3440bd5f69ac1d7e5 100644 (file)
@@ -23,6 +23,20 @@ require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
 
 class Memcached_DataObject extends DB_DataObject
 {
+    /**
+     * Destructor to free global memory resources associated with
+     * this data object when it's unset or goes out of scope.
+     * DB_DataObject doesn't do this yet by itself.
+     */
+
+    function __destruct()
+    {
+        $this->free();
+        if (method_exists('DB_DataObject', '__destruct')) {
+            parent::__destruct();
+        }
+    }
+
     function &staticGet($cls, $k, $v=null)
     {
         if (is_null($v)) {
@@ -37,11 +51,17 @@ class Memcached_DataObject extends DB_DataObject
         if ($i) {
             return $i;
         } else {
-            $i = DB_DataObject::staticGet($cls, $k, $v);
-            if ($i) {
+            $i = DB_DataObject::factory($cls);
+            if (empty($i)) {
+                return null;
+            }
+            $result = $i->get($k, $v);
+            if ($result) {
                 $i->encache();
+                return $i;
+            } else {
+                return null;
             }
-            return $i;
         }
     }
 
@@ -93,6 +113,11 @@ class Memcached_DataObject extends DB_DataObject
     }
 
     static function cacheKey($cls, $k, $v) {
+        if (is_object($cls) || is_object($j) || is_object($v)) {
+            $e = new Exception();
+            common_log(LOG_ERR, __METHOD__ . ' object in param: ' .
+                str_replace("\n", " ", $e->getTraceAsString()));
+        }
         return common_cache_key(strtolower($cls).':'.$k.':'.$v);
     }
 
@@ -228,6 +253,18 @@ class Memcached_DataObject extends DB_DataObject
         return new ArrayWrapper($cached);
     }
 
+    function cleanup()
+    {
+        global $_DB_DATAOBJECT;
+
+        if (isset($_DB_DATAOBJECT['RESULTFIELDS'][$this->_DB_resultid])) {
+            unset($_DB_DATAOBJECT['RESULTFIELDS'][$this->_DB_resultid]);
+        }
+        if (isset($_DB_DATAOBJECT['RESULTS'][$this->_DB_resultid])) {
+            unset($_DB_DATAOBJECT['RESULTS'][$this->_DB_resultid]);
+        }
+    }
+
     // We overload so that 'SET NAMES "utf8"' is called for
     // each connection