Mercurial > hg > isophonics-drupal-site
diff core/lib/Drupal/Core/Command/DbCommandBase.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/lib/Drupal/Core/Command/DbCommandBase.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,60 @@ +<?php + +namespace Drupal\Core\Command; + +use Drupal\Core\Database\Database; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; + +/** + * Base command that abstracts handling of database connection arguments. + */ +class DbCommandBase extends Command { + + /** + * {@inheritdoc} + */ + protected function configure() { + $this->addOption('database', NULL, InputOption::VALUE_OPTIONAL, 'The database connection name to use.', 'default') + ->addOption('database-url', 'db-url', InputOption::VALUE_OPTIONAL, 'A database url to parse and use as the database connection.') + ->addOption('prefix', NULL, InputOption::VALUE_OPTIONAL, 'Override or set the table prefix used in the database connection.'); + } + + /** + * Parse input options decide on a database. + * + * @param \Symfony\Component\Console\Input\InputInterface $input + * Input object. + * @return \Drupal\Core\Database\Connection + */ + protected function getDatabaseConnection(InputInterface $input) { + // Load connection from a url. + if ($input->getOption('database-url')) { + // @todo this could probably be refactored to not use a global connection. + // Ensure database connection isn't set. + if (Database::getConnectionInfo('db-tools')) { + throw new \RuntimeException('Database "db-tools" is already defined. Cannot define database provided.'); + } + $info = Database::convertDbUrlToConnectionInfo($input->getOption('database-url'), \Drupal::root()); + Database::addConnectionInfo('db-tools', 'default', $info); + $key = 'db-tools'; + } + else { + $key = $input->getOption('database'); + } + + // If they supplied a prefix, replace it in the connection information. + $prefix = $input->getOption('prefix'); + if ($prefix) { + $info = Database::getConnectionInfo($key)['default']; + $info['prefix']['default'] = $prefix; + + Database::removeConnection($key); + Database::addConnectionInfo($key, 'default', $info); + } + + return Database::getConnection('default', $key); + } + +}