diff options
author | Thomas Müller <thomas.mueller@tmit.eu> | 2015-03-03 13:37:54 +0100 |
---|---|---|
committer | Thomas Müller <thomas.mueller@tmit.eu> | 2015-03-03 13:37:54 +0100 |
commit | e30ca8198f4535cdb9f14feb335b68d363aec426 (patch) | |
tree | 7ab2e2fb6aa437a3e148b419ff4d0ebc0e63f720 | |
parent | 0af2ea8b281c5c37a27b0bb4840f23419d399fe9 (diff) | |
parent | 8df4077dd7b38328b640e1b2a1843ff5e38d622e (diff) | |
download | nextcloud-server-e30ca8198f4535cdb9f14feb335b68d363aec426.tar.gz nextcloud-server-e30ca8198f4535cdb9f14feb335b68d363aec426.zip |
Merge pull request #14638 from owncloud/issue/14538-repairstep-drop-old-tables
Add a repair step to delete old tables
-rw-r--r-- | lib/private/repair.php | 2 | ||||
-rw-r--r-- | lib/repair/dropoldtables.php | 83 | ||||
-rw-r--r-- | tests/lib/repair/dropoldtables.php | 38 | ||||
-rw-r--r-- | tests/lib/repair/fixtures/dropoldtables.xml | 24 |
4 files changed, 147 insertions, 0 deletions
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 @@ +<?php +/** + * ownCloud + * + * @author Joas Schilling + * @copyright 2015 Joas Schilling nickvergessen@owncloud.com + * + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\Repair; + + +use OC\DB\Connection; +use OC\Hooks\BasicEmitter; +use OC\RepairStep; + +class DropOldTables extends BasicEmitter implements RepairStep { + + /** @var Connection */ + protected $connection; + + /** + * @param Connection $connection + */ + public function __construct(Connection $connection) { + $this->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', + ]; + } +} 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 @@ +<?php +/** + * Copyright (c) 2015 Joas Schilling <nickvergessen@owncloud.com> + * 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 @@ +<?xml version="1.0" encoding="utf-8" ?> +<database> + + <name>*dbname*</name> + <create>true</create> + <overwrite>false</overwrite> + + <charset>utf8</charset> + + <table> + + <name>*dbprefix*permissions</name> + + <declaration> + <field> + <name>textfield</name> + <type>text</type> + <default>foo</default> + <notnull>true</notnull> + <length>32</length> + </field> + </declaration> + </table> +</database> |