]> source.dussan.org Git - nextcloud-server.git/commitdiff
fix(db): Move missing core columns to typed event
authorJoas Schilling <coding@schilljs.com>
Wed, 19 Jul 2023 21:14:43 +0000 (23:14 +0200)
committerJoas Schilling <coding@schilljs.com>
Mon, 24 Jul 2023 12:51:33 +0000 (14:51 +0200)
Signed-off-by: Joas Schilling <coding@schilljs.com>
core/Application.php
core/Command/Db/AddMissingColumns.php
core/register_command.php

index d6f0f9599640e90cdddfda0e3e472551e3e93464..b29d8cce022e602df3222d655b0808e57c72cc8d 100644 (file)
@@ -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);
index 93e346e498cbcd3093880666ec66489be860b525..46642f7d0d4964b85d2c40428e4195a72323f81e 100644 (file)
@@ -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('<info>Check columns of the comments table.</info>');
-
-               $schema = new SchemaWrapper($this->connection);
-               $updated = false;
-
-               if ($schema->hasTable('comments')) {
-                       $table = $schema->getTable('comments');
-                       if (!$table->hasColumn('reference_id')) {
-                               $output->writeln('<info>Adding additional reference_id column to the comments table, this can take some time...</info>');
-                               $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('<info>Comments table updated successfully.</info>');
-                       }
-               }
-
-               return $updated;
-       }
 }
index 8d57641db9c67b37471744aa0a6c785982f67495..df39ad4484cabcc19c476d6668915d7107449c2d 100644 (file)
@@ -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)));