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
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user