コード例 #1
0
 /**
  * {@inheritDoc}
  */
 protected function getPreAlterTableIndexForeignKeySQL(TableDiff $diff)
 {
     $sql = array();
     $table = $diff->name;
     foreach ($diff->removedIndexes as $remKey => $remIndex) {
         foreach ($diff->addedIndexes as $addKey => $addIndex) {
             if ($remIndex->getColumns() == $addIndex->getColumns()) {
                 $columns = $addIndex->getColumns();
                 $type = '';
                 if ($addIndex->isUnique()) {
                     $type = 'UNIQUE ';
                 }
                 $query = 'ALTER TABLE ' . $table . ' DROP INDEX ' . $remIndex->getName() . ', ';
                 $query .= 'ADD ' . $type . 'INDEX ' . $addIndex->getName();
                 $query .= ' (' . $this->getIndexFieldDeclarationListSQL($columns) . ')';
                 $sql[] = $query;
                 unset($diff->removedIndexes[$remKey]);
                 unset($diff->addedIndexes[$addKey]);
                 break;
             }
         }
     }
     foreach ($diff->changedIndexes as $changedKey => $changedIndex) {
         if ($changedIndex->isPrimary() && $changedKey != 'PRIMARY') {
             $index = $diff->changedIndexes[$changedKey];
             $index = new index($changedKey, $index->getColumns(), $index->isUnique(), false);
             $diff->removedIndexes[$changedKey] = $index;
             $diff->addedIndexes['PRIMARY'] = $diff->changedIndexes[$changedKey];
             unset($diff->changedIndexes[$changedKey]);
         }
     }
     $sql = array_merge($sql, parent::getPreAlterTableIndexForeignKeySQL($diff));
     return $sql;
 }