Skip to content

Commit

Permalink
Extend LiskMigrationIterator from PhutilBufferedIterator
Browse files Browse the repository at this point in the history
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
  • Loading branch information
epriestley committed Jul 26, 2012
1 parent fc09bcf commit ff61dba
Showing 1 changed file with 8 additions and 25 deletions.
33 changes: 8 additions & 25 deletions src/infrastructure/storage/lisk/LiskMigrationIterator.php
Expand Up @@ -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;
}

}

0 comments on commit ff61dba

Please sign in to comment.