getDatabaseDriver() публичный Метод

public getDatabaseDriver ( ) : Client
Результат GraphAware\Neo4j\Client\Client
Пример #1
0
 protected function nativeQuery($query, $parameters, QueryResultMapping $resultMapping)
 {
     $parameters = null !== $parameters ? (array) $parameters : [];
     $result = $this->entityManager->getDatabaseDriver()->run($query, $parameters);
     if ($result->size() < 1) {
         return;
     }
     if ($result->size() > 1 && $resultMapping->getQueryResultType() !== QueryResultMapping::RESULT_MULTIPLE) {
         throw new \RuntimeException(sprintf('Expected a single record, got %d', $result->size()));
     }
     $results = [];
     $mappingMetadata = $this->entityManager->getResultMappingMetadata($resultMapping->getQueryResultClass());
     foreach ($result->records() as $record) {
         $results[] = $this->hydrateQueryRecord($mappingMetadata, $record);
     }
     return $resultMapping->getQueryResultType() === QueryResultMapping::RESULT_SINGLE ? $results[0] : $results;
 }
Пример #2
0
 public function flush()
 {
     //preFlush
     if ($this->eventManager->hasListeners(Events::PRE_FLUSH)) {
         $this->eventManager->dispatchEvent(Events::PRE_FLUSH, new Event\PreFlushEventArgs($this->entityManager));
     }
     //Detect changes
     $this->detectRelationshipReferenceChanges();
     $this->detectRelationshipEntityChanges();
     $this->detectEntityChanges();
     $statements = [];
     //onFlush
     if ($this->eventManager->hasListeners(Events::ON_FLUSH)) {
         $this->eventManager->dispatchEvent(Events::ON_FLUSH, new Event\OnFlushEventArgs($this->entityManager));
     }
     foreach ($this->nodesScheduledForCreate as $nodeToCreate) {
         $this->traverseRelationshipEntities($nodeToCreate);
         $class = get_class($nodeToCreate);
         $persister = $this->getPersister($class);
         $statements[] = $persister->getCreateQuery($nodeToCreate);
     }
     $tx = $this->entityManager->getDatabaseDriver()->transaction();
     $tx->begin();
     $nodesCreationStack = $this->flushOperationProcessor->processNodesCreationJob($this->nodesScheduledForCreate);
     $results = $tx->runStack($nodesCreationStack);
     foreach ($results as $result) {
         foreach ($result->records() as $record) {
             $oid = $record->get('oid');
             $gid = $record->get('id');
             $this->hydrateGraphId($oid, $gid);
             $this->entitiesById[$gid] = $this->nodesScheduledForCreate[$oid];
             $this->entityIds[$oid] = $gid;
             $this->entityStates[$oid] = self::STATE_MANAGED;
             $this->manageEntityReference($oid);
         }
     }
     $relStack = $this->entityManager->getDatabaseDriver()->stack('rel_create_schedule');
     foreach ($this->relationshipsScheduledForCreated as $relationship) {
         $statement = $this->relationshipPersister->getRelationshipQuery($this->entityIds[spl_object_hash($relationship[0])], $relationship[1], $this->entityIds[spl_object_hash($relationship[2])]);
         $relStack->push($statement->text(), $statement->parameters());
     }
     if (count($this->relationshipsScheduledForDelete) > 0) {
         foreach ($this->relationshipsScheduledForDelete as $toDelete) {
             $statement = $this->relationshipPersister->getDeleteRelationshipQuery($toDelete[0], $toDelete[1], $toDelete[2]);
             $relStack->push($statement->text(), $statement->parameters());
         }
     }
     $tx->runStack($relStack);
     $reStack = Stack::create('rel_entity_create');
     foreach ($this->relEntitiesScheduledForCreate as $oid => $info) {
         $rePersister = $this->getRelationshipEntityPersister(get_class($info[0]));
         $statement = $rePersister->getCreateQuery($info[0], $info[1]);
         $reStack->push($statement->text(), $statement->parameters());
     }
     foreach ($this->relEntitesScheduledForUpdate as $oid => $entity) {
         $rePersister = $this->getRelationshipEntityPersister(get_class($entity));
         $statement = $rePersister->getUpdateQuery($entity);
         $reStack->push($statement->text(), $statement->parameters());
     }
     foreach ($this->relEntitesScheduledForDelete as $o) {
         $statement = $this->getRelationshipEntityPersister(get_class($o))->getDeleteQuery($o);
         $reStack->push($statement->text(), $statement->parameters());
     }
     $tx->runStack($reStack);
     $updateNodeStack = Stack::create('update_nodes');
     foreach ($this->nodesScheduledForUpdate as $entity) {
         $this->traverseRelationshipEntities($entity);
         $statement = $this->getPersister(get_class($entity))->getUpdateQuery($entity);
         $updateNodeStack->push($statement->text(), $statement->parameters());
     }
     $tx->pushStack($updateNodeStack);
     $deleteNodeStack = Stack::create('delete_nodes');
     $possiblyDeleted = [];
     foreach ($this->nodesScheduledForDelete as $entity) {
         $statement = $this->getPersister(get_class($entity))->getDeleteQuery($entity);
         $deleteNodeStack->push($statement->text(), $statement->parameters());
         $possiblyDeleted[] = spl_object_hash($entity);
     }
     $tx->pushStack($deleteNodeStack);
     $tx->commit();
     foreach ($this->relationshipsScheduledForCreated as $rel) {
         $aoid = spl_object_hash($rel[0]);
         $boid = spl_object_hash($rel[2]);
         $field = $rel[3];
         $this->managedRelationshipReferences[$aoid][$field][] = ['entity' => $aoid, 'target' => $boid, 'rel' => $rel[1]];
     }
     foreach ($possiblyDeleted as $oid) {
         $this->entityStates[$oid] = self::STATE_DELETED;
     }
     //postFlush
     if ($this->eventManager->hasListeners(Events::POST_FLUSH)) {
         $this->eventManager->dispatchEvent(Events::POST_FLUSH, new Event\PostFlushEventArgs($this->entityManager));
     }
     $this->nodesScheduledForCreate = $this->nodesScheduledForUpdate = $this->nodesScheduledForDelete = $this->relationshipsScheduledForCreated = $this->relationshipsScheduledForDelete = $this->relEntitesScheduledForUpdate = $this->relEntitiesScheduledForCreate = $this->relEntitesScheduledForDelete = [];
 }
 public function setUp()
 {
     $this->createEntityManager();
     $this->client = $this->em->getDatabaseDriver();
 }