{
foreach ($to as $className => $info) {
if ( ! isset($from[$className])) {
$names = array('type', 'charset', 'collate', 'indexes', 'foreignKeys', 'primary');
$options = array();
foreach ($names as $name) {
if (isset($info['options'][$name]) && $info['options'][$name]) {
$options[$name] = $info['options'][$name];
}
}
$table = array('tableName' => $info['tableName'],
'columns' => $info['columns'],
'options' => $options);
$this->_changes['created_tables'][$info['tableName']] = $table;
}
foreach ($info['columns'] as $name => $column) {
if (isset($from[$className]) && ! isset($from[$className]['columns'][$name])) {
$this->_changes['created_columns'][$info['tableName']][$name] = $column;
}
if (isset($from[$className]['columns'][$name]) && $from[$className]['columns'][$name] != $column) {
$this->_changes['changed_columns'][$info['tableName']][$name] = $column;
}
}
foreach ($info['options']['foreignKeys'] as $name => $foreignKey) {
$foreignKey['name'] = $name;
if ( ! isset($from[$className]['options']['foreignKeys'][$name])) {
$this->_changes['created_foreign_keys'][$info['tableName']][$name] = $foreignKey;
$this->_changes['created_indexes'][$info['tableName']][$indexName] = array('fields' => array($foreignKey['local']));
} else if (isset($from[$className]['options']['foreignKeys'][$name])) {
$oldForeignKey = $from[$className]['options']['foreignKeys'][$name];
$oldForeignKey['name'] = $name;
if ($foreignKey !== $oldForeignKey) {
$this->_changes['dropped_foreign_keys'][$info['tableName']][$name] = $oldForeignKey;
$this->_changes['created_foreign_keys'][$info['tableName']][$name] = $foreignKey;
}
}
}
foreach ($info['options']['indexes'] as $name => $index) {
if ( ! isset($from[$className]['options']['indexes'][$name])) {
$this->_changes['created_indexes'][$info['tableName']][$name] = $index;
}
}
}
foreach ($from as $className => $info) {
if ( ! isset($to[$className])) {
$table = array('tableName' => $info['tableName'],
'columns' => $info['columns'],
'options' => array('type' => $info['options']['type'],
'charset' => $info['options']['charset'],
'collate' => $info['options']['collate'],
'indexes' => $info['options']['indexes'],
'foreignKeys' => $info['options']['foreignKeys'],
'primary' => $info['options']['primary']));
$this->_changes['dropped_tables'][$info['tableName']] = $table;
}
foreach ($info['columns'] as $name => $column) {
if (isset($to[$className]) && ! isset($to[$className]['columns'][$name])) {
$this->_changes['dropped_columns'][$info['tableName']][$name] = $column;
}
}
foreach ($info['options']['foreignKeys'] as $name => $foreignKey) {
if ( ! isset($to[$className]['options']['foreignKeys'][$name])) {
$this->_changes['dropped_foreign_keys'][$info['tableName']][$name] = $foreignKey;
}
}
foreach ($info['options']['indexes'] as $name => $index) {
if ( ! isset($to[$className]['options']['indexes'][$name])) {
$this->_changes['dropped_indexes'][$info['tableName']][$name] = $index;
}
}
}
return $this->_changes;
}