diff options
author | John Molakvoæ <skjnldsv@users.noreply.github.com> | 2024-02-22 20:33:42 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-22 20:33:42 +0100 |
commit | a891cbc21b1e6bac067c8748b24d0c29873bbfd5 (patch) | |
tree | db2e1f9db076ac51ef9a2aaefd88e4864c379c62 /lib/private | |
parent | f9c66bcbf1b06d5648e3f028bc6623079eb2c587 (diff) | |
parent | 261efaafd3f2cd1c8268eaa90ddecf4755a73e9b (diff) | |
download | nextcloud-server-a891cbc21b1e6bac067c8748b24d0c29873bbfd5.tar.gz nextcloud-server-a891cbc21b1e6bac067c8748b24d0c29873bbfd5.zip |
Merge pull request #43580 from nextcloud/artonge/fix/metdata_column_migration
Diffstat (limited to 'lib/private')
-rw-r--r-- | lib/private/Repair.php | 18 | ||||
-rw-r--r-- | lib/private/Repair/AddMetadataMigrationJob.php | 70 |
2 files changed, 80 insertions, 8 deletions
diff --git a/lib/private/Repair.php b/lib/private/Repair.php index 541073de1ee..99af19ddb79 100644 --- a/lib/private/Repair.php +++ b/lib/private/Repair.php @@ -34,19 +34,14 @@ */ namespace OC; -use OC\Repair\AddRemoveOldTasksBackgroundJob; -use OC\Repair\CleanUpAbandonedApps; -use OCP\AppFramework\QueryException; -use OCP\AppFramework\Utility\ITimeFactory; -use OCP\Collaboration\Resources\IManager; -use OCP\EventDispatcher\IEventDispatcher; -use OCP\Migration\IOutput; -use OCP\Migration\IRepairStep; use OC\DB\Connection; use OC\DB\ConnectionAdapter; use OC\Repair\AddBruteForceCleanupJob; use OC\Repair\AddCleanupUpdaterBackupsJob; +use OC\Repair\AddMetadataMigrationJob; +use OC\Repair\AddRemoveOldTasksBackgroundJob; use OC\Repair\CleanTags; +use OC\Repair\CleanUpAbandonedApps; use OC\Repair\ClearFrontendCaches; use OC\Repair\ClearGeneratedAvatarCache; use OC\Repair\Collation; @@ -86,6 +81,12 @@ use OC\Repair\RepairInvalidShares; use OC\Repair\RepairMimeTypes; use OC\Repair\SqliteAutoincrement; use OC\Template\JSCombiner; +use OCP\AppFramework\QueryException; +use OCP\AppFramework\Utility\ITimeFactory; +use OCP\Collaboration\Resources\IManager; +use OCP\EventDispatcher\IEventDispatcher; +use OCP\Migration\IOutput; +use OCP\Migration\IRepairStep; use Psr\Log\LoggerInterface; use Throwable; @@ -212,6 +213,7 @@ class Repair implements IOutput { \OCP\Server::get(CleanUpAbandonedApps::class), \OCP\Server::get(AddMissingSecretJob::class), \OCP\Server::get(AddRemoveOldTasksBackgroundJob::class), + \OCP\Server::get(AddMetadataMigrationJob::class), ]; } diff --git a/lib/private/Repair/AddMetadataMigrationJob.php b/lib/private/Repair/AddMetadataMigrationJob.php new file mode 100644 index 00000000000..7bc3573a1a2 --- /dev/null +++ b/lib/private/Repair/AddMetadataMigrationJob.php @@ -0,0 +1,70 @@ +<?php +/** + * @copyright Copyright (c) 2024 Louis Chmn <louis@chmn.me> + * + * @author Louis Chmn <louis@chmn.me> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ +namespace OC\Repair; + +use OC\Core\BackgroundJobs\MetadataMigrationJob; +use OCP\BackgroundJob\IJobList; +use OCP\IDBConnection; +use OCP\Migration\IOutput; +use OCP\Migration\IRepairStep; + +class AddMetadataMigrationJob implements IRepairStep { + public function __construct( + private IJobList $jobList, + private IDBConnection $db, + ) { + } + + public function getName() { + return 'Queue a job to migrate the file_metadata table and delete the metadata column once empty'; + } + + public function run(IOutput $output) { + $schema = $this->db->createSchema(); + $metadataTable = $schema->getTable('oc_file_metadata'); + + if (!$metadataTable->hasColumn('metadata')) { + return; + } + + $selectQuery = $this->db->getQueryBuilder(); + $result = $selectQuery->select('id', 'group_name', 'metadata') + ->from('file_metadata') + ->where($selectQuery->expr()->nonEmptyString('metadata')) + ->setMaxResults(1) + ->executeQuery(); + + if ($result->rowCount() === 0) { + $output->info('Removing metadata column from the file_metadata table.'); + $metadataTable->dropColumn('metadata'); + $this->db->migrateToSchema($schema); + return; + } + + if ($this->jobList->has(MetadataMigrationJob::class, null)) { + return; + } + + $this->jobList->add(MetadataMigrationJob::class); + } +} |