More SQL in the conversation notice fetching

This commit is contained in:
Mikael Nordfeldth 2014-05-11 22:46:40 +02:00
parent f9481467f8
commit 4358ac0675
1 changed files with 22 additions and 27 deletions

View File

@ -76,35 +76,30 @@ class RawConversationNoticeStream extends NoticeStream
$this->id = $id;
}
function getNotices($offset, $limit, $sinceId = null, $maxId = null)
{
$all = Notice::listGet('conversation', array($this->id));
$notices = $all[$this->id];
// Re-order in reverse-chron
usort($notices, array('RawConversationNoticeStream', '_reverseChron'));
// FIXME: handle since and max
$wanted = array_slice($notices, $offset, $limit);
return new ArrayWrapper($wanted);
}
function getNoticeIds($offset, $limit, $since_id, $max_id)
{
$notice = $this->getNotices($offset, $limit, $since_id, $max_id);
$ids = $notice->fetchAll('id');
return $ids;
}
function _reverseChron($a, $b)
{
$at = strtotime($a->created);
$bt = strtotime($b->created);
if ($at == $bt) {
return 0;
} else if ($at > $bt) {
return -1;
} else {
return 1;
$conv = Conversation::getKV('id', $this->id);
if (!$conv instanceof Conversation) {
throw new ServerException('Could not find conversation');
}
$notice = new Notice();
// SELECT
$notice->selectAdd();
$notice->selectAdd('id');
// WHERE
$notice->conversation = $this->id;
if (!empty($since_id)) {
$notice->whereAdd(sprintf('notice.id > %d', $since_id));
}
if (!empty($max_id)) {
$notice->whereAdd(sprintf('notice.id <= %d', $max_id));
}
$notice->limit($offset, $limit);
// ORDER BY
// currently imitates the previously used "_reverseChron" sorting
$notice->orderBy('notice.created DESC');
return $notice->fetchAll('id');
}
}