]> git.mxchange.org Git - friendica.git/commitdiff
Drop unused friendica tables
authorMichael <heluecht@pirati.ca>
Sun, 20 Dec 2020 14:01:46 +0000 (14:01 +0000)
committerMichael <heluecht@pirati.ca>
Sun, 20 Dec 2020 14:01:46 +0000 (14:01 +0000)
src/Console/DatabaseStructure.php
src/Database/DBStructure.php
src/Database/View.php

index 5a92587fc39c927c27957d25624c687b6aa313f3..b998c420b8c9adc4bf9224e87b9eff2e14b3c2fa 100644 (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;
        }
index aa6a0cf29b66741682882cd9fdfc351667a67d5e..9b69f7b1114143107a50fa15991666f7d58342ea 100644 (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
         */
index fd0a8ce1a52cf48a700a5792f9626d7cef1afe6d..84570632054a8640db2339a9cdf8f1ef2ace9ee3 100644 (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