2010-01-18 10:27:17 +00:00

357 lines
12 KiB
PHP

<?php
/*
* $Id: Migration.php 1080 2007-02-10 18:17:08Z jwage $
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This software consists of voluntary contributions made by many individuals
* and is licensed under the LGPL. For more information, see
* <http://www.phpdoctrine.org>.
*/
/**
* Base migration class. All migration classes must extend from this base class
*
* @package Doctrine
* @subpackage Migration
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
* @link www.phpdoctrine.org
* @since 1.1
* @version $Revision: 1080 $
* @author Jonathan H. Wage <jonwage@gmail.com>
*/
abstract class Doctrine_Migration_Base
{
protected $_changes = array();
protected static $_opposites = array('created_table' => 'dropped_table',
'dropped_table' => 'created_table',
'created_constraint' => 'dropped_constraint',
'dropped_constraint' => 'created_constraint',
'created_foreign_key' => 'dropped_foreign_key',
'dropped_foreign_key' => 'created_foreign_key',
'created_column' => 'dropped_column',
'dropped_column' => 'created_column',
'created_index' => 'dropped_index',
'dropped_index' => 'created_index',
);
/**
* Get the changes that have been added on this migration class instance
*
* @return array $changes
*/
public function getChanges()
{
return $this->_changes;
}
public function getNumChanges()
{
return count($this->_changes);
}
/**
* Add a change to the stack of changes to execute
*
* @param string $type The type of change
* @param array $change The array of information for the change
* @return void
*/
protected function _addChange($type, array $change = array())
{
if (isset($change['upDown']) && $change['upDown'] !== null && isset(self::$_opposites[$type])) {
$upDown = $change['upDown'];
unset($change['upDown']);
if ($upDown == 'down') {
$opposite = self::$_opposites[$type];
return $this->_changes[] = array($opposite, $change);
}
}
return $this->_changes[] = array($type, $change);
}
/**
* Add a create or drop table change.
*
* @param string $upDown Whether to add the up(create) or down(drop) table change.
* @param string $tableName Name of the table
* @param array $fields Array of fields for table
* @param array $options Array of options for the table
* @return void
*/
public function table($upDown, $tableName, array $fields = array(), array $options = array())
{
$options = get_defined_vars();
$this->_addChange('created_table', $options);
}
/**
* Add a create table change.
*
* @param string $tableName Name of the table
* @param array $fields Array of fields for table
* @param array $options Array of options for the table
* @return void
*/
public function createTable($tableName, array $fields = array(), array $options = array())
{
$this->table('up', $tableName, $fields, $options);
}
/**
* Add a drop table change.
*
* @param string $tableName Name of the table
* @return void
*/
public function dropTable($tableName)
{
$this->table('down', $tableName);
}
/**
* Add a rename table change
*
* @param string $oldTableName Name of the table to change
* @param string $newTableName Name to change the table to
* @return void
*/
public function renameTable($oldTableName, $newTableName)
{
$options = get_defined_vars();
$this->_addChange('renamed_table', $options);
}
/**
* Add a create or drop constraint change.
*
* @param string $upDown Whether to add the up(create) or down(drop) create change.
* @param string $tableName Name of the table.
* @param string $constraintName Name of the constraint.
* @param array $definition Array for the constraint definition.
* @return void
*/
public function constraint($upDown, $tableName, $constraintName, array $definition)
{
$options = get_defined_vars();
$this->_addChange('created_constraint', $options);
}
/**
* Add a create constraint change.
*
* @param string $tableName Name of the table.
* @param string $constraintname Name of the constraint.
* @param array $definition Array for the constraint definition.
* @return void
*/
public function createConstraint($tableName, $constraintName, array $definition)
{
$this->constraint('up', $tableName, $constraintName, $definition);
}
/**
* Add a drop constraint change.
*
* @param string $tableName Name of the table.
* @param string $constraintname Name of the constraint.
* @return void
*/
public function dropConstraint($tableName, $constraintName, $primary = false)
{
$this->constraint('down', $tableName, $constraintName, array('primary' => $primary));
}
/**
* Add a create or drop foreign key change.
*
* @param string $upDown Whether to add the up(create) or down(drop) foreign key change.
* @param string $tableName Name of the table.
* @param string $name Name of the foreign key.
* @param array $definition Array for the foreign key definition
* @return void
*/
public function foreignKey($upDown, $tableName, $name, array $definition = array())
{
$definition['name'] = $name;
$options = get_defined_vars();
$this->_addChange('created_foreign_key', $options);
}
/**
* Add a create foreign key change.
*
* @param string $tableName Name of the table.
* @param string $name Name of the foreign key.
* @param array $definition Array for the foreign key definition
* @return void
*/
public function createForeignKey($tableName, $name, array $definition)
{
$this->foreignKey('up', $tableName, $name, $definition);
}
/**
* Add a drop foreign key change.
*
* @param string $tableName Name of the table.
* @param string $name Name of the foreign key.
* @return void
*/
public function dropForeignKey($tableName, $name)
{
$this->foreignKey('down', $tableName, $name);
}
/**
* Add a add or remove column change.
*
* @param string $upDown Whether to add the up(add) or down(remove) column change.
* @param string $tableName Name of the table
* @param string $columnName Name of the column
* @param string $type Type of the column
* @param string $length Length of the column
* @param array $options Array of options for the column
* @return void
*/
public function column($upDown, $tableName, $columnName, $type = null, $length = null, array $options = array())
{
$options = get_defined_vars();
$options['options']['length'] = $length;
$options = array_merge($options, $options['options']);
unset($options['options']);
$this->_addChange('created_column', $options);
}
/**
* Add a add column change.
*
* @param string $tableName Name of the table
* @param string $columnName Name of the column
* @param string $type Type of the column
* @param string $length Length of the column
* @param array $options Array of options for the column
* @return void
*/
public function addColumn($tableName, $columnName, $type, $length = null, array $options = array())
{
$this->column('up', $tableName, $columnName, $type, $length, $options);
}
/**
* Add a remove column change.
*
* @param string $tableName Name of the table
* @param string $columnName Name of the column
* @return void
*/
public function removeColumn($tableName, $columnName)
{
$this->column('down', $tableName, $columnName);
}
/**
* Add a rename column change
*
* @param string $tableName Name of the table to rename the column on
* @param string $oldColumnName The old column name
* @param string $newColumnName The new column name
* @return void
*/
public function renameColumn($tableName, $oldColumnName, $newColumnName)
{
$options = get_defined_vars();
$this->_addChange('renamed_column', $options);
}
/**
* Add a change column change
*
* @param string $tableName Name of the table to change the column on
* @param string $columnName Name of the column to change
* @param string $type New type of column
* @param array $options New options for the column
* @return void
*/
public function changeColumn($tableName, $columnName, $length = null, $type = null, array $options = array())
{
$options = get_defined_vars();
$options['options']['length'] = $length;
$this->_addChange('changed_column', $options);
}
/**
* Add a add or remove index change.
*
* @param string $upDown Whether to add the up(add) or down(remove) index change.
* @param string $tableName Name of the table
* @param string $indexName Name of the index
* @param array $definition Array for the index definition
* @return void
*/
public function index($upDown, $tableName, $indexName, array $definition = array())
{
$options = get_defined_vars();
$this->_addChange('created_index', $options);
}
/**
* Add a add index change.
*
* @param string $tableName Name of the table
* @param string $indexName Name of the index
* @param array $definition Array for the index definition
* @return void
*/
public function addIndex($tableName, $indexName, array $definition)
{
$this->index('up', $tableName, $indexName, $definition);
}
/**
* Add a remove index change.
*
* @param string $tableName Name of the table
* @param string $indexName Name of the index
* @return void
*/
public function removeIndex($tableName, $indexName)
{
$this->index('down', $tableName, $indexName);
}
public function preUp()
{
}
public function postUp()
{
}
public function preDown()
{
}
public function postDown()
{
}
}