Example #1
0
 protected function appendForeignKeys()
 {
     if ($this->table->disableForeignKeys) {
         return;
     }
     foreach ($this->table->getForeignKeys() as $foreignKey) {
         $this->fkLines->commaExpr($this->database()->getUtility()->generateForeignKeyExpression($foreignKey));
     }
 }
Example #2
0
 /**
  * @return bool
  */
 public function apply()
 {
     if (self::$enableStateCache && isset(self::$applied[$this->table->entityClassName])) {
         if ($this->log) {
             $this->log->push(Expression::create('# Migration for table ? (?) already applied, skipping', $this->table->schemaName, $this->table->entityClassName));
         }
         return true;
     }
     /** @var Migration[] $dependentMigrations */
     $dependentMigrations = array();
     foreach ($this->table->getForeignKeys() as $foreignKey) {
         $referenceMigration = $foreignKey->getReferencedTable()->migration();
         $referenceMigration->dryRun = $this->dryRun;
         $referenceMigration->log = $this->log;
         $dependentMigrations[$referenceMigration->table->schemaName] = $referenceMigration;
     }
     try {
         $statement = $this->checkRun();
         if ($dependentMigrations) {
             $fkStatement = $statement->extractForeignKeysStatement();
             if (!$this->applyRequired($statement)) {
                 return false;
             }
             $this->runStatement($statement);
             self::setApplied($this->table->entityClassName);
             if ($this->log) {
                 $this->log->push('# Dependent tables found: ' . implode(', ', array_keys($dependentMigrations)));
             }
             foreach ($dependentMigrations as $migration) {
                 $migration->apply();
             }
             $this->runStatement($fkStatement);
         } else {
             if (!$this->applyRequired($statement)) {
                 return false;
             }
             $this->runStatement($statement);
         }
         if ($this->log) {
             $this->log->push('# OK', Log::TYPE_SUCCESS);
         }
     } catch (Exception $exception) {
         if ($this->log) {
             $this->log->push($exception->getMessage(), Log::TYPE_ERROR);
         }
         return false;
     }
     return true;
 }
Example #3
0
 protected function processForeignKeys()
 {
     /** @var ForeignKey[] $beforeForeignKeys */
     $beforeForeignKeys = array();
     if (!$this->before->disableForeignKeys) {
         foreach ($this->before->getForeignKeys() as $foreignKey) {
             $beforeForeignKeys[$foreignKey->getName()] = $foreignKey;
         }
     }
     $afterForeignKeys = $this->after->getForeignKeys();
     if ($this->after->disableForeignKeys) {
         $afterForeignKeys = array();
     }
     foreach ($afterForeignKeys as $foreignKey) {
         if (!isset($beforeForeignKeys[$foreignKey->getName()])) {
             $this->addFkExpression->commaExpr('ADD');
             $this->addFkExpression->appendExpr($this->database()->getUtility()->generateForeignKeyExpression($foreignKey));
         } else {
             unset($beforeForeignKeys[$foreignKey->getName()]);
         }
     }
     foreach ($beforeForeignKeys as $foreignKey) {
         $this->alterLines->commaExpr('DROP FOREIGN KEY ?', new Symbol($foreignKey->getName()));
     }
 }