From 195c577c77b854723dc79e4baf19ad8d6b4d6d86 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 2 Mar 2015 12:02:14 +0100 Subject: [PATCH 1/2] Add a repair step to delete old tables --- lib/private/repair.php | 2 + lib/repair/dropoldtables.php | 83 ++++++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 lib/repair/dropoldtables.php diff --git a/lib/private/repair.php b/lib/private/repair.php index d9fd99707e8..101af66e304 100644 --- a/lib/private/repair.php +++ b/lib/private/repair.php @@ -13,6 +13,7 @@ use OC\Hooks\Emitter; use OC\Repair\AssetCache; use OC\Repair\CleanTags; use OC\Repair\Collation; +use OC\Repair\DropOldTables; use OC\Repair\FillETags; use OC\Repair\InnoDB; use OC\Repair\RepairConfig; @@ -84,6 +85,7 @@ class Repair extends BasicEmitter { new AssetCache(), new FillETags(\OC_DB::getConnection()), new CleanTags(\OC_DB::getConnection()), + new DropOldTables(\OC_DB::getConnection()), ); } diff --git a/lib/repair/dropoldtables.php b/lib/repair/dropoldtables.php new file mode 100644 index 00000000000..00d2a1bfab9 --- /dev/null +++ b/lib/repair/dropoldtables.php @@ -0,0 +1,83 @@ +connection = $connection; + } + + /** + * Returns the step's name + * + * @return string + */ + public function getName() { + return 'Drop old database tables'; + } + + /** + * Run repair step. + * Must throw exception on error. + * + * @throws \Exception in case of failure + */ + public function run() { + foreach ($this->oldDatabaseTables() as $tableName) { + if ($this->connection->tableExists($tableName)){ + $this->emit('\OC\Repair', 'info', [ + sprintf('Table %s has been deleted', $tableName) + ]); + $this->connection->dropTable($tableName); + } + } + } + + /** + * Returns a list of outdated tables which are not used anymore + * @return array + */ + protected function oldDatabaseTables() { + return [ + 'calendar_calendars', + 'calendar_objects', + 'calendar_share_calendar', + 'calendar_share_event', + 'foldersize', + 'fscache', + 'locks', + 'log', + 'media_albums', + 'media_artists', + 'media_sessions', + 'media_songs', + 'media_users', + 'permissions', + 'pictures_images_cache', + 'queuedtasks', + 'sharing', + ]; + } +} From 8df4077dd7b38328b640e1b2a1843ff5e38d622e Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 3 Mar 2015 11:27:06 +0100 Subject: [PATCH 2/2] Add a test for dropping the tables --- tests/lib/repair/dropoldtables.php | 38 +++++++++++++++++++++ tests/lib/repair/fixtures/dropoldtables.xml | 24 +++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 tests/lib/repair/dropoldtables.php create mode 100644 tests/lib/repair/fixtures/dropoldtables.xml diff --git a/tests/lib/repair/dropoldtables.php b/tests/lib/repair/dropoldtables.php new file mode 100644 index 00000000000..244d8837949 --- /dev/null +++ b/tests/lib/repair/dropoldtables.php @@ -0,0 +1,38 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace Test\Repair; + +/** + * Tests for the dropping old tables + * + * @see \OC\Repair\DropOldTables + */ +class DropOldTables extends \Test\TestCase { + /** @var \OCP\IDBConnection */ + protected $connection; + + protected function setUp() { + parent::setUp(); + + $this->connection = \OC::$server->getDatabaseConnection(); + $manager = new \OC\DB\MDB2SchemaManager($this->connection); + $manager->createDbFromStructure(__DIR__ . '/fixtures/dropoldtables.xml'); + } + + public function testRun() { + $this->assertFalse($this->connection->tableExists('sharing'), 'Asserting that the table oc_sharing does not exist before repairing'); + $this->assertTrue($this->connection->tableExists('permissions'), 'Asserting that the table oc_permissions does exist before repairing'); + + $repair = new \OC\Repair\DropOldTables($this->connection); + $repair->run(); + + $this->assertFalse($this->connection->tableExists('sharing'), 'Asserting that the table oc_sharing does not exist after repairing'); + $this->assertFalse($this->connection->tableExists('permissions'), 'Asserting that the table oc_permissions does not exist after repairing'); + } +} diff --git a/tests/lib/repair/fixtures/dropoldtables.xml b/tests/lib/repair/fixtures/dropoldtables.xml new file mode 100644 index 00000000000..6c42a8f90a7 --- /dev/null +++ b/tests/lib/repair/fixtures/dropoldtables.xml @@ -0,0 +1,24 @@ + + + + *dbname* + true + false + + utf8 + + + + *dbprefix*permissions + + + + textfield + text + foo + true + 32 + + +
+