| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325 |
- <?php
- /**
- * Phinx
- *
- * (The MIT license)
- * Copyright (c) 2015 Rob Morgan
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated * documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- *
- * @package Phinx
- * @subpackage Phinx\Db\Adapter
- */
- namespace BBDDL\Db\Adapter;
- use BBDDL\Db\Table;
- use BBDDL\Db\Table\Column;
- use BBDDL\Db\Table\Index;
- use BBDDL\Db\Table\ForeignKey;
- //use BBDDL\Migration\IrreversibleMigrationException;
- /**
- * Phinx Proxy Adapter.
- *
- * Used for recording migration commands to automatically reverse them.
- *
- * @author Rob Morgan <robbym@gmail.com>
- */
- class ProxyAdapter extends AdapterWrapper
- {
- /**
- * @var array
- */
- protected $commands;
- /**
- * {@inheritdoc}
- */
- public function getAdapterType()
- {
- return 'ProxyAdapter';
- }
- /**
- * {@inheritdoc}
- */
- public function createTable(Table $table)
- {
- $this->recordCommand('createTable', array($table->getName()));
- }
- /**
- * {@inheritdoc}
- */
- public function renameTable($tableName, $newTableName)
- {
- $this->recordCommand('renameTable', array($tableName, $newTableName));
- }
- /**
- * {@inheritdoc}
- */
- public function dropTable($tableName)
- {
- $this->recordCommand('dropTable', array($tableName));
- }
- /**
- * {@inheritdoc}
- */
- public function addColumn(Table $table, Column $column)
- {
- $this->recordCommand('addColumn', array($table, $column));
- }
- /**
- * {@inheritdoc}
- */
- public function renameColumn($tableName, $columnName, $newColumnName)
- {
- $this->recordCommand('renameColumn', array($tableName, $columnName, $newColumnName));
- }
- /**
- * {@inheritdoc}
- */
- public function changeColumn($tableName, $columnName, Column $newColumn)
- {
- $this->recordCommand('changeColumn', array($tableName, $columnName, $newColumn));
- }
- /**
- * {@inheritdoc}
- */
- public function dropColumn($tableName, $columnName)
- {
- $this->recordCommand('dropColumn', array($tableName, $columnName));
- }
- /**
- * {@inheritdoc}
- */
- public function addIndex(Table $table, Index $index)
- {
- $this->recordCommand('addIndex', array($table, $index));
- }
- /**
- * {@inheritdoc}
- */
- public function dropIndex($tableName, $columns, $options = array())
- {
- $this->recordCommand('dropIndex', array($tableName, $columns, $options));
- }
- /**
- * {@inheritdoc}
- */
- public function dropIndexByName($tableName, $indexName)
- {
- $this->recordCommand('dropIndexByName', array($tableName, $indexName));
- }
- /**
- * {@inheritdoc}
- */
- public function addForeignKey(Table $table, ForeignKey $foreignKey)
- {
- $this->recordCommand('addForeignKey', array($table, $foreignKey));
- }
- /**
- * {@inheritdoc}
- */
- public function dropForeignKey($tableName, $columns, $constraint = null)
- {
- $this->recordCommand('dropForeignKey', array($columns, $constraint));
- }
- /**
- * {@inheritdoc}
- */
- public function createDatabase($name, $options = array())
- {
- $this->recordCommand('createDatabase', array($name, $options));
- }
- /**
- * Record a command for execution later.
- *
- * @param string $name Command Name
- * @param array $arguments Command Arguments
- * @return void
- */
- public function recordCommand($name, $arguments)
- {
- $this->commands[] = array(
- 'name' => $name,
- 'arguments' => $arguments
- );
- }
- /**
- * Sets an array of recorded commands.
- *
- * @param array $commands Commands
- * @return ProxyAdapter
- */
- public function setCommands($commands)
- {
- $this->commands = $commands;
- return $this;
- }
- /**
- * Gets an array of the recorded commands.
- *
- * @return array
- */
- public function getCommands()
- {
- return $this->commands;
- }
- /**
- * Gets an array of the recorded commands in reverse.
- *
- * @throws IrreversibleMigrationException if a command cannot be reversed.
- * @return array
- */
- /*public function getInvertedCommands()
- {
- if (null === $this->getCommands()) {
- return array();
- }
- $invCommands = array();
- $supportedCommands = array(
- 'createTable', 'renameTable', 'addColumn',
- 'renameColumn', 'addIndex', 'addForeignKey'
- );
- foreach (array_reverse($this->getCommands()) as $command) {
- if (!in_array($command['name'], $supportedCommands)) {
- throw new IrreversibleMigrationException(sprintf(
- 'Cannot reverse a "%s" command',
- $command['name']
- ));
- }
- $invertMethod = 'invert' . ucfirst($command['name']);
- $invertedCommand = $this->$invertMethod($command['arguments']);
- $invCommands[] = array(
- 'name' => $invertedCommand['name'],
- 'arguments' => $invertedCommand['arguments']
- );
- }
- return $invCommands;
- }*/
- /**
- * Execute the recorded commands.
- *
- * @return void
- */
- public function executeCommands()
- {
- $commands = $this->getCommands();
- foreach ($commands as $command) {
- call_user_func_array(array($this->getAdapter(), $command['name']), $command['arguments']);
- }
- }
- /**
- * Execute the recorded commands in reverse.
- *
- * @return void
- */
- /*public function executeInvertedCommands()
- {
- $commands = $this->getInvertedCommands();
- foreach ($commands as $command) {
- call_user_func_array(array($this->getAdapter(), $command['name']), $command['arguments']);
- }
- }*/
- /**
- * Returns the reverse of a createTable command.
- *
- * @param array $args Method Arguments
- * @return array
- */
- public function invertCreateTable($args)
- {
- return array('name' => 'dropTable', 'arguments' => array($args[0]));
- }
- /**
- * Returns the reverse of a renameTable command.
- *
- * @param array $args Method Arguments
- * @return array
- */
- public function invertRenameTable($args)
- {
- return array('name' => 'renameTable', 'arguments' => array($args[1], $args[0]));
- }
- /**
- * Returns the reverse of a addColumn command.
- *
- * @param array $args Method Arguments
- * @return array
- */
- public function invertAddColumn($args)
- {
- return array('name' => 'dropColumn', 'arguments' => array($args[0]->getName(), $args[1]->getName()));
- }
- /**
- * Returns the reverse of a renameColumn command.
- *
- * @param array $args Method Arguments
- * @return array
- */
- public function invertRenameColumn($args)
- {
- return array('name' => 'renameColumn', 'arguments' => array($args[0], $args[2], $args[1]));
- }
- /**
- * Returns the reverse of a addIndex command.
- *
- * @param array $args Method Arguments
- * @return array
- */
- public function invertAddIndex($args)
- {
- return array('name' => 'dropIndex', 'arguments' => array($args[0]->getName(), $args[1]->getColumns()));
- }
- /**
- * Returns the reverse of a addForeignKey command.
- *
- * @param array $args Method Arguments
- * @return array
- */
- public function invertAddForeignKey($args)
- {
- return array('name' => 'dropForeignKey', 'arguments' => array($args[0]->getName(), $args[1]->getColumns()));
- }
- }
|