From f73f14207c6c0792396a2cab92ff33b806500867 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 19 Jul 2023 23:14:43 +0200 Subject: [PATCH] fix(db): Move missing core columns to typed event Signed-off-by: Joas Schilling --- core/Application.php | 29 ++++++++++----------- core/Command/Db/AddMissingColumns.php | 37 +-------------------------- core/register_command.php | 2 +- 3 files changed, 15 insertions(+), 53 deletions(-) diff --git a/core/Application.php b/core/Application.php index d6f0f959964..b29d8cce022 100644 --- a/core/Application.php +++ b/core/Application.php @@ -54,7 +54,9 @@ use OC\Metadata\FileEventListener; use OC\TagManager; use OCP\AppFramework\App; use OCP\AppFramework\Http\Events\BeforeTemplateRenderedEvent; +use OCP\DB\Events\AddMissingColumnsEvent; use OCP\DB\Events\AddMissingPrimaryKeyEvent; +use OCP\DB\Types; use OCP\EventDispatcher\IEventDispatcher; use OCP\Files\Events\Node\NodeDeletedEvent; use OCP\Files\Events\Node\NodeWrittenEvent; @@ -298,22 +300,17 @@ class Application extends App { ); }); - $oldEventDispatcher->addListener(IDBConnection::CHECK_MISSING_COLUMNS_EVENT, - function (GenericEvent $event) use ($container) { - /** @var MissingColumnInformation $subject */ - $subject = $event->getSubject(); - - $schema = new SchemaWrapper($container->query(Connection::class)); - - if ($schema->hasTable('comments')) { - $table = $schema->getTable('comments'); - - if (!$table->hasColumn('reference_id')) { - $subject->addHintForMissingColumn($table->getName(), 'reference_id'); - } - } - } - ); + $eventDispatcher->addListener(AddMissingColumnsEvent::class, function (AddMissingColumnsEvent $event) { + $event->addMissingColumn( + 'comments', + 'reference_id', + Types::STRING, + [ + 'notnull' => false, + 'length' => 64, + ] + ); + }); $eventDispatcher->addServiceListener(BeforeTemplateRenderedEvent::class, BeforeTemplateRenderedListener::class); $eventDispatcher->addServiceListener(RemoteWipeStarted::class, RemoteWipeActivityListener::class); diff --git a/core/Command/Db/AddMissingColumns.php b/core/Command/Db/AddMissingColumns.php index 93e346e498c..46642f7d0d4 100644 --- a/core/Command/Db/AddMissingColumns.php +++ b/core/Command/Db/AddMissingColumns.php @@ -66,8 +66,6 @@ class AddMissingColumns extends Command { protected function execute(InputInterface $input, OutputInterface $output): int { $dryRun = $input->getOption('dry-run'); - $updated = $this->addCoreColumns($output, $dryRun); - // Dispatch event so apps can also update columns if needed $event = new GenericEvent($output); $this->legacyDispatcher->dispatch(IDBConnection::ADD_MISSING_COLUMNS_EVENT, $event); @@ -75,6 +73,7 @@ class AddMissingColumns extends Command { $event = new AddMissingColumnsEvent(); $this->dispatcher->dispatchTyped($event); $missingColumns = $event->getMissingColumns(); + $updated = false; if (!empty($missingColumns)) { $schema = new SchemaWrapper($this->connection); @@ -102,38 +101,4 @@ class AddMissingColumns extends Command { return 0; } - - /** - * Add missing column for core tables - * - * @param OutputInterface $output - * @param bool $dryRun If true, will return the sql queries instead of running them. - * @return bool True when the schema changed - * @throws \Doctrine\DBAL\Schema\SchemaException - */ - private function addCoreColumns(OutputInterface $output, bool $dryRun): bool { - $output->writeln('Check columns of the comments table.'); - - $schema = new SchemaWrapper($this->connection); - $updated = false; - - if ($schema->hasTable('comments')) { - $table = $schema->getTable('comments'); - if (!$table->hasColumn('reference_id')) { - $output->writeln('Adding additional reference_id column to the comments table, this can take some time...'); - $table->addColumn('reference_id', Types::STRING, [ - 'notnull' => false, - 'length' => 64, - ]); - $sqlQueries = $this->connection->migrateToSchema($schema->getWrappedSchema(), $dryRun); - if ($dryRun && $sqlQueries !== null) { - $output->writeln($sqlQueries); - } - $updated = true; - $output->writeln('Comments table updated successfully.'); - } - } - - return $updated; - } } diff --git a/core/register_command.php b/core/register_command.php index 8d57641db9c..df39ad4484c 100644 --- a/core/register_command.php +++ b/core/register_command.php @@ -109,9 +109,9 @@ if (\OC::$server->getConfig()->getSystemValue('installed', false)) { $application->add(new OC\Core\Command\Db\ConvertType(\OC::$server->getConfig(), new \OC\DB\ConnectionFactory(\OC::$server->getSystemConfig()))); $application->add(new OC\Core\Command\Db\ConvertMysqlToMB4(\OC::$server->getConfig(), \OC::$server->getDatabaseConnection(), \OC::$server->getURLGenerator(), \OC::$server->get(LoggerInterface::class))); $application->add(new OC\Core\Command\Db\ConvertFilecacheBigInt(\OC::$server->get(\OC\DB\Connection::class))); + $application->add(\OCP\Server::get(\OC\Core\Command\Db\AddMissingColumns::class)); $application->add(\OCP\Server::get(\OC\Core\Command\Db\AddMissingIndices::class)); $application->add(\OCP\Server::get(\OC\Core\Command\Db\AddMissingPrimaryKeys::class)); - $application->add(new OC\Core\Command\Db\AddMissingColumns(\OC::$server->get(\OC\DB\Connection::class), \OC::$server->getEventDispatcher())); if (\OC::$server->getConfig()->getSystemValueBool('debug', false)) { $application->add(new OC\Core\Command\Db\Migrations\StatusCommand(\OC::$server->get(\OC\DB\Connection::class))); -- 2.39.5