From ff61dba7acf42e65e5aa2534c63917495cd97de0 Mon Sep 17 00:00:00 2001 From: epriestley Date: Thu, 26 Jul 2012 12:01:57 -0700 Subject: [PATCH] Extend LiskMigrationIterator from PhutilBufferedIterator Summary: PhutilBufferedIterator now implements all the nonspecific logic here. Test Plan: Created a test script like this: $iterator = new LiskMigrationIterator(new DifferentialRevision()); $iterator->setPageSize(3); foreach ($iterator as $key => $rev) { echo "{$key}: ".$rev->getID()."\n"; } Ran it and verified sensible iteration results. Reviewers: vrana, btrahan Reviewed By: vrana CC: aran Maniphest Tasks: T1562 Differential Revision: https://secure.phabricator.com/D3076 --- .../storage/lisk/LiskMigrationIterator.php | 33 +++++-------------- 1 file changed, 8 insertions(+), 25 deletions(-) diff --git a/src/infrastructure/storage/lisk/LiskMigrationIterator.php b/src/infrastructure/storage/lisk/LiskMigrationIterator.php index 9243c7432d..1a8b46aa9b 100644 --- a/src/infrastructure/storage/lisk/LiskMigrationIterator.php +++ b/src/infrastructure/storage/lisk/LiskMigrationIterator.php @@ -29,49 +29,32 @@ * * @task storage */ -final class LiskMigrationIterator implements Iterator { +final class LiskMigrationIterator extends PhutilBufferedIterator { private $object; private $cursor; - private $data; public function __construct(LiskDAO $object) { $this->object = $object; } - public function rewind() { + protected function didRewind() { $this->cursor = 0; - $this->data = array(); - $this->next(); - } - - public function valid() { - if (!$this->data) { - $this->next(); - } - return (bool)$this->data; - } - - public function current() { - return end($this->data); } public function key() { return $this->current()->getID(); } - public function next() { - if ($this->data) { - return array_pop($this->data); - } - $this->data = $this->object->loadAllWhere( + protected function loadPage() { + $results = $this->object->loadAllWhere( 'id > %d ORDER BY id ASC LIMIT %d', $this->cursor, - 100); - if ($this->data) { - $this->cursor = last($this->data)->getID(); - $this->data = array_reverse($this->data); + $this->getPageSize()); + if ($results) { + $this->cursor = last($results)->getID(); } + return $results; } }