From 435c08a7532c1b01f7deaebcf46f316e724b0f6d Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Tue, 2 Aug 2011 17:20:51 -0400 Subject: [PATCH] add listGet() method --- classes/Memcached_DataObject.php | 37 ++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) 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) {