Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/infrastructure/storage/lisk/PhabricatorQueryIterator.php
12241 views
1
<?php
2
3
final class PhabricatorQueryIterator extends PhutilBufferedIterator {
4
5
private $query;
6
private $pager;
7
8
public function __construct(PhabricatorCursorPagedPolicyAwareQuery $query) {
9
$this->query = $query;
10
}
11
12
protected function didRewind() {
13
$pager = new AphrontCursorPagerView();
14
15
$page_size = $this->getPageSize();
16
$pager->setPageSize($page_size);
17
18
$this->pager = $pager;
19
}
20
21
public function key() {
22
return $this->current()->getID();
23
}
24
25
protected function loadPage() {
26
if (!$this->pager) {
27
return array();
28
}
29
30
$pager = clone $this->pager;
31
$query = clone $this->query;
32
33
$query->setDisableOverheating(true);
34
35
$results = $query->executeWithCursorPager($pager);
36
37
// If we got less than a full page of results, this was the last set of
38
// results. Throw away the pager so we end iteration.
39
if (!$pager->getHasMoreResults()) {
40
$this->pager = null;
41
} else {
42
$this->pager->setAfterID($pager->getNextPageID());
43
}
44
45
return $results;
46
}
47
48
}
49
50