1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2025-02-22 19:49:02 +01:00

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:
epriestley 2012-07-26 12:01:57 -07:00
parent fc09bcf0a3
commit ff61dba7ac

View file

@ -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;
}
}