Exemple #1
0
 protected function getDumpOrder(array $classes)
 {
     $calc = new CommitOrderCalculator();
     foreach ($classes as $class) {
         if (!$class->getReflectionClass()->isInstantiable() || $class->isMappedSuperclass) {
             continue;
         }
         if ($class->getTableName() === 'Group') {
             continue;
         }
         $calc->addClass($class);
         // $class before its parents
         foreach ($class->parentClasses as $parentClass) {
             $parentClass = $this->objectManager->getClassMetadata($parentClass);
             if (!$calc->hasClass($parentClass->name)) {
                 $calc->addClass($parentClass);
             }
             $calc->addDependency($class, $parentClass);
         }
         foreach ($class->associationMappings as $assoc) {
             if ($assoc['isOwningSide']) {
                 $targetClass = $this->objectManager->getClassMetadata($assoc['targetEntity']);
                 if (!$calc->hasClass($targetClass->name)) {
                     $calc->addClass($targetClass);
                 }
                 // add dependency ($targetClass before $class)
                 $calc->addDependency($targetClass, $class);
                 // parents of $targetClass before $class, too
                 foreach ($targetClass->parentClasses as $parentClass) {
                     $parentClass = $this->objectManager->getClassMetadata($parentClass);
                     if (!$calc->hasClass($parentClass->name)) {
                         $calc->addClass($parentClass);
                     }
                     $calc->addDependency($parentClass, $class);
                 }
             }
         }
     }
     return $calc->getCommitOrder();
 }
 protected function getCommitOrder(EntityManager $em, array $classes)
 {
     $calc = new CommitOrderCalculator();
     foreach ($classes as $class) {
         $calc->addClass($class);
         foreach ($class->associationMappings as $assoc) {
             if ($assoc->isOwningSide) {
                 $targetClass = $em->getClassMetadata($assoc->targetEntityName);
                 if (!$calc->hasClass($targetClass->name)) {
                     $calc->addClass($targetClass);
                 }
                 // add dependency ($targetClass before $class)
                 $calc->addDependency($targetClass, $class);
             }
         }
     }
     return $calc->getCommitOrder();
 }
Exemple #3
0
 /**
  * Returns the reverse commit order for the given classes
  *
  * @param  array $classes An array of ClassMetadata instances
  *
  * @return array
  */
 private function getReverseCommitOrder(array $classes)
 {
     $calculator = new CommitOrderCalculator();
     foreach ($classes as $class) {
         $calculator->addClass($class);
     }
     return array_reverse($calculator->getCommitOrder());
 }
Exemple #4
0
 private function _getCommitOrder(array $classes)
 {
     $calc = new CommitOrderCalculator();
     // Calculate dependencies
     foreach ($classes as $class) {
         $calc->addClass($class);
         foreach ($class->associationMappings as $assoc) {
             if ($assoc->isOwningSide) {
                 $targetClass = $this->_em->getClassMetadata($assoc->targetEntityName);
                 if (!$calc->hasClass($targetClass->name)) {
                     $calc->addClass($targetClass);
                 }
                 // add dependency ($targetClass before $class)
                 $calc->addDependency($targetClass, $class);
             }
         }
     }
     return $calc->getCommitOrder();
 }
Exemple #5
0
 /**
  * Gets the commit order.
  *
  * @return array
  */
 private function _getCommitOrder(array $entityChangeSet = null)
 {
     if ($entityChangeSet === null) {
         $entityChangeSet = array_merge($this->_entityInsertions, $this->_entityUpdates, $this->_entityDeletions);
     }
     // TODO: We can cache computed commit orders in the metadata cache!
     // Check cache at this point here!
     // See if there are any new classes in the changeset, that are not in the
     // commit order graph yet (dont have a node).
     $newNodes = array();
     foreach ($entityChangeSet as $entity) {
         $className = get_class($entity);
         if (!$this->_commitOrderCalculator->hasNodeWithKey($className)) {
             $this->_commitOrderCalculator->addNodeWithItem($className, $this->_em->getClassMetadata($className));
             $newNodes[] = $this->_commitOrderCalculator->getNodeForKey($className);
         }
     }
     // Calculate dependencies for new nodes
     foreach ($newNodes as $node) {
         $class = $node->getClass();
         foreach ($class->associationMappings as $assocMapping) {
             //TODO: should skip target classes that are not in the changeset.
             if ($assocMapping->isOwningSide) {
                 $targetClass = $this->_em->getClassMetadata($assocMapping->targetEntityName);
                 $targetClassName = $targetClass->name;
                 // If the target class does not yet have a node, create it
                 if (!$this->_commitOrderCalculator->hasNodeWithKey($targetClassName)) {
                     $this->_commitOrderCalculator->addNodeWithItem($targetClassName, $targetClass);
                 }
                 // add dependency
                 $otherNode = $this->_commitOrderCalculator->getNodeForKey($targetClassName);
                 $otherNode->before($node);
             }
         }
     }
     return $this->_commitOrderCalculator->getCommitOrder();
 }
Exemple #6
0
 private function getCommitOrder(EntityManagerInterface $em, array $classes)
 {
     $calc = new CommitOrderCalculator();
     foreach ($classes as $class) {
         $calc->addClass($class);
         // $class before its parents
         foreach ($class->parentClasses as $parentClass) {
             $parentClass = $em->getClassMetadata($parentClass);
             if (!$calc->hasClass($parentClass->name)) {
                 $calc->addClass($parentClass);
             }
             $calc->addDependency($class, $parentClass);
         }
         foreach ($class->associationMappings as $assoc) {
             if ($assoc['isOwningSide']) {
                 $targetClass = $em->getClassMetadata($assoc['targetEntity']);
                 if (!$calc->hasClass($targetClass->name)) {
                     $calc->addClass($targetClass);
                 }
                 // add dependency ($targetClass before $class)
                 $calc->addDependency($targetClass, $class);
                 // parents of $targetClass before $class, too
                 foreach ($targetClass->parentClasses as $parentClass) {
                     $parentClass = $em->getClassMetadata($parentClass);
                     if (!$calc->hasClass($parentClass->name)) {
                         $calc->addClass($parentClass);
                     }
                     $calc->addDependency($parentClass, $class);
                 }
             }
         }
     }
     return $calc->getCommitOrder();
 }