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
|
* @task storage
|
||||||
*/
|
*/
|
||||||
final class LiskMigrationIterator implements Iterator {
|
final class LiskMigrationIterator extends PhutilBufferedIterator {
|
||||||
|
|
||||||
private $object;
|
private $object;
|
||||||
private $cursor;
|
private $cursor;
|
||||||
private $data;
|
|
||||||
|
|
||||||
public function __construct(LiskDAO $object) {
|
public function __construct(LiskDAO $object) {
|
||||||
$this->object = $object;
|
$this->object = $object;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function rewind() {
|
protected function didRewind() {
|
||||||
$this->cursor = 0;
|
$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() {
|
public function key() {
|
||||||
return $this->current()->getID();
|
return $this->current()->getID();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function next() {
|
protected function loadPage() {
|
||||||
if ($this->data) {
|
$results = $this->object->loadAllWhere(
|
||||||
return array_pop($this->data);
|
|
||||||
}
|
|
||||||
$this->data = $this->object->loadAllWhere(
|
|
||||||
'id > %d ORDER BY id ASC LIMIT %d',
|
'id > %d ORDER BY id ASC LIMIT %d',
|
||||||
$this->cursor,
|
$this->cursor,
|
||||||
100);
|
$this->getPageSize());
|
||||||
if ($this->data) {
|
if ($results) {
|
||||||
$this->cursor = last($this->data)->getID();
|
$this->cursor = last($results)->getID();
|
||||||
$this->data = array_reverse($this->data);
|
|
||||||
}
|
}
|
||||||
|
return $results;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user