Beispiel #1
0
 /**
  * @group DBAL-1016
  */
 public function testPrefersNameFromTableObject()
 {
     $platformMock = new MockPlatform();
     $tableMock = $this->getMockBuilder('Doctrine\\DBAL\\Schema\\Table')->disableOriginalConstructor()->getMock();
     $tableDiff = new TableDiff('foo');
     $tableDiff->fromTable = $tableMock;
     $tableMock->expects($this->once())->method('getQuotedName')->with($platformMock)->will($this->returnValue('foo'));
     $this->assertEquals(new Identifier('foo'), $tableDiff->getName($platformMock));
 }
 /**
  * {@inheritDoc}
  */
 protected function getPreAlterTableIndexForeignKeySQL(TableDiff $diff)
 {
     $sql = array();
     $table = $diff->getName()->getQuotedName($this);
     foreach ($diff->removedIndexes as $remKey => $remIndex) {
         // Dropping primary keys requires to unset autoincrement attribute on the particular column first.
         if ($remIndex->isPrimary() && $diff->fromTable instanceof Table) {
             foreach ($remIndex->getColumns() as $columnName) {
                 $column = $diff->fromTable->getColumn($columnName);
                 if ($column->getAutoincrement() === true) {
                     $column->setAutoincrement(false);
                     $sql[] = 'ALTER TABLE ' . $table . ' MODIFY ' . $this->getColumnDeclarationSQL($column->getQuotedName($this), $column->toArray());
                 }
             }
         }
         foreach ($diff->addedIndexes as $addKey => $addIndex) {
             if ($remIndex->getColumns() == $addIndex->getColumns()) {
                 $indexClause = 'INDEX ' . $addIndex->getName();
                 if ($addIndex->isPrimary()) {
                     $indexClause = 'PRIMARY KEY';
                 } elseif ($addIndex->isUnique()) {
                     $indexClause = 'UNIQUE INDEX ' . $addIndex->getName();
                 }
                 $query = 'ALTER TABLE ' . $table . ' DROP INDEX ' . $remIndex->getName() . ', ';
                 $query .= 'ADD ' . $indexClause;
                 $query .= ' (' . $this->getIndexFieldDeclarationListSQL($addIndex->getQuotedColumns($this)) . ')';
                 $sql[] = $query;
                 unset($diff->removedIndexes[$remKey]);
                 unset($diff->addedIndexes[$addKey]);
                 break;
             }
         }
     }
     $engine = 'INNODB';
     if ($diff->fromTable instanceof Table && $diff->fromTable->hasOption('engine')) {
         $engine = strtoupper(trim($diff->fromTable->getOption('engine')));
     }
     // Suppress foreign key constraint propagation on non-supporting engines.
     if ('INNODB' !== $engine) {
         $diff->addedForeignKeys = array();
         $diff->changedForeignKeys = array();
         $diff->removedForeignKeys = array();
     }
     $sql = array_merge($sql, parent::getPreAlterTableIndexForeignKeySQL($diff));
     return $sql;
 }
Beispiel #3
0
 /**
  * {@inheritDoc}
  */
 protected function getPreAlterTableIndexForeignKeySQL(TableDiff $diff)
 {
     $sql = array();
     $table = $diff->getName($this)->getQuotedName($this);
     foreach ($diff->removedIndexes as $remKey => $remIndex) {
         foreach ($diff->addedIndexes as $addKey => $addIndex) {
             if ($remIndex->getColumns() == $addIndex->getColumns()) {
                 if ($remIndex->isPrimary()) {
                     $sql[] = 'ALTER TABLE ' . $table . ' DROP PRIMARY KEY';
                 } elseif ($remIndex->isUnique()) {
                     $sql[] = 'ALTER TABLE ' . $table . ' DROP UNIQUE ' . $remIndex->getQuotedName($this);
                 } else {
                     $sql[] = $this->getDropIndexSQL($remIndex, $table);
                 }
                 $sql[] = $this->getCreateIndexSQL($addIndex, $table);
                 unset($diff->removedIndexes[$remKey]);
                 unset($diff->addedIndexes[$addKey]);
                 break;
             }
         }
     }
     $sql = array_merge($sql, parent::getPreAlterTableIndexForeignKeySQL($diff));
     return $sql;
 }
 /**
  * {@inheritDoc}
  */
 protected function getPostAlterTableIndexForeignKeySQL(TableDiff $diff)
 {
     if (!$diff->fromTable instanceof Table) {
         throw new DBALException('Sqlite platform requires for alter table the table diff with reference to original table schema');
     }
     $sql = array();
     $tableName = $diff->newName ? $diff->getNewName() : $diff->getName($this);
     foreach ($this->getIndexesInAlteredTable($diff) as $index) {
         if ($index->isPrimary()) {
             continue;
         }
         $sql[] = $this->getCreateIndexSQL($index, $tableName->getQuotedName($this));
     }
     return $sql;
 }
Beispiel #5
0
 /**
  * @param \Doctrine\DBAL\Schema\TableDiff $diff
  *
  * @return array
  */
 protected function getPostAlterTableIndexForeignKeySQL(TableDiff $diff)
 {
     $tableName = false !== $diff->newName ? $diff->getNewName()->getQuotedName($this) : $diff->getName()->getQuotedName($this);
     $sql = array();
     if ($this->supportsForeignKeyConstraints()) {
         foreach ($diff->addedForeignKeys as $foreignKey) {
             $sql[] = $this->getCreateForeignKeySQL($foreignKey, $tableName);
         }
         foreach ($diff->changedForeignKeys as $foreignKey) {
             $sql[] = $this->getCreateForeignKeySQL($foreignKey, $tableName);
         }
     }
     foreach ($diff->addedIndexes as $index) {
         $sql[] = $this->getCreateIndexSQL($index, $tableName);
     }
     foreach ($diff->changedIndexes as $index) {
         $sql[] = $this->getCreateIndexSQL($index, $tableName);
     }
     foreach ($diff->renamedIndexes as $oldIndexName => $index) {
         $oldIndexName = new Identifier($oldIndexName);
         $sql = array_merge($sql, $this->getRenameIndexSQL($oldIndexName->getQuotedName($this), $index, $tableName));
     }
     return $sql;
 }
 /**
  * @param TableDiff $diff The table diff to gather the SQL for.
  *
  * @return array
  */
 protected function getPostAlterTableRenameIndexForeignKeySQL(TableDiff $diff)
 {
     $sql = array();
     $tableName = false !== $diff->newName ? $diff->getNewName()->getQuotedName($this) : $diff->getName($this)->getQuotedName($this);
     foreach ($this->getRemainingForeignKeyConstraintsRequiringRenamedIndexes($diff) as $foreignKey) {
         if (!in_array($foreignKey, $diff->changedForeignKeys, true)) {
             $sql[] = $this->getCreateForeignKeySQL($foreignKey, $tableName);
         }
     }
     return $sql;
 }
 /**
  * {@inheritDoc}
  */
 protected function getPostAlterTableIndexForeignKeySQL(TableDiff $diff)
 {
     $tableName = false !== $diff->newName ? $diff->getNewName()->getQuotedName($this) : $diff->getName($this)->getQuotedName($this);
     $sql = array();
     foreach ($diff->addedIndexes as $index) {
         $sql[] = $this->getCreateIndexSQL($index, $tableName);
     }
     $diff->addedIndexes = array();
     foreach ($diff->changedIndexes as $index) {
         $sql[] = $this->getCreateIndexSQL($index, $tableName);
     }
     $diff->changedIndexes = array();
     $sql = array_merge($sql, parent::getPostAlterTableIndexForeignKeySQL($diff));
     return $sql;
 }