diff --git a/classes/Memcached_DataObject.php b/classes/Memcached_DataObject.php index 9c92003e5c..5115cf7520 100644 --- a/classes/Memcached_DataObject.php +++ b/classes/Memcached_DataObject.php @@ -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) {