/**
  * @param Contract    $aggregateType
  * @param EventStream $eventStream
  *
  * @throws \Exception
  */
 public function append(Contract $aggregateType, EventStream $eventStream)
 {
     $statement = $this->insertQuery->prepare();
     $commitIdentifier = CommitIdentifier::generate()->toString();
     $committedAt = new \DateTime();
     while ($eventStream->hasNext()) {
         $event = $eventStream->next();
         $statement->bindValue(':aggregate_id', $event->aggregateRootIdentifier()->toString());
         $statement->bindValue(':aggregate_type', $aggregateType->toString());
         $statement->bindValue(':aggregate_version', $event->sequenceNumber());
         $statement->bindValue(':event_id', $event->identifier()->toString());
         $statement->bindValue(':event_payload', $this->eventSerializer->serializePayload($event));
         $statement->bindValue(':event_payload_type', $event->payloadType()->toString());
         $statement->bindValue(':event_metadata', $this->eventSerializer->serializeMetadata($event));
         $statement->bindValue(':event_metadata_type', $event->metadataType()->toString());
         $statement->bindValue(':commit_id', $commitIdentifier);
         $statement->bindValue(':committed_at', $committedAt->format('UTC'));
         $statement->execute();
         $statement->closeCursor();
     }
 }
 /**
  * @param CommitIdentifier $identifier
  *
  * @return bool
  */
 public function equals(CommitIdentifier $identifier)
 {
     return $this->uuid->toString() === $identifier->toString();
 }
 public function testCanConfirmItsInequalityWithAnotherCommitIdentifier()
 {
     $commitIdentifier1 = CommitIdentifier::generate();
     $commitIdentifier2 = CommitIdentifier::generate();
     $this->assertFalse($commitIdentifier1->equals($commitIdentifier2));
 }