* (c) Doctrine Project, Benjamin Eberlei * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Doctrine\Bundle\DoctrineBundle\Command; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; /** * Database tool allows you to easily drop and create your configured databases. * * @author Fabien Potencier * @author Jonathan H. Wage */ class DropDatabaseDoctrineCommand extends DoctrineCommand { /** * {@inheritDoc} */ protected function configure() { $this ->setName('doctrine:database:drop') ->setDescription('Drops the configured databases') ->addOption('connection', null, InputOption::VALUE_OPTIONAL, 'The connection to use for this command') ->addOption('force', null, InputOption::VALUE_NONE, 'Set this parameter to execute this action') ->setHelp(<<doctrine:database:drop command drops the default connections database: php app/console doctrine:database:drop The --force parameter has to be used to actually drop the database. You can also optionally specify the name of a connection to drop the database for: php app/console doctrine:database:drop --connection=default Be careful: All data in a given database will be lost when executing this command. EOT ); } /** * {@inheritDoc} */ protected function execute(InputInterface $input, OutputInterface $output) { $connection = $this->getDoctrineConnection($input->getOption('connection')); $params = $connection->getParams(); $name = isset($params['path']) ? $params['path'] : (isset($params['dbname']) ? $params['dbname'] : false); if (!$name) { throw new \InvalidArgumentException("Connection does not contain a 'path' or 'dbname' parameter and cannot be dropped."); } if ($input->getOption('force')) { // Only quote if we don't have a path if (!isset($params['path'])) { $name = $connection->getDatabasePlatform()->quoteSingleIdentifier($name); } try { $connection->getSchemaManager()->dropDatabase($name); $output->writeln(sprintf('Dropped database for connection named %s', $name)); } catch (\Exception $e) { $output->writeln(sprintf('Could not drop database for connection named %s', $name)); $output->writeln(sprintf('%s', $e->getMessage())); } } else { $output->writeln('ATTENTION: This operation should not be executed in a production environment.'); $output->writeln(''); $output->writeln(sprintf('Would drop the database named %s.', $name)); $output->writeln('Please run the operation with --force to execute'); $output->writeln('All data will be lost!'); } } }