X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FConsole%2FDatabaseStructure.php;h=343c90023d8bfad831f6bd3f6cac074c18a3da3e;hb=122ad0af14f046c2462a03fe33967dc41abfc8b5;hp=3feaa64d6005cdea8442ef6756e045bad3e6851e;hpb=c9cce8492e5b2607b2a092474d1de4d188b7a2c9;p=friendica.git diff --git a/src/Console/DatabaseStructure.php b/src/Console/DatabaseStructure.php index 3feaa64d60..343c90023d 100644 --- a/src/Console/DatabaseStructure.php +++ b/src/Console/DatabaseStructure.php @@ -1,44 +1,84 @@ . + * + */ namespace Friendica\Console; -use Friendica\Core; +use Friendica\Core\Config\Cache; use Friendica\Core\Update; -use Friendica\Database\DBA; +use Friendica\Database\Database; use Friendica\Database\DBStructure; use RuntimeException; /** - * @brief Performs database updates from the command line - * - * @author Hypolite Petovan + * Performs database updates from the command line */ class DatabaseStructure extends \Asika\SimpleConsole\Console { protected $helpOptions = ['h', 'help', '?']; + /** + * @var Database + */ + private $dba; + /** + * @var Cache + */ + private $configCache; + protected function getHelp() { $help = << [-h|--help|-?] |-f|--force] [-v] + bin/console dbstructure [options] Commands - dryrun Show database update schema queries without running them - update Update database schema - dumpsql Dump database schema - toinnodb Convert all tables from MyISAM to InnoDB + drop Show tables that aren't in use by Friendica anymore and can be dropped + -e|--execute Execute the dropping + + update Update database schema + -f|--force Force the update command (Even if the database structure matches) + -o|--override Override running or stalling updates -Options + dryrun Show database update schema queries without running them + dumpsql Dump database schema + toinnodb Convert all tables from MyISAM or InnoDB in the Antelope file format to InnoDB in the Barracuda file format + initial Set needed initial values in the tables + version Set the database to a given number + +General Options -h|--help|-? Show help information -v Show more debug information. - -f|--force Force the update command (Even if the database structure matches) - -o|--override Override running or stalling updates HELP; return $help; } + public function __construct(Database $dba, Cache $configCache, $argv = null) + { + parent::__construct($argv); + + $this->dba = $dba; + $this->configCache = $configCache; + } + protected function doExecute() { if ($this->getOption('v')) { @@ -52,30 +92,36 @@ HELP; return 0; } - if (count($this->args) > 1) { + if ((count($this->args) > 1) && ($this->getArgument(0) != 'version')) { throw new \Asika\SimpleConsole\CommandArgsException('Too many arguments'); + } elseif ((count($this->args) != 2) && ($this->getArgument(0) == 'version')) { + throw new \Asika\SimpleConsole\CommandArgsException('This command needs two arguments'); } - if (!DBA::connected()) { + if (!$this->dba->isConnected()) { throw new RuntimeException('Unable to connect to database'); } - Core\Config::load(); - - $a = get_app(); + $basePath = $this->configCache->get('system', 'basepath'); switch ($this->getArgument(0)) { case "dryrun": - $output = DBStructure::update($a->getBasePath(), true, false); + $output = DBStructure::update($basePath, true, false); break; case "update": $force = $this->getOption(['f', 'force'], false); $override = $this->getOption(['o', 'override'], false); - $output = Update::run($a->getBasePath(), $force, $override,true, false); + $output = Update::run($basePath, $force, $override,true, false); + break; + case "drop": + $execute = $this->getOption(['e', 'execute'], false); + ob_start(); + DBStructure::dropTables($execute); + $output = ob_get_clean(); break; case "dumpsql": ob_start(); - DBStructure::printStructure($a->getBasePath()); + DBStructure::printStructure($basePath); $output = ob_get_clean(); break; case "toinnodb": @@ -83,11 +129,21 @@ HELP; DBStructure::convertToInnoDB(); $output = ob_get_clean(); break; + case "version": + ob_start(); + DBStructure::setDatabaseVersion($this->getArgument(1)); + $output = ob_get_clean(); + break; + case "initial": + ob_start(); + DBStructure::checkInitialValues(true); + $output = ob_get_clean(); + break; default: $output = 'Unknown command: ' . $this->getArgument(0); } - $this->out($output); + $this->out(trim($output)); return 0; }