]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
add listGet() method
authorEvan Prodromou <evan@status.net>
Tue, 2 Aug 2011 21:20:51 +0000 (17:20 -0400)
committerEvan Prodromou <evan@status.net>
Tue, 2 Aug 2011 21:20:51 +0000 (17:20 -0400)
classes/Memcached_DataObject.php

index 9c92003e5c1ec505afcd4ce1d64b1352faf5289a..5115cf752017faa64d26aebc98f2ae74203b7242 100644 (file)
@@ -156,6 +156,43 @@ class Memcached_DataObject extends Safe_DataObject
        
        return $result;
     }
+    
+    function listGet($cls, $keyCol, $keyVals)
+    {
+       $result = array_fill_keys($keyVals, array());
+       
+       $toFetch = array();
+       
+       foreach ($keyVals as $keyVal) {
+           $l = self::cacheGet(sprintf("%s:list:%s:%s", $cls, $keyCol, $keyVal));
+           if ($l !== false) {
+               $result[$keyVal] = $l;
+           } else {
+               $toFetch[] = $keyVal;
+           }
+       }
+               
+        $i = DB_DataObject::factory($cls);
+        if (empty($i)) {
+               throw new Exception(_('Cannot instantiate class ' . $cls));
+        }
+               $i->whereAddIn($keyCol, $toFetch, $i->columnType($keyCol));
+               if ($i->find()) {
+                       while ($i->fetch()) {
+                               $copy = clone($i);
+                               $copy->encache();
+                               $result[$i->$keyCol][] = $copy;
+                       }
+               }        
+       
+       foreach ($toFetch as $keyVal)
+       {
+               self::cacheSet(sprintf("%s:list:%s:%s", $cls, $keyCol, $keyVal),
+                                          $result[$keyVal]);   
+       }
+       
+       return $result;        
+    }
 
        function columnType($columnName)
        {