Doctrine\DBAL\Platforms\MySqlPlatform::getPreAlterTableIndexForeignKeySQL PHP Method

getPreAlterTableIndexForeignKeySQL() protected method

{@inheritDoc}
protected getPreAlterTableIndexForeignKeySQL ( Doctrine\DBAL\Schema\TableDiff $diff )
$diff Doctrine\DBAL\Schema\TableDiff
    protected function getPreAlterTableIndexForeignKeySQL(TableDiff $diff)
    {
        $sql = array();
        $table = $diff->getName($this)->getQuotedName($this);
        foreach ($diff->changedIndexes as $changedIndex) {
            $sql = array_merge($sql, $this->getPreAlterTableAlterPrimaryKeySQL($diff, $changedIndex));
        }
        foreach ($diff->removedIndexes as $remKey => $remIndex) {
            $sql = array_merge($sql, $this->getPreAlterTableAlterPrimaryKeySQL($diff, $remIndex));
            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, $this->getPreAlterTableAlterIndexForeignKeySQL($diff), parent::getPreAlterTableIndexForeignKeySQL($diff), $this->getPreAlterTableRenameIndexForeignKeySQL($diff));
        return $sql;
    }

Usage Example

Example #1
0
 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()) {
                 $type = '';
                 if ($addIndex->isUnique()) {
                     $type = 'UNIQUE ';
                 }
                 $query = 'ALTER TABLE ' . $this->espoQuote($table) . ' DROP INDEX ' . $remIndex->getName() . ', ';
                 $query .= 'ADD ' . $type . 'INDEX ' . $addIndex->getName();
                 $query .= ' (' . $this->getIndexFieldDeclarationListSQL($addIndex->getQuotedColumns($this)) . ')';
                 $sql[] = $query;
                 unset($diff->removedIndexes[$remKey]);
                 unset($diff->addedIndexes[$addKey]);
                 break;
             }
         }
     }
     $sql = array_merge($sql, parent::getPreAlterTableIndexForeignKeySQL($diff));
     return $sql;
 }
MySqlPlatform