Add PhabricatorQueryIterator, for buffered iteration over a…


Add PhabricatorQueryIterator, for buffered iteration over a CursorPagedPolicyAwareQuery

See D19446. This should make it easier to process larger, more complex result sets in constant memory.

Today, LiskMigrationIterator takes constant memory but can't apply needX() reqeusts or withY(...) constraints.

Using a raw Query can handle this stuff, but requires memory proportional to the size of the result set.

Offer the best of both worlds: constant memory and full access to the power of Query classes.

Test Plan:
Used this script to iterate over every commit, saw sensible behavior:


require_once 'scripts/init/init-script.php';

$viewer = PhabricatorUser::getOmnipotentUser();

$query = id(new DiffusionCommitQuery())

$iterator = new PhabricatorQueryIterator($query);
foreach ($iterator as $commit) {
  echo $commit->getID()."\n";

Reviewers: amckinley

Reviewed By: amckinley

Differential Revision: https://secure.phabricator.com/D19450