Drop unused friendica tables

This commit is contained in:
Michael 2020-12-20 14:01:46 +00:00
parent d5a90f384d
commit 6ebd023c4e
3 changed files with 52 additions and 4 deletions

View File

@ -48,11 +48,12 @@ class DatabaseStructure extends \Asika\SimpleConsole\Console
$help = <<<HELP
console dbstructure - Performs database updates
Usage
bin/console dbstructure <command> [-h|--help|-?] |-f|--force] [-v]
bin/console dbstructure <command> [-h|--help|-?] [-e|--execute] |-f|--force] [-o|--override] [-v]
Commands
dryrun Show database update schema queries without running them
update Update database schema
drop Drop tables that aren't in use anymore
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
@ -61,8 +62,9 @@ Commands
Options
-h|--help|-? Show help information
-v Show more debug information.
-e|--execute Execute the dropping.
-f|--force Force the update command (Even if the database structure matches)
-o|--override Override running or stalling updates
-o|--override Override running or stalling updates
HELP;
return $help;
}
@ -109,6 +111,12 @@ HELP;
$override = $this->getOption(['o', 'override'], 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($basePath);
@ -133,7 +141,7 @@ HELP;
$output = 'Unknown command: ' . $this->getArgument(0);
}
$this->out($output);
$this->out(trim($output));
return 0;
}

View File

@ -64,6 +64,46 @@ class DBStructure
echo DI::l10n()->t('The database version had been set to %s.', $version);
}
/**
* Drop unused tables
*
* @param boolean $execute
* @return void
*/
public static function dropTables(bool $execute)
{
$old_tables = ['fserver', 'gcign', 'gcontact', 'gcontact-relation', 'gfollower' ,'glink', 'item-delivery-data',
'item_id', 'poll', 'poll_result', 'queue', 'retriever_rule', 'sign', 'spam', 'term'];
$tables = DBA::selectToArray(['INFORMATION_SCHEMA' => 'TABLES'], ['TABLE_NAME'],
['TABLE_SCHEMA' => DBA::databaseName(), 'TABLE_TYPE' => 'BASE TABLE']);
if (empty($tables)) {
echo DI::l10n()->t('No unused tables found.');
return;
}
if (!$execute) {
echo DI::l10n()->t('These tables are not used for friendica and will be deleted when you execute "dbstructure drop -e":') . "\n\n";
}
foreach ($tables as $table) {
if (in_array($table['TABLE_NAME'], $old_tables)) {
if ($execute) {
$sql = 'DROP TABLE ' . DBA::quoteIdentifier($table['TABLE_NAME']) . ';';
echo $sql . "\n";
$result = DBA::e($sql);
if (!DBA::isResult($result)) {
self::printUpdateError($sql);
}
} else {
echo $table['TABLE_NAME'] . "\n";
}
}
}
}
/**
* Converts all tables from MyISAM/InnoDB Antelope to InnoDB Barracuda
*/

View File

@ -158,7 +158,7 @@ class View
}
/**
* Check if the given table/view is a view
* Check if the given table/view is a table
*
* @param string $table
* @return boolean "true" if it's a table