diff --git a/core/Application.php b/core/Application.php index b29d8cce022..307d839f07c 100644 --- a/core/Application.php +++ b/core/Application.php @@ -32,7 +32,6 @@ */ namespace OC\Core; -use Doctrine\DBAL\Platforms\PostgreSQL94Platform; use OC\Authentication\Events\RemoteWipeFinished; use OC\Authentication\Events\RemoteWipeStarted; use OC\Authentication\Listeners\RemoteWipeActivityListener; @@ -45,28 +44,22 @@ use OC\Authentication\Listeners\UserDeletedWebAuthnCleanupListener; use OC\Authentication\Notifications\Notifier as AuthenticationNotifier; use OC\Core\Listener\BeforeTemplateRenderedListener; use OC\Core\Notification\CoreNotifier; -use OC\DB\Connection; -use OC\DB\MissingColumnInformation; -use OC\DB\MissingIndexInformation; -use OC\DB\MissingPrimaryKeyInformation; -use OC\DB\SchemaWrapper; 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\AddMissingIndicesEvent; 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; use OCP\Files\Events\NodeRemovedFromCache; -use OCP\IDBConnection; use OCP\User\Events\BeforeUserDeletedEvent; use OCP\User\Events\UserDeletedEvent; use OCP\Util; use OCP\IConfig; -use Symfony\Component\EventDispatcher\GenericEvent; /** * Class Application @@ -91,170 +84,181 @@ class Application extends App { $notificationManager->registerNotifierService(CoreNotifier::class); $notificationManager->registerNotifierService(AuthenticationNotifier::class); - $oldEventDispatcher = $server->getEventDispatcher(); + $eventDispatcher->addListener(AddMissingIndicesEvent::class, function (AddMissingIndicesEvent $event) { + $event->addMissingIndex( + 'share', + 'share_with_index', + ['share_with'] + ); + $event->addMissingIndex( + 'share', + 'parent_index', + ['parent'] + ); + $event->addMissingIndex( + 'share', + 'owner_index', + ['uid_owner'] + ); + $event->addMissingIndex( + 'share', + 'initiator_index', + ['uid_initiator'] + ); - $oldEventDispatcher->addListener(IDBConnection::CHECK_MISSING_INDEXES_EVENT, - function (GenericEvent $event) use ($container) { - /** @var MissingIndexInformation $subject */ - $subject = $event->getSubject(); + $event->addMissingIndex( + 'filecache', + 'fs_mtime', + ['mtime'] + ); + $event->addMissingIndex( + 'filecache', + 'fs_size', + ['size'] + ); + $event->addMissingIndex( + 'filecache', + 'fs_id_storage_size', + ['fileid', 'storage', 'size'] + ); + $event->addMissingIndex( + 'filecache', + 'fs_storage_path_prefix', + ['storage', 'path'], + ['lengths' => [null, 64]] + ); + $event->addMissingIndex( + 'filecache', + 'fs_parent', + ['parent'] + ); - $schema = new SchemaWrapper($container->query(Connection::class)); + $event->addMissingIndex( + 'twofactor_providers', + 'twofactor_providers_uid', + ['uid'] + ); - if ($schema->hasTable('share')) { - $table = $schema->getTable('share'); + $event->addMissingUniqueIndex( + 'login_flow_v2', + 'poll_token', + ['poll_token'], + [], + true + ); + $event->addMissingUniqueIndex( + 'login_flow_v2', + 'login_token', + ['login_token'], + [], + true + ); + $event->addMissingIndex( + 'login_flow_v2', + 'timestamp', + ['timestamp'], + [], + true + ); - if (!$table->hasIndex('share_with_index')) { - $subject->addHintForMissingSubject($table->getName(), 'share_with_index'); - } - if (!$table->hasIndex('parent_index')) { - $subject->addHintForMissingSubject($table->getName(), 'parent_index'); - } - if (!$table->hasIndex('owner_index')) { - $subject->addHintForMissingSubject($table->getName(), 'owner_index'); - } - if (!$table->hasIndex('initiator_index')) { - $subject->addHintForMissingSubject($table->getName(), 'initiator_index'); - } - } + $event->addMissingIndex( + 'whats_new', + 'version', + ['version'], + [], + true + ); - if ($schema->hasTable('filecache')) { - $table = $schema->getTable('filecache'); + $event->addMissingIndex( + 'cards', + 'cards_abiduri', + ['addressbookid', 'uri'], + [], + true + ); + $event->addMissingIndex( + 'cards', + 'cards_abid', + ['addressbookid'], + [], + true + ); + $event->addMissingIndex( + 'cards', + 'cards_abiduri', + ['addressbookid', 'uri'], + [], + true + ); - if (!$table->hasIndex('fs_mtime')) { - $subject->addHintForMissingSubject($table->getName(), 'fs_mtime'); - } + $event->addMissingIndex( + 'cards_properties', + 'cards_prop_abid', + ['addressbookid'], + [], + true + ); - if (!$table->hasIndex('fs_size')) { - $subject->addHintForMissingSubject($table->getName(), 'fs_size'); - } + $event->addMissingIndex( + 'calendarobjects_props', + 'calendarobject_calid_index', + ['calendarid', 'calendartype'] + ); - if (!$table->hasIndex('fs_id_storage_size')) { - $subject->addHintForMissingSubject($table->getName(), 'fs_id_storage_size'); - } + $event->addMissingIndex( + 'schedulingobjects', + 'schedulobj_principuri_index', + ['principaluri'] + ); - if (!$table->hasIndex('fs_storage_path_prefix') && !$schema->getDatabasePlatform() instanceof PostgreSQL94Platform) { - $subject->addHintForMissingSubject($table->getName(), 'fs_storage_path_prefix'); - } + $event->addMissingIndex( + 'properties', + 'properties_path_index', + ['userid', 'propertypath'] + ); + $event->addMissingIndex( + 'properties', + 'properties_pathonly_index', + ['propertypath'] + ); - if (!$table->hasIndex('fs_parent')) { - $subject->addHintForMissingSubject($table->getName(), 'fs_parent'); - } - } - if ($schema->hasTable('twofactor_providers')) { - $table = $schema->getTable('twofactor_providers'); + $event->addMissingIndex( + 'jobs', + 'job_lastcheck_reserved', + ['last_checked', 'reserved_at'] + ); - if (!$table->hasIndex('twofactor_providers_uid')) { - $subject->addHintForMissingSubject($table->getName(), 'twofactor_providers_uid'); - } - } + $event->addMissingIndex( + 'direct_edit', + 'direct_edit_timestamp', + ['timestamp'] + ); - if ($schema->hasTable('login_flow_v2')) { - $table = $schema->getTable('login_flow_v2'); + $event->addMissingIndex( + 'preferences', + 'preferences_app_key', + ['appid', 'configkey'] + ); - if (!$table->hasIndex('poll_token')) { - $subject->addHintForMissingSubject($table->getName(), 'poll_token'); - } - if (!$table->hasIndex('login_token')) { - $subject->addHintForMissingSubject($table->getName(), 'login_token'); - } - if (!$table->hasIndex('timestamp')) { - $subject->addHintForMissingSubject($table->getName(), 'timestamp'); - } - } + $event->addMissingIndex( + 'mounts', + 'mounts_class_index', + ['mount_provider_class'] + ); + $event->addMissingIndex( + 'mounts', + 'mounts_user_root_path_index', + ['user_id', 'root_id', 'mount_point'], + ['lengths' => [null, null, 128]] + ); - if ($schema->hasTable('whats_new')) { - $table = $schema->getTable('whats_new'); - - if (!$table->hasIndex('version')) { - $subject->addHintForMissingSubject($table->getName(), 'version'); - } - } - - if ($schema->hasTable('cards')) { - $table = $schema->getTable('cards'); - - if (!$table->hasIndex('cards_abid')) { - $subject->addHintForMissingSubject($table->getName(), 'cards_abid'); - } - - if (!$table->hasIndex('cards_abiduri')) { - $subject->addHintForMissingSubject($table->getName(), 'cards_abiduri'); - } - } - - if ($schema->hasTable('cards_properties')) { - $table = $schema->getTable('cards_properties'); - - if (!$table->hasIndex('cards_prop_abid')) { - $subject->addHintForMissingSubject($table->getName(), 'cards_prop_abid'); - } - } - - if ($schema->hasTable('calendarobjects_props')) { - $table = $schema->getTable('calendarobjects_props'); - - if (!$table->hasIndex('calendarobject_calid_index')) { - $subject->addHintForMissingSubject($table->getName(), 'calendarobject_calid_index'); - } - } - - if ($schema->hasTable('schedulingobjects')) { - $table = $schema->getTable('schedulingobjects'); - if (!$table->hasIndex('schedulobj_principuri_index')) { - $subject->addHintForMissingSubject($table->getName(), 'schedulobj_principuri_index'); - } - } - - if ($schema->hasTable('properties')) { - $table = $schema->getTable('properties'); - if (!$table->hasIndex('properties_path_index')) { - $subject->addHintForMissingSubject($table->getName(), 'properties_path_index'); - } - if (!$table->hasIndex('properties_pathonly_index')) { - $subject->addHintForMissingSubject($table->getName(), 'properties_pathonly_index'); - } - } - - if ($schema->hasTable('jobs')) { - $table = $schema->getTable('jobs'); - if (!$table->hasIndex('job_lastcheck_reserved')) { - $subject->addHintForMissingSubject($table->getName(), 'job_lastcheck_reserved'); - } - } - - if ($schema->hasTable('direct_edit')) { - $table = $schema->getTable('direct_edit'); - if (!$table->hasIndex('direct_edit_timestamp')) { - $subject->addHintForMissingSubject($table->getName(), 'direct_edit_timestamp'); - } - } - - if ($schema->hasTable('preferences')) { - $table = $schema->getTable('preferences'); - if (!$table->hasIndex('preferences_app_key')) { - $subject->addHintForMissingSubject($table->getName(), 'preferences_app_key'); - } - } - - if ($schema->hasTable('mounts')) { - $table = $schema->getTable('mounts'); - if (!$table->hasIndex('mounts_class_index')) { - $subject->addHintForMissingSubject($table->getName(), 'mounts_class_index'); - } - if (!$table->hasIndex('mounts_user_root_path_index')) { - $subject->addHintForMissingSubject($table->getName(), 'mounts_user_root_path_index'); - } - } - - if ($schema->hasTable('systemtag_object_mapping')) { - $table = $schema->getTable('systemtag_object_mapping'); - if (!$table->hasIndex('systag_by_tagid')) { - $subject->addHintForMissingSubject($table->getName(), 'systag_by_tagid'); - } - } - } - ); + $event->addMissingIndex( + 'systemtag_object_mapping', + 'systag_by_tagid', + ['systemtagid', 'objecttype'] + ); + }); $eventDispatcher->addListener(AddMissingPrimaryKeyEvent::class, function (AddMissingPrimaryKeyEvent $event) { $event->addMissingPrimaryKey( diff --git a/core/Command/Db/AddMissingIndices.php b/core/Command/Db/AddMissingIndices.php index 6c22557e3ff..f05be314e08 100644 --- a/core/Command/Db/AddMissingIndices.php +++ b/core/Command/Db/AddMissingIndices.php @@ -73,8 +73,6 @@ class AddMissingIndices extends Command { protected function execute(InputInterface $input, OutputInterface $output): int { $dryRun = $input->getOption('dry-run'); - $this->addCoreIndexes($output, $dryRun); - // Dispatch event so apps can also update indexes if needed $event = new GenericEvent($output); $this->dispatcher->dispatch(IDBConnection::ADD_MISSING_INDEXES_EVENT, $event); @@ -120,418 +118,4 @@ class AddMissingIndices extends Command { return 0; } - - /** - * add missing indices to the share table - * - * @param OutputInterface $output - * @param bool $dryRun If true, will return the sql queries instead of running them. - * @throws \Doctrine\DBAL\Schema\SchemaException - */ - private function addCoreIndexes(OutputInterface $output, bool $dryRun): void { - $output->writeln('Check indices of the share table.'); - - $schema = new SchemaWrapper($this->connection); - $updated = false; - - if ($schema->hasTable('share')) { - $table = $schema->getTable('share'); - if (!$table->hasIndex('share_with_index')) { - $output->writeln('Adding additional share_with index to the share table, this can take some time...'); - $table->addIndex(['share_with'], 'share_with_index'); - $sqlQueries = $this->connection->migrateToSchema($schema->getWrappedSchema(), $dryRun); - if ($dryRun && $sqlQueries !== null) { - $output->writeln($sqlQueries); - } - $updated = true; - $output->writeln('Share table updated successfully.'); - } - - if (!$table->hasIndex('parent_index')) { - $output->writeln('Adding additional parent index to the share table, this can take some time...'); - $table->addIndex(['parent'], 'parent_index'); - $sqlQueries = $this->connection->migrateToSchema($schema->getWrappedSchema(), $dryRun); - if ($dryRun && $sqlQueries !== null) { - $output->writeln($sqlQueries); - } - $updated = true; - $output->writeln('Share table updated successfully.'); - } - - if (!$table->hasIndex('owner_index')) { - $output->writeln('Adding additional owner index to the share table, this can take some time...'); - $table->addIndex(['uid_owner'], 'owner_index'); - $sqlQueries = $this->connection->migrateToSchema($schema->getWrappedSchema(), $dryRun); - if ($dryRun && $sqlQueries !== null) { - $output->writeln($sqlQueries); - } - $updated = true; - $output->writeln('Share table updated successfully.'); - } - - if (!$table->hasIndex('initiator_index')) { - $output->writeln('Adding additional initiator index to the share table, this can take some time...'); - $table->addIndex(['uid_initiator'], 'initiator_index'); - $sqlQueries = $this->connection->migrateToSchema($schema->getWrappedSchema(), $dryRun); - if ($dryRun && $sqlQueries !== null) { - $output->writeln($sqlQueries); - } - $updated = true; - $output->writeln('Share table updated successfully.'); - } - } - - $output->writeln('Check indices of the filecache table.'); - if ($schema->hasTable('filecache')) { - $table = $schema->getTable('filecache'); - if (!$table->hasIndex('fs_mtime')) { - $output->writeln('Adding additional mtime index to the filecache table, this can take some time...'); - $table->addIndex(['mtime'], 'fs_mtime'); - $sqlQueries = $this->connection->migrateToSchema($schema->getWrappedSchema(), $dryRun); - if ($dryRun && $sqlQueries !== null) { - $output->writeln($sqlQueries); - } - $updated = true; - $output->writeln('Filecache table updated successfully.'); - } - if (!$table->hasIndex('fs_size')) { - $output->writeln('Adding additional size index to the filecache table, this can take some time...'); - $table->addIndex(['size'], 'fs_size'); - $sqlQueries = $this->connection->migrateToSchema($schema->getWrappedSchema(), $dryRun); - if ($dryRun && $sqlQueries !== null) { - $output->writeln($sqlQueries); - } - $updated = true; - $output->writeln('Filecache table updated successfully.'); - } - if (!$table->hasIndex('fs_id_storage_size')) { - $output->writeln('Adding additional size index to the filecache table, this can take some time...'); - $table->addIndex(['fileid', 'storage', 'size'], 'fs_id_storage_size'); - $sqlQueries = $this->connection->migrateToSchema($schema->getWrappedSchema(), $dryRun); - if ($dryRun && $sqlQueries !== null) { - $output->writeln($sqlQueries); - } - $updated = true; - $output->writeln('Filecache table updated successfully.'); - } - if (!$table->hasIndex('fs_storage_path_prefix') && !$schema->getDatabasePlatform() instanceof PostgreSQL94Platform) { - $output->writeln('Adding additional path index to the filecache table, this can take some time...'); - $table->addIndex(['storage', 'path'], 'fs_storage_path_prefix', [], ['lengths' => [null, 64]]); - $sqlQueries = $this->connection->migrateToSchema($schema->getWrappedSchema(), $dryRun); - if ($dryRun && $sqlQueries !== null) { - $output->writeln($sqlQueries); - } - $updated = true; - $output->writeln('Filecache table updated successfully.'); - } - if (!$table->hasIndex('fs_parent')) { - $output->writeln('Adding additional parent index to the filecache table, this can take some time...'); - $table->addIndex(['parent'], 'fs_parent'); - $sqlQueries = $this->connection->migrateToSchema($schema->getWrappedSchema(), $dryRun); - if ($dryRun && $sqlQueries !== null) { - $output->writeln($sqlQueries); - } - $updated = true; - $output->writeln('Filecache table updated successfully.'); - } - } - - $output->writeln('Check indices of the twofactor_providers table.'); - if ($schema->hasTable('twofactor_providers')) { - $table = $schema->getTable('twofactor_providers'); - if (!$table->hasIndex('twofactor_providers_uid')) { - $output->writeln('Adding additional twofactor_providers_uid index to the twofactor_providers table, this can take some time...'); - $table->addIndex(['uid'], 'twofactor_providers_uid'); - $sqlQueries = $this->connection->migrateToSchema($schema->getWrappedSchema(), $dryRun); - if ($dryRun && $sqlQueries !== null) { - $output->writeln($sqlQueries); - } - $updated = true; - $output->writeln('Twofactor_providers table updated successfully.'); - } - } - - $output->writeln('Check indices of the login_flow_v2 table.'); - if ($schema->hasTable('login_flow_v2')) { - $table = $schema->getTable('login_flow_v2'); - if (!$table->hasIndex('poll_token')) { - $output->writeln('Adding additional indeces to the login_flow_v2 table, this can take some time...'); - - foreach ($table->getIndexes() as $index) { - $columns = $index->getColumns(); - if ($columns === ['poll_token'] || - $columns === ['login_token'] || - $columns === ['timestamp']) { - $table->dropIndex($index->getName()); - } - } - - $table->addUniqueIndex(['poll_token'], 'poll_token'); - $table->addUniqueIndex(['login_token'], 'login_token'); - $table->addIndex(['timestamp'], 'timestamp'); - $sqlQueries = $this->connection->migrateToSchema($schema->getWrappedSchema(), $dryRun); - if ($dryRun && $sqlQueries !== null) { - $output->writeln($sqlQueries); - } - $updated = true; - $output->writeln('login_flow_v2 table updated successfully.'); - } - } - - $output->writeln('Check indices of the whats_new table.'); - if ($schema->hasTable('whats_new')) { - $table = $schema->getTable('whats_new'); - if (!$table->hasIndex('version')) { - $output->writeln('Adding version index to the whats_new table, this can take some time...'); - - foreach ($table->getIndexes() as $index) { - if ($index->getColumns() === ['version']) { - $table->dropIndex($index->getName()); - } - } - - $table->addUniqueIndex(['version'], 'version'); - $sqlQueries = $this->connection->migrateToSchema($schema->getWrappedSchema(), $dryRun); - if ($dryRun && $sqlQueries !== null) { - $output->writeln($sqlQueries); - } - $updated = true; - $output->writeln('whats_new table updated successfully.'); - } - } - - $output->writeln('Check indices of the cards table.'); - $cardsUpdated = false; - if ($schema->hasTable('cards')) { - $table = $schema->getTable('cards'); - - if ($table->hasIndex('addressbookid_uri_index')) { - if ($table->hasIndex('cards_abiduri')) { - $table->dropIndex('addressbookid_uri_index'); - } else { - $output->writeln('Renaming addressbookid_uri_index index to cards_abiduri in the cards table, this can take some time...'); - - foreach ($table->getIndexes() as $index) { - if ($index->getColumns() === ['addressbookid', 'uri']) { - $table->renameIndex('addressbookid_uri_index', 'cards_abiduri'); - } - } - } - - $sqlQueries = $this->connection->migrateToSchema($schema->getWrappedSchema(), $dryRun); - if ($dryRun && $sqlQueries !== null) { - $output->writeln($sqlQueries); - } - $cardsUpdated = true; - } - - if (!$table->hasIndex('cards_abid')) { - $output->writeln('Adding cards_abid index to the cards table, this can take some time...'); - - foreach ($table->getIndexes() as $index) { - if ($index->getColumns() === ['addressbookid']) { - $table->dropIndex($index->getName()); - } - } - - $table->addIndex(['addressbookid'], 'cards_abid'); - $sqlQueries = $this->connection->migrateToSchema($schema->getWrappedSchema(), $dryRun); - if ($dryRun && $sqlQueries !== null) { - $output->writeln($sqlQueries); - } - $cardsUpdated = true; - } - - if (!$table->hasIndex('cards_abiduri')) { - $output->writeln('Adding cards_abiduri index to the cards table, this can take some time...'); - - foreach ($table->getIndexes() as $index) { - if ($index->getColumns() === ['addressbookid', 'uri']) { - $table->dropIndex($index->getName()); - } - } - - $table->addIndex(['addressbookid', 'uri'], 'cards_abiduri'); - $sqlQueries = $this->connection->migrateToSchema($schema->getWrappedSchema(), $dryRun); - if ($dryRun && $sqlQueries !== null) { - $output->writeln($sqlQueries); - } - $cardsUpdated = true; - } - - if ($cardsUpdated) { - $updated = true; - $output->writeln('cards table updated successfully.'); - } - } - - $output->writeln('Check indices of the cards_properties table.'); - if ($schema->hasTable('cards_properties')) { - $table = $schema->getTable('cards_properties'); - if (!$table->hasIndex('cards_prop_abid')) { - $output->writeln('Adding cards_prop_abid index to the cards_properties table, this can take some time...'); - - foreach ($table->getIndexes() as $index) { - if ($index->getColumns() === ['addressbookid']) { - $table->dropIndex($index->getName()); - } - } - - $table->addIndex(['addressbookid'], 'cards_prop_abid'); - $sqlQueries = $this->connection->migrateToSchema($schema->getWrappedSchema(), $dryRun); - if ($dryRun && $sqlQueries !== null) { - $output->writeln($sqlQueries); - } - $updated = true; - $output->writeln('cards_properties table updated successfully.'); - } - } - - $output->writeln('Check indices of the calendarobjects_props table.'); - if ($schema->hasTable('calendarobjects_props')) { - $table = $schema->getTable('calendarobjects_props'); - if (!$table->hasIndex('calendarobject_calid_index')) { - $output->writeln('Adding calendarobject_calid_index index to the calendarobjects_props table, this can take some time...'); - - $table->addIndex(['calendarid', 'calendartype'], 'calendarobject_calid_index'); - $sqlQueries = $this->connection->migrateToSchema($schema->getWrappedSchema(), $dryRun); - if ($dryRun && $sqlQueries !== null) { - $output->writeln($sqlQueries); - } - $updated = true; - $output->writeln('calendarobjects_props table updated successfully.'); - } - } - - $output->writeln('Check indices of the schedulingobjects table.'); - if ($schema->hasTable('schedulingobjects')) { - $table = $schema->getTable('schedulingobjects'); - if (!$table->hasIndex('schedulobj_principuri_index')) { - $output->writeln('Adding schedulobj_principuri_index index to the schedulingobjects table, this can take some time...'); - - $table->addIndex(['principaluri'], 'schedulobj_principuri_index'); - $sqlQueries = $this->connection->migrateToSchema($schema->getWrappedSchema(), $dryRun); - if ($dryRun && $sqlQueries !== null) { - $output->writeln($sqlQueries); - } - $updated = true; - $output->writeln('schedulingobjects table updated successfully.'); - } - } - - $output->writeln('Check indices of the oc_properties table.'); - if ($schema->hasTable('properties')) { - $table = $schema->getTable('properties'); - $propertiesUpdated = false; - - if (!$table->hasIndex('properties_path_index')) { - $output->writeln('Adding properties_path_index index to the oc_properties table, this can take some time...'); - - $table->addIndex(['userid', 'propertypath'], 'properties_path_index'); - $sqlQueries = $this->connection->migrateToSchema($schema->getWrappedSchema(), $dryRun); - if ($dryRun && $sqlQueries !== null) { - $output->writeln($sqlQueries); - } - $propertiesUpdated = true; - } - if (!$table->hasIndex('properties_pathonly_index')) { - $output->writeln('Adding properties_pathonly_index index to the oc_properties table, this can take some time...'); - - $table->addIndex(['propertypath'], 'properties_pathonly_index'); - $sqlQueries = $this->connection->migrateToSchema($schema->getWrappedSchema(), $dryRun); - if ($dryRun && $sqlQueries !== null) { - $output->writeln($sqlQueries); - } - $propertiesUpdated = true; - } - - if ($propertiesUpdated) { - $updated = true; - $output->writeln('oc_properties table updated successfully.'); - } - } - - $output->writeln('Check indices of the oc_jobs table.'); - if ($schema->hasTable('jobs')) { - $table = $schema->getTable('jobs'); - if (!$table->hasIndex('job_lastcheck_reserved')) { - $output->writeln('Adding job_lastcheck_reserved index to the oc_jobs table, this can take some time...'); - - $table->addIndex(['last_checked', 'reserved_at'], 'job_lastcheck_reserved'); - $sqlQueries = $this->connection->migrateToSchema($schema->getWrappedSchema(), $dryRun); - if ($dryRun && $sqlQueries !== null) { - $output->writeln($sqlQueries); - } - $updated = true; - $output->writeln('oc_properties table updated successfully.'); - } - } - - $output->writeln('Check indices of the oc_direct_edit table.'); - if ($schema->hasTable('direct_edit')) { - $table = $schema->getTable('direct_edit'); - if (!$table->hasIndex('direct_edit_timestamp')) { - $output->writeln('Adding direct_edit_timestamp index to the oc_direct_edit table, this can take some time...'); - - $table->addIndex(['timestamp'], 'direct_edit_timestamp'); - $sqlQueries = $this->connection->migrateToSchema($schema->getWrappedSchema(), $dryRun); - if ($dryRun && $sqlQueries !== null) { - $output->writeln($sqlQueries); - } - $updated = true; - $output->writeln('oc_direct_edit table updated successfully.'); - } - } - - $output->writeln('Check indices of the oc_preferences table.'); - if ($schema->hasTable('preferences')) { - $table = $schema->getTable('preferences'); - if (!$table->hasIndex('preferences_app_key')) { - $output->writeln('Adding preferences_app_key index to the oc_preferences table, this can take some time...'); - - $table->addIndex(['appid', 'configkey'], 'preferences_app_key'); - $this->connection->migrateToSchema($schema->getWrappedSchema()); - $updated = true; - $output->writeln('oc_properties table updated successfully.'); - } - } - - $output->writeln('Check indices of the oc_mounts table.'); - if ($schema->hasTable('mounts')) { - $table = $schema->getTable('mounts'); - if (!$table->hasIndex('mounts_class_index')) { - $output->writeln('Adding mounts_class_index index to the oc_mounts table, this can take some time...'); - - $table->addIndex(['mount_provider_class'], 'mounts_class_index'); - $this->connection->migrateToSchema($schema->getWrappedSchema()); - $updated = true; - $output->writeln('oc_mounts table updated successfully.'); - } - if (!$table->hasIndex('mounts_user_root_path_index')) { - $output->writeln('Adding mounts_user_root_path_index index to the oc_mounts table, this can take some time...'); - - $table->addIndex(['user_id', 'root_id', 'mount_point'], 'mounts_user_root_path_index', [], ['lengths' => [null, null, 128]]); - $this->connection->migrateToSchema($schema->getWrappedSchema()); - $updated = true; - $output->writeln('oc_mounts table updated successfully.'); - } - } - - $output->writeln('Check indices of the oc_systemtag_object_mapping table.'); - if ($schema->hasTable('systemtag_object_mapping')) { - $table = $schema->getTable('systemtag_object_mapping'); - if (!$table->hasIndex('systag_by_tagid')) { - $output->writeln('Adding systag_by_tagid index to the oc_systemtag_object_mapping table, this can take some time...'); - - $table->addIndex(['systemtagid', 'objecttype'], 'systag_by_tagid'); - $this->connection->migrateToSchema($schema->getWrappedSchema()); - $updated = true; - $output->writeln('oc_systemtag_object_mapping table updated successfully.'); - } - } - - if (!$updated) { - $output->writeln('Done.'); - } - } }