Example #1
0
 /**
  * @return string
  */
 public function generateAlterScript()
 {
     $tableChanges = [];
     if ($this->deletedPrimaryKey || !empty($this->fromTable->getPrimaryKeys()) && !empty($this->changedPrimaryKeys)) {
         $tableChanges[] = 'DROP PRIMARY KEY';
     }
     foreach ($this->deletedForeignKeys as $deletedForeignKey) {
         $tableChanges[] = sprintf('DROP FOREIGN KEY `%s`', $deletedForeignKey->getName());
     }
     foreach ($this->changedForeignKeys as $changedForeignKey) {
         $tableChanges[] = sprintf('DROP FOREIGN KEY `%s`', $changedForeignKey->getName());
     }
     foreach ($this->deletedIndexes as $deletedIndex) {
         $tableChanges[] = sprintf('DROP INDEX `%s`', $deletedIndex->getName());
     }
     foreach ($this->changedIndexes as $changedIndex) {
         $tableChanges[] = sprintf('DROP INDEX `%s`', $changedIndex->getName());
     }
     foreach ($this->deletedColumns as $deletedColumn) {
         $tableChanges[] = sprintf('DROP COLUMN `%s`', $deletedColumn->getName());
     }
     $columnStatements = [];
     foreach ($this->changedColumns as $changedColumn) {
         $columnStatements[$changedColumn->getOrder()] = sprintf('CHANGE COLUMN `%s` %s %s', $changedColumn->getName(), $changedColumn->generateCreationScript(), $this->getAfterClause($changedColumn));
     }
     foreach ($this->newColumns as $newColumn) {
         $columnStatements[$newColumn->getOrder()] = sprintf('ADD COLUMN %s %s', $newColumn->generateCreationScript(), $this->getAfterClause($newColumn));
     }
     ksort($columnStatements);
     foreach ($columnStatements as $columnStatement) {
         $tableChanges[] = $columnStatement;
     }
     if (!empty($this->changedPrimaryKeys)) {
         $primaryKeyColumnNames = [];
         foreach ($this->changedPrimaryKeys as $primaryKeyColumn) {
             $primaryKeyColumnNames[] = sprintf('`%s`', $primaryKeyColumn->getName());
         }
         $tableChanges[] = sprintf('ADD PRIMARY KEY (%s)', implode(',', $primaryKeyColumnNames));
     }
     foreach ($this->changedIndexes as $changedIndex) {
         $tableChanges[] = sprintf('ADD %s', $changedIndex->generateCreationScript());
     }
     foreach ($this->newIndexes as $newIndex) {
         $tableChanges[] = sprintf('ADD %s', $newIndex->generateCreationScript());
     }
     foreach ($this->changedForeignKeys as $changedForeignKey) {
         $tableChanges[] = sprintf('ADD %s', $changedForeignKey->generateCreationScript());
     }
     foreach ($this->newForeignKeys as $newForeignKey) {
         $tableChanges[] = sprintf('ADD %s', $newForeignKey->generateCreationScript());
     }
     $alterScript = sprintf('ALTER TABLE `%s`%s  %s;', $this->getName(), PHP_EOL, implode(',' . PHP_EOL . '  ', $tableChanges));
     return $alterScript;
 }