Merge pull request #9687 from annando/drop-unused

Drop unused friendica tables
This commit is contained in:
Hypolite Petovan 2020-12-20 19:11:45 -05:00 committed by GitHub
commit c8476f6838
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 62 additions and 12 deletions

View File

@ -48,21 +48,25 @@ class DatabaseStructure extends \Asika\SimpleConsole\Console
$help = <<<HELP $help = <<<HELP
console dbstructure - Performs database updates console dbstructure - Performs database updates
Usage Usage
bin/console dbstructure <command> [-h|--help|-?] |-f|--force] [-v] bin/console dbstructure <command> [options]
Commands Commands
dryrun Show database update schema queries without running them drop Show tables that aren't in use by Friendica anymore and can be dropped
update Update database schema -e|--execute Execute the dropping
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
Options update Update database schema
-f|--force Force the update command (Even if the database structure matches)
-o|--override Override running or stalling updates
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 -h|--help|-? Show help information
-v Show more debug 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; HELP;
return $help; return $help;
} }
@ -109,6 +113,12 @@ HELP;
$override = $this->getOption(['o', 'override'], false); $override = $this->getOption(['o', 'override'], false);
$output = Update::run($basePath, $force, $override,true, false); $output = Update::run($basePath, $force, $override,true, false);
break; break;
case "drop":
$execute = $this->getOption(['e', 'execute'], false);
ob_start();
DBStructure::dropTables($execute);
$output = ob_get_clean();
break;
case "dumpsql": case "dumpsql":
ob_start(); ob_start();
DBStructure::printStructure($basePath); DBStructure::printStructure($basePath);
@ -133,7 +143,7 @@ HELP;
$output = 'Unknown command: ' . $this->getArgument(0); $output = 'Unknown command: ' . $this->getArgument(0);
} }
$this->out($output); $this->out(trim($output));
return 0; return 0;
} }

View File

@ -64,6 +64,46 @@ class DBStructure
echo DI::l10n()->t('The database version had been set to %s.', $version); 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 * 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 * @param string $table
* @return boolean "true" if it's a table * @return boolean "true" if it's a table