]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - classes/Memcached_DataObject.php
Notice class has methods to check content length
[quix0rs-gnu-social.git] / classes / Memcached_DataObject.php
index 96f8d520bae94d28f7d684805317ad77e0403dd5..ea070ec849678c9570377fd2ff9b6a51cca59003 100644 (file)
@@ -33,41 +33,21 @@ class Memcached_DataObject extends DB_DataObject
             $k = $keys[0];
             unset($i);
         }
-        $i = self::getcached($cls, $k, $v);
+        $i = Memcached_DataObject::getcached($cls, $k, $v);
         if ($i) {
             return $i;
         } else {
             $i = DB_DataObject::staticGet($cls, $k, $v);
             if ($i) {
                 $i->encache();
-            } else {
-                self::cachenull($cls, $k, $v);
             }
             return $i;
         }
     }
 
-    function cachenull($cls, $k, $v)
-    {
-        $c = self::memcache();
-        if (empty($c)) {
-            return;
-        }
-        $c->set(self::cacheKey($cls, $k, $v), null);
-    }
-
-    function multicachenull($cls, $kv)
-    {
-        $c = self::memcache();
-        if (empty($c)) {
-            return;
-        }
-        $c->set(self::multicachekey($cls, $kv), null);
-    }
-
     function &pkeyGet($cls, $kv)
     {
-        $i = self::multicache($cls, $kv);
+        $i = Memcached_DataObject::multicache($cls, $kv);
         if ($i) {
             return $i;
         } else {
@@ -78,7 +58,6 @@ class Memcached_DataObject extends DB_DataObject
             if ($i->find(true)) {
                 $i->encache();
             } else {
-                self::multicachenull($cls, $kv);
                 $i = null;
             }
             return $i;
@@ -88,9 +67,6 @@ class Memcached_DataObject extends DB_DataObject
     function insert()
     {
         $result = parent::insert();
-        if ($result) {
-            $this->encache();
-        }
         return $result;
     }
 
@@ -121,11 +97,11 @@ class Memcached_DataObject extends DB_DataObject
     }
 
     static function getcached($cls, $k, $v) {
-        $c = self::memcache();
+        $c = Memcached_DataObject::memcache();
         if (!$c) {
             return false;
         } else {
-            return $c->get(self::cacheKey($cls, $k, $v));
+            return $c->get(Memcached_DataObject::cacheKey($cls, $k, $v));
         }
     }
 
@@ -192,23 +168,17 @@ class Memcached_DataObject extends DB_DataObject
 
     function multicache($cls, $kv)
     {
-        $c = self::memcache();
+        ksort($kv);
+        $c = Memcached_DataObject::memcache();
         if (!$c) {
             return false;
         } else {
-            return $c->get(self::multicachekey($cls, $kv));
+            $pkeys = implode(',', array_keys($kv));
+            $pvals = implode(',', array_values($kv));
+            return $c->get(Memcached_DataObject::cacheKey($cls, $pkeys, $pvals));
         }
     }
 
-    function multicachekey($cls, $kv)
-    {
-        ksort($kv);
-        $pkeys = implode(',', array_keys($kv));
-        $pvals = implode(',', array_values($kv));
-
-        return self::cacheKey($cls, $pkeys, $pvals);
-    }
-
     function getSearchEngine($table)
     {
         require_once INSTALLDIR.'/lib/search_engines.php';
@@ -241,7 +211,7 @@ class Memcached_DataObject extends DB_DataObject
 
     static function cachedQuery($cls, $qry, $expiry=3600)
     {
-        $c = self::memcache();
+        $c = Memcached_DataObject::memcache();
         if (!$c) {
             $inst = new $cls();
             $inst->query($qry);
@@ -271,10 +241,19 @@ class Memcached_DataObject extends DB_DataObject
     function _connect()
     {
         global $_DB_DATAOBJECT;
-        $exists = !empty($this->_database_dsn_md5) &&
-          isset($_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]);
+
+        $sum = $this->_getDbDsnMD5();
+
+        if (!empty($_DB_DATAOBJECT['CONNECTIONS'][$sum]) &&
+            !PEAR::isError($_DB_DATAOBJECT['CONNECTIONS'][$sum])) {
+            $exists = true;
+        } else {
+            $exists = false;
+       }
+
         $result = parent::_connect();
-        if (!$exists) {
+
+        if ($result && !$exists) {
             $DB = &$_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5];
             if (common_config('db', 'type') == 'mysql' &&
                 common_config('db', 'utf8')) {
@@ -288,7 +267,61 @@ class Memcached_DataObject extends DB_DataObject
                 }
             }
         }
+
         return $result;
     }
 
+    // XXX: largely cadged from DB_DataObject
+
+    function _getDbDsnMD5()
+    {
+        if ($this->_database_dsn_md5) {
+            return $this->_database_dsn_md5;
+        }
+
+        $dsn = $this->_getDbDsn();
+
+        if (is_string($dsn)) {
+            $sum = md5($dsn);
+        } else {
+            /// support array based dsn's
+            $sum = md5(serialize($dsn));
+        }
+
+        return $sum;
+    }
+
+    function _getDbDsn()
+    {
+        global $_DB_DATAOBJECT;
+
+        if (empty($_DB_DATAOBJECT['CONFIG'])) {
+            DB_DataObject::_loadConfig();
+        }
+
+        $options = &$_DB_DATAOBJECT['CONFIG'];
+
+        // if the databse dsn dis defined in the object..
+
+        $dsn = isset($this->_database_dsn) ? $this->_database_dsn : null;
+
+        if (!$dsn) {
+
+            if (!$this->_database) {
+                $this->_database = isset($options["table_{$this->__table}"]) ? $options["table_{$this->__table}"] : null;
+            }
+
+            if ($this->_database && !empty($options["database_{$this->_database}"]))  {
+                $dsn = $options["database_{$this->_database}"];
+            } else if (!empty($options['database'])) {
+                $dsn = $options['database'];
+            }
+        }
+
+        if (!$dsn) {
+            throw new Exception("No database name / dsn found anywhere");
+        }
+
+        return $dsn;
+    }
 }