<?php

class ChunkedQueryIterator implements Iterator
{
  private 
$pdo$sql$query$offset$limit$result$current;

  public function 
__construct($pdo$sql$limit)
  {
    
$this->pdo    $pdo;
    
$this->sql    $sql;
    
$this->query  $this->pdo->prepare($this->sql);
    
$this->offset 0;
    
$this->limit  $limit;
  }

  public function 
current()
  {
    return 
$this->current;
  }
  
  public function 
next()
  {
    
$this->current $this->query->fetch();
    if (!
$this->current) {
      
$this->query->execute(array(':offset' => $this->offset':limit' => $this->limit));
      
$this->current $this->query->fetch();
      
$this->offset += $this->limit;
    }
  }
  
  public function 
key()
  {
    return 
null;
  }

  public function 
valid()
  {
    if (!
$this->current) {
      
$this->next();
    }
    return (bool)
$this->current;
  }

  public function 
rewind()
  {
    
$this->offset 0;
    
$this->query->execute(array(':offset' => $this->offset':limit' => $this->limit));
  }
}