Managed_DataObject now has listGet for all classes

This commit is contained in:
Mikael Nordfeldth 2013-08-18 21:02:33 +02:00
parent 923f16abe5
commit 97ce71e55d
6 changed files with 34 additions and 16 deletions

View File

@ -61,6 +61,24 @@ abstract class Managed_DataObject extends Memcached_DataObject
return parent::pkeyGetClass(get_called_class(), $kv); return parent::pkeyGetClass(get_called_class(), $kv);
} }
/**
* Get a multi-instance object
*
* This is a utility method to get multiple instances with a given set of
* values for a specific key column. Usually used for the primary key when
* multiple values are desired.
*
* @param array $keyCol key column name
* @param array $keyVals array of key values
*
* @return get_called_class() object with multiple instances if found, or null for no hits
*
*/
static function listGet($keyCol, $keyVals)
{
return parent::listGetClass(get_called_class(), $keyCol, $keyVals);
}
/** /**
* get/set an associative array of table columns * get/set an associative array of table columns
* *

View File

@ -267,7 +267,7 @@ class Memcached_DataObject extends Safe_DataObject
return $pkey; return $pkey;
} }
function listGet($cls, $keyCol, $keyVals) static function listGetClass($cls, $keyCol, $keyVals)
{ {
$pkeyMap = array_fill_keys($keyVals, array()); $pkeyMap = array_fill_keys($keyVals, array());
$result = array_fill_keys($keyVals, array()); $result = array_fill_keys($keyVals, array());
@ -312,7 +312,7 @@ class Memcached_DataObject extends Safe_DataObject
} }
$i->whereAddIn($keyCol, $toFetch, $i->columnType($keyCol)); $i->whereAddIn($keyCol, $toFetch, $i->columnType($keyCol));
if ($i->find()) { if ($i->find()) {
sprintf("listGet() got {$i->N} results for class $cls key $keyCol"); sprintf(__CLASS__ . "() got {$i->N} results for class $cls key $keyCol");
while ($i->fetch()) { while ($i->fetch()) {
$copy = clone($i); $copy = clone($i);
$copy->encache(); $copy->encache();

View File

@ -823,7 +823,7 @@ class Notice extends Managed_DataObject
return $this->_attachments; return $this->_attachments;
} }
$f2ps = Memcached_DataObject::listGet('File_to_post', 'post_id', array($this->id)); $f2ps = File_to_post::listGet('post_id', array($this->id));
$ids = array(); $ids = array();
@ -1380,7 +1380,7 @@ class Notice extends Managed_DataObject
return $this->_replies; return $this->_replies;
} }
$replyMap = Memcached_DataObject::listGet('Reply', 'notice_id', array($this->id)); $replyMap = Reply::listGet('notice_id', array($this->id));
$ids = array(); $ids = array();
@ -1458,7 +1458,7 @@ class Notice extends Managed_DataObject
return $this->_groups; return $this->_groups;
} }
$gis = Memcached_DataObject::listGet('Group_inbox', 'notice_id', array($this->id)); $gis = Group_inbox::listGet('notice_id', array($this->id));
$ids = array(); $ids = array();
@ -2607,7 +2607,7 @@ class Notice extends Managed_DataObject
{ {
$ids = self::_idsOf($notices); $ids = self::_idsOf($notices);
$gis = Memcached_DataObject::listGet('Group_inbox', 'notice_id', $ids); $gis = Group_inbox::listGet('notice_id', $ids);
$gids = array(); $gids = array();
@ -2648,7 +2648,7 @@ class Notice extends Managed_DataObject
{ {
$ids = self::_idsOf($notices); $ids = self::_idsOf($notices);
$f2pMap = Memcached_DataObject::listGet('File_to_post', 'post_id', $ids); $f2pMap = File_to_post::listGet('post_id', $ids);
$fileIds = array(); $fileIds = array();
@ -2686,7 +2686,7 @@ class Notice extends Managed_DataObject
if (isset($this->_faves) && is_array($this->_faves)) { if (isset($this->_faves) && is_array($this->_faves)) {
return $this->_faves; return $this->_faves;
} }
$faveMap = Memcached_DataObject::listGet('Fave', 'notice_id', array($this->id)); $faveMap = Fave::listGet('notice_id', array($this->id));
$this->_faves = $faveMap[$this->id]; $this->_faves = $faveMap[$this->id];
return $this->_faves; return $this->_faves;
} }
@ -2699,7 +2699,7 @@ class Notice extends Managed_DataObject
static function fillFaves(&$notices) static function fillFaves(&$notices)
{ {
$ids = self::_idsOf($notices); $ids = self::_idsOf($notices);
$faveMap = Memcached_DataObject::listGet('Fave', 'notice_id', $ids); $faveMap = Fave::listGet('notice_id', $ids);
$cnt = 0; $cnt = 0;
$faved = array(); $faved = array();
foreach ($faveMap as $id => $faves) { foreach ($faveMap as $id => $faves) {
@ -2717,7 +2717,7 @@ class Notice extends Managed_DataObject
static function fillReplies(&$notices) static function fillReplies(&$notices)
{ {
$ids = self::_idsOf($notices); $ids = self::_idsOf($notices);
$replyMap = Memcached_DataObject::listGet('Reply', 'notice_id', $ids); $replyMap = Reply::listGet('notice_id', $ids);
foreach ($notices as $notice) { foreach ($notices as $notice) {
$replies = $replyMap[$notice->id]; $replies = $replyMap[$notice->id];
$ids = array(); $ids = array();
@ -2735,7 +2735,7 @@ class Notice extends Managed_DataObject
if (isset($this->_repeats) && is_array($this->_repeats)) { if (isset($this->_repeats) && is_array($this->_repeats)) {
return $this->_repeats; return $this->_repeats;
} }
$repeatMap = Memcached_DataObject::listGet('Notice', 'repeat_of', array($this->id)); $repeatMap = Notice::listGet('repeat_of', array($this->id));
$this->_repeats = $repeatMap[$this->id]; $this->_repeats = $repeatMap[$this->id];
return $this->_repeats; return $this->_repeats;
} }
@ -2748,7 +2748,7 @@ class Notice extends Managed_DataObject
static function fillRepeats(&$notices) static function fillRepeats(&$notices)
{ {
$ids = self::_idsOf($notices); $ids = self::_idsOf($notices);
$repeatMap = Memcached_DataObject::listGet('Notice', 'repeat_of', $ids); $repeatMap = Notice::listGet('repeat_of', $ids);
foreach ($notices as $notice) { foreach ($notices as $notice) {
$repeats = $repeatMap[$notice->id]; $repeats = $repeatMap[$notice->id];
$notice->_setRepeats($repeats); $notice->_setRepeats($repeats);

View File

@ -78,7 +78,7 @@ class RawConversationNoticeStream extends NoticeStream
function getNotices($offset, $limit, $sinceId = null, $maxId = null) function getNotices($offset, $limit, $sinceId = null, $maxId = null)
{ {
$all = Memcached_DataObject::listGet('Notice', 'conversation', array($this->id)); $all = Notice::listGet('conversation', array($this->id));
$notices = $all[$this->id]; $notices = $all[$this->id];
// Re-order in reverse-chron // Re-order in reverse-chron
usort($notices, array('RawConversationNoticeStream', '_reverseChron')); usort($notices, array('RawConversationNoticeStream', '_reverseChron'));

View File

@ -130,7 +130,7 @@ class ThreadedNoticeList extends NoticeList
$convId[] = $notice->conversation; $convId[] = $notice->conversation;
} }
$convId = array_unique($convId); $convId = array_unique($convId);
$allMap = Memcached_DataObject::listGet('Notice', 'conversation', $convId); $allMap = Notice::listGet('conversation', $convId);
$allArray = array(); $allArray = array();
foreach ($allMap as $convId => $convNotices) { foreach ($allMap as $convId => $convNotices) {
$allArray = array_merge($allArray, $convNotices); $allArray = array_merge($allArray, $convNotices);

View File

@ -376,7 +376,7 @@ class UserActivityStream extends AtomUserNoticeFeed
function getMessagesTo() function getMessagesTo()
{ {
$msgMap = Memcached_DataObject::listGet('Message', 'to_profile', array($this->user->id)); $msgMap = Message::listGet('to_profile', array($this->user->id));
$messages = $msgMap[$this->user->id]; $messages = $msgMap[$this->user->id];
@ -389,7 +389,7 @@ class UserActivityStream extends AtomUserNoticeFeed
function getMessagesFrom() function getMessagesFrom()
{ {
$msgMap = Memcached_DataObject::listGet('Message', 'from_profile', array($this->user->id)); $msgMap = Message::listGet('from_profile', array($this->user->id));
$messages = $msgMap[$this->user->id]; $messages = $msgMap[$this->user->id];