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:
parent
fc09bcf0a3
commit
ff61dba7ac
1 changed files with 8 additions and 25 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue