public function next() { $this->currentBatch->next(); $this->next = $this->currentBatch->current(); if (null === $this->next && $this->currentBatchSize >= $this->batchSize) { $entries = $this->fetchBatch($this->scn + 1); $this->currentBatchSize = count($entries); $this->currentBatch = new \ArrayIterator($entries); if ($this->currentBatch->valid()) { $this->next = $this->currentBatch->current(); $this->scn = $this->next->getScn(); } } }
/** * @return string */ private function buildWhereClause() { if (null === $this->lastItem && empty($this->whereClause)) { return ''; } $query = "WHERE "; if (null !== $this->lastItem) { $query .= "((e.timestamp > :timestamp) OR (e.timestamp = :timestamp AND e.scn > :scn) " . " OR (e.timestamp = :timestamp AND e.scn = :scn AND e.aggregateIdentifier > :aggregateIdentifier))"; $this->parameters[':timestamp'] = $this->lastItem->getTimestamp(); $this->parameters[':scn'] = $this->lastItem->getScn(); $this->parameters[':aggregateIdentifier'] = $this->lastItem->getAggregateIdentifier(); } if (null !== $this->whereClause && strlen($this->whereClause) > 0) { if (null !== $this->lastItem) { $query .= " AND ("; } $query .= $this->whereClause; if (null !== $this->lastItem) { $query .= ")"; } } return $query; }