]> source.dussan.org Git - nextcloud-server.git/commitdiff
fix(systemtags): Add missing systemtags index
authorMarcel Klehr <mklehr@gmx.net>
Wed, 21 Jun 2023 13:10:06 +0000 (15:10 +0200)
committerMarcel Klehr <mklehr@gmx.net>
Wed, 21 Jun 2023 13:20:30 +0000 (15:20 +0200)
Signed-off-by: Marcel Klehr <mklehr@gmx.net>
core/Application.php
core/Command/Db/AddMissingIndices.php
core/Migrations/Version28000Date20230621185127.php [new file with mode: 0644]

index 2e35461015472005513f6c73a788da716b114b9c..592e092966681e0068e78f26c6be034c32120a23 100644 (file)
@@ -243,6 +243,13 @@ class Application extends App {
                                                $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');
+                                       }
+                               }
                        }
                );
 
index 4f8e0c45a35ab0311e34d6d4413dfed579989410..6210986791350756bfc4b1cbde4b47250c6f29f4 100644 (file)
@@ -472,6 +472,19 @@ class AddMissingIndices extends Command {
                        }
                }
 
+               $output->writeln('<info>Check indices of the oc_systemtag_object_mapping table.</info>');
+               if ($schema->hasTable('oc_systemtag_object_mapping')) {
+                       $table = $schema->getTable('oc_systemtag_object_mapping');
+                       if (!$table->hasIndex('systag_by_tagid')) {
+                               $output->writeln('<info>Adding systag_by_tagid index to the oc_systemtag_object_mapping table, this can take some time...</info>');
+
+                               $table->addIndex(['systemtagid', 'objecttype'], 'systag_by_tagid');
+                               $this->connection->migrateToSchema($schema->getWrappedSchema());
+                               $updated = true;
+                               $output->writeln('<info>oc_systemtag_object_mapping table updated successfully.</info>');
+                       }
+               }
+
                if (!$updated) {
                        $output->writeln('<info>Done.</info>');
                }
diff --git a/core/Migrations/Version28000Date20230621185127.php b/core/Migrations/Version28000Date20230621185127.php
new file mode 100644 (file)
index 0000000..eb656bb
--- /dev/null
@@ -0,0 +1,52 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright Copyright (c) 2023 Marcel Klehr <mklehr@gmx.net>
+ *
+ * @author Marcel Klehr <mklehr@gmx.net>
+ *
+ * @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\Core\Migrations;
+
+use Closure;
+use OCP\DB\ISchemaWrapper;
+use OCP\Migration\IOutput;
+use OCP\Migration\SimpleMigrationStep;
+
+class Version28000Date20230621185127 extends SimpleMigrationStep {
+       /**
+        * @param IOutput $output
+        * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
+        * @param array $options
+        * @return null|ISchemaWrapper
+        */
+       public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper {
+               /** @var ISchemaWrapper $schema */
+               $schema = $schemaClosure();
+
+               $table = $schema->getTable('systemtag_object_mapping');
+               if (!$table->hasIndex('systag_by_tagid')) {
+                       $table->addIndex(['systemtagid', 'objecttype'], 'systag_by_tagid');
+                       return $schema;
+               }
+
+               return null;
+       }
+}