diff --git a/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/UpdateCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/UpdateCommand.php index a163b6f84..ea43f770b 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/UpdateCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/UpdateCommand.php @@ -43,25 +43,32 @@ use Symfony\Component\Console\Input\InputArgument, */ class UpdateCommand extends AbstractCommand { + protected $name = 'orm:schema-tool:update'; + /** * @see Console\Command\Command */ protected function configure() { $this - ->setName('orm:schema-tool:update') + ->setName($this->name) ->setDescription( 'Executes (or dumps) the SQL needed to update the database schema to match the current mapping metadata.' ) ->setDefinition(array( - new InputArgument( - 'action', InputArgument::OPTIONAL, - 'Either "execute" (execute the SQL) or "dump-sql" (dump the SQL to the screen). If not specified, nothing is done.' - ), new InputOption( 'complete', null, InputOption::VALUE_NONE, 'If defined, all assets of the database which are not relevant to the current metadata will be dropped.' ), + + new InputOption( + 'dump-sql', null, InputOption::VALUE_NONE, + 'Dumps the generated SQL statements to the screen (does not execute them).' + ), + new InputOption( + 'force', null, InputOption::VALUE_NONE, + 'Causes the generated SQL statements to be physically executed against your database.' + ), )); $fullName = $this->getFullName(); @@ -73,11 +80,11 @@ default entity manager. For example, if you add metadata for a new column to an entity, this command would generate and output the SQL needed to add the new column to the database: -$fullName dump-sql +$fullName --dump-sql Alternatively, you can execute the generated queries: -$fullName execute +$fullName --force Finally, be aware that if the --complete option is passed, this task will drop all database assets (e.g. tables, etc) that are *not* described @@ -100,26 +107,29 @@ EOT return; } - $action = $input->getArgument('action'); - if ('execute' == $action) { + $dumpSql = (true === $input->getOption('dump-sql')); + $force = (true === $input->getOption('force')); + if ($dumpSql && $force) { + throw new \InvalidArgumentException('You can pass either the --dump-sql or the --force option (but not both simultaneously).'); + } + + if ($dumpSql) { + $output->writeln(implode(';' . PHP_EOL, $sqls)); + } else if ($force) { $output->writeln('Updating database schema...'); $schemaTool->updateSchema($metadatas, $saveMode); $output->writeln(sprintf('Database schema updated successfully! "%s" queries were executed', count($sqls))); - } else if ('dump-sql' == $action) { - $output->writeln(implode(';' . PHP_EOL, $sqls)); - } else if (null === $action) { + } else { $output->writeln('ATTENTION: This operation should not be executed in a production environment.'); $output->writeln(' Use the incremental update to detect changes during development and use'); $output->writeln(' the SQL DDL provided to manually update your database in production.'); $output->writeln(''); $output->writeln(sprintf('The Schema-Tool would execute "%s" queries to update the database.', count($sqls))); - $output->writeln('Please run the operation by passing an argument to this command:'); + $output->writeln('Please run the operation by passing one of the following options:'); - $output->writeln(sprintf(' %s execute to execute the command', $this->getFullName())); - $output->writeln(sprintf(' %s dump-sql to dump the SQL statements to the screen', $this->getFullName())); - } else { - throw new \InvalidArgumentException(sprintf('The first argument - if specified - should be either "execute" or "dump-sql" ("%s" given).', $action)); + $output->writeln(sprintf(' %s --force to execute the command', $this->getFullName())); + $output->writeln(sprintf(' %s --dump-sql to dump the SQL statements to the screen', $this->getFullName())); } } }