Browse Source

Add DBStructure Console

- Refactor subConsole instantiation
pull/4632/head
Hypolite Petovan 4 years ago
parent
commit
2f1a1debf4
  1. 50
      src/Core/Console.php
  2. 110
      src/Core/Console/DatabaseStructure.php

50
src/Core/Console.php

@ -13,16 +13,29 @@ class Console extends \Asika\SimpleConsole\Console
protected $helpOptions = [];
protected $customHelpOptions = ['h', 'help', '?'];
protected $subConsoles = [
'config' => __NAMESPACE__ . '\Console\Config',
'createdoxygen' => __NAMESPACE__ . '\Console\CreateDoxygen',
'docbloxerrorchecker' => __NAMESPACE__ . '\Console\DocBloxErrorChecker',
'dbstructure' => __NAMESPACE__ . '\Console\DatabaseStructure',
'extract' => __NAMESPACE__ . '\Console\Extract',
'globalcommunityblock' => __NAMESPACE__ . '\Console\GlobalCommunityBlock',
'globalcommunitysilence' => __NAMESPACE__ . '\Console\GlobalCommunitySilence',
'maintenance' => __NAMESPACE__ . '\Console\Maintenance',
'php2po' => __NAMESPACE__ . '\Console\PhpToPo',
'po2php' => __NAMESPACE__ . '\Console\PoToPhp',
'typo' => __NAMESPACE__ . '\Console\Typo',
];
protected function getHelp()
{
$help = <<<HELP
Usage: bin/console [--version] [-h|--help|-?] <command> [<args>] [-v]
Commands:
config Edit site config
createdoxygen Generate Doxygen headers
dbstructure Do database updates
docbloxerrorchecker Check the file tree for DocBlox errors
extract Generate translation string file for the Friendica project (deprecated)
globalcommunityblock Block remote profile from interacting with this node
@ -89,35 +102,16 @@ HELP;
$this->out('Command: ' . $command);
}
if (!isset($this->subConsoles[$command])) {
throw new \Asika\SimpleConsole\CommandArgsException('Command ' . $command . ' doesn\'t exist');
}
$subargs = $this->args;
array_unshift($subargs, $this->executable);
$subconsole = null;
switch ($command) {
case 'config' : $subconsole = new Console\Config($subargs);
break;
case 'createdoxygen' : $subconsole = new Console\CreateDoxygen($subargs);
break;
case 'docbloxerrorchecker' : $subconsole = new Console\DocBloxErrorChecker($subargs);
break;
case 'extract' : $subconsole = new Console\Extract($subargs);
break;
case 'globalcommunityblock': $subconsole = new Console\GlobalCommunityBlock($subargs);
break;
case 'globalcommunitysilence': $subconsole = new Console\GlobalCommunitySilence($subargs);
break;
case 'maintenance': $subconsole = new Console\Maintenance($subargs);
break;
case 'php2po': $subconsole = new Console\PhpToPo($subargs);
break;
case 'po2php': $subconsole = new Console\PoToPhp($subargs);
break;
case 'typo': $subconsole = new Console\Typo($subargs);
break;
default:
throw new \Asika\SimpleConsole\CommandArgsException('Command ' . $command . ' doesn\'t exist');
}
$className = $this->subConsoles[$command];
$subconsole = new $className($subargs);
foreach ($this->options as $name => $value) {
$subconsole->setOption($name, $value);

110
src/Core/Console/DatabaseStructure.php

@ -0,0 +1,110 @@
<?php
namespace Friendica\Core\Console;
use Friendica\Core;
use Friendica\Database\DBStructure;
require_once 'boot.php';
require_once 'include/dba.php';
/**
* @brief Does database updates from the command line
*
* @author Hypolite Petovan <mrpetovan@gmail.com>
*/
class DatabaseStructure extends \Asika\SimpleConsole\Console
{
protected $helpOptions = ['h', 'help', '?'];
protected function getHelp()
{
$help = <<<HELP
console dbstructure - Does database updates
Usage
bin/console dbstructure <command> [-h|--help|-?] [-v]
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
Options
-h|--help|-? Show help information
-v Show more debug information.
HELP;
return $help;
}
protected function doExecute()
{
if ($this->getOption('v')) {
$this->out('Class: ' . __CLASS__);
$this->out('Arguments: ' . var_export($this->args, true));
$this->out('Options: ' . var_export($this->options, true));
}
if (count($this->args) == 0) {
$this->out($this->getHelp());
return 0;
}
if (count($this->args) > 1) {
throw new \Asika\SimpleConsole\CommandArgsException('Too many arguments');
}
require_once '.htconfig.php';
$result = \dba::connect($db_host, $db_user, $db_pass, $db_data);
unset($db_host, $db_user, $db_pass, $db_data);
if (!$result) {
throw new \RuntimeException('Unable to connect to database');
}
Core\Config::load();
switch ($this->getArgument(0)) {
case "dryrun":
$output = DBStructure::update(true, false);
break;
case "update":
$output = DBStructure::update(true, true);
$build = Core\Config::get('system', 'build');
if (empty($build)) {
Core\Config::set('system', 'build', DB_UPDATE_VERSION);
$build = DB_UPDATE_VERSION;
}
$stored = intval($build);
$current = intval(DB_UPDATE_VERSION);
// run any left update_nnnn functions in update.php
for ($x = $stored; $x < $current; $x ++) {
$r = run_update_function($x);
if (!$r) {
break;
}
}
Core\Config::set('system', 'build', DB_UPDATE_VERSION);
break;
case "dumpsql":
ob_start();
DBStructure::printStructure();
$output = ob_get_clean();
break;
case "toinnodb":
ob_start();
DBStructure::convertToInnoDB();
$output = ob_get_clean();
break;
}
$this->out($output);
return 0;
}
}
Loading…
Cancel
Save