]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
memcache_dataobject supports some DB_DataObject_Cast objects as values
authorEvan Prodromou <evan@status.net>
Fri, 4 Jun 2010 16:52:05 +0000 (12:52 -0400)
committerEvan Prodromou <evan@status.net>
Fri, 4 Jun 2010 16:52:05 +0000 (12:52 -0400)
classes/Memcached_DataObject.php

index 0836c2019f82486232f196a977b25f0563318f5d..bd9b528dbad3137c6eda60b7dad6479c74b32e25 100644 (file)
@@ -128,12 +128,31 @@ class Memcached_DataObject extends Safe_DataObject
     }
 
     static function cacheKey($cls, $k, $v) {
-        if (is_object($cls) || is_object($k) || is_object($v)) {
+        if (is_object($cls) || is_object($k) || (is_object($v) && !($v instanceof DB_DataObject_Cast))) {
             $e = new Exception();
             common_log(LOG_ERR, __METHOD__ . ' object in param: ' .
                 str_replace("\n", " ", $e->getTraceAsString()));
         }
-        return common_cache_key(strtolower($cls).':'.$k.':'.$v);
+        if (is_object($v) && $v instanceof DB_DataObject_Cast) {
+            switch ($v->type) {
+            case 'date':
+                $vstr = $v->year . '-' . $v->month . '-' . $v->day;
+                break;
+            case 'blob':
+            case 'string':
+            case 'sql':
+            case 'datetime':
+            case 'time':
+                throw new ServerException("Unhandled DB_DataObject_Cast type passed as cacheKey value: '$v->type'");
+                break;
+            default:
+                throw new ServerException("Unknown DB_DataObject_Cast type passed as cacheKey value: '$v->type'");
+                break;
+            }
+        } else {
+            $vstr = $v;
+        }
+        return common_cache_key(strtolower($cls).':'.$k.':'.$vstr);
     }
 
     static function getcached($cls, $k, $v) {
@@ -351,7 +370,7 @@ class Memcached_DataObject extends Safe_DataObject
      * low-level database function and add a comment to the
      * query string. This should then be visible in process lists
      * and slow query logs, to help identify problem areas.
-     * 
+     *
      * Also marks whether this was a web GET/POST or which daemon
      * was running it.
      *