From 0d6fc1841c85249796511028a197cd228e0c69b5 Mon Sep 17 00:00:00 2001 From: Maxence Lange Date: Fri, 18 Mar 2022 11:32:03 -0100 Subject: [PATCH] primaryKey on circles_membership Signed-off-by: Maxence Lange --- .../Version0023Date20211216113101.php | 1 - .../Version0024Date20220203123901.php | 5 +- .../Version0024Date20220203123902.php | 57 ++++++++------- .../Version0024Date20220317190331.php | 70 +++++++++++++++++++ 4 files changed, 100 insertions(+), 33 deletions(-) create mode 100644 lib/Migration/Version0024Date20220317190331.php diff --git a/lib/Migration/Version0023Date20211216113101.php b/lib/Migration/Version0023Date20211216113101.php index 8318f3481..08de3b3c7 100644 --- a/lib/Migration/Version0023Date20211216113101.php +++ b/lib/Migration/Version0023Date20211216113101.php @@ -47,5 +47,4 @@ class Version0023Date20211216113101 extends SimpleMigrationStep { */ public function __construct(IDBConnection $connection) { } - } diff --git a/lib/Migration/Version0024Date20220203123901.php b/lib/Migration/Version0024Date20220203123901.php index e52d36b06..8ee892e8a 100644 --- a/lib/Migration/Version0024Date20220203123901.php +++ b/lib/Migration/Version0024Date20220203123901.php @@ -69,8 +69,8 @@ public function changeSchema(IOutput $output, Closure $schemaClosure, array $opt $table = $schema->getTable('circles_token'); $table->changeColumn( 'password', [ - 'length' => 127 - ] + 'length' => 127 + ] ); } @@ -105,5 +105,4 @@ public function changeSchema(IOutput $output, Closure $schemaClosure, array $opt return $schema; } - } diff --git a/lib/Migration/Version0024Date20220203123902.php b/lib/Migration/Version0024Date20220203123902.php index ee3fa5cf5..38e100470 100644 --- a/lib/Migration/Version0024Date20220203123902.php +++ b/lib/Migration/Version0024Date20220203123902.php @@ -64,61 +64,61 @@ public function changeSchema(IOutput $output, Closure $schemaClosure, array $opt $table = $schema->createTable('circles_event'); $table->addColumn( 'token', 'string', [ - 'notnull' => false, - 'length' => 63, - ] + 'notnull' => false, + 'length' => 63, + ] ); $table->addColumn( 'event', 'text', [ - 'notnull' => false - ] + 'notnull' => false + ] ); $table->addColumn( 'result', 'text', [ - 'notnull' => false - ] + 'notnull' => false + ] ); $table->addColumn( 'instance', 'string', [ - 'length' => 255, - 'notnull' => false - ] + 'length' => 255, + 'notnull' => false + ] ); $table->addColumn( 'interface', 'integer', [ - 'notnull' => true, - 'length' => 1, - 'default' => 0 - ] + 'notnull' => true, + 'length' => 1, + 'default' => 0 + ] ); $table->addColumn( 'severity', 'integer', [ - 'length' => 3, - 'notnull' => false - ] + 'length' => 3, + 'notnull' => false + ] ); $table->addColumn( 'retry', 'integer', [ - 'length' => 3, - 'notnull' => false - ] + 'length' => 3, + 'notnull' => false + ] ); $table->addColumn( 'status', 'integer', [ - 'length' => 3, - 'notnull' => false - ] + 'length' => 3, + 'notnull' => false + ] ); $table->addColumn( 'updated', 'datetime', [ - 'notnull' => false, - ] + 'notnull' => false, + ] ); $table->addColumn( 'creation', 'bigint', [ - 'length' => 14, - 'notnull' => false - ] + 'length' => 14, + 'notnull' => false + ] ); $table->setPrimaryKey(['token', 'instance']); @@ -126,5 +126,4 @@ public function changeSchema(IOutput $output, Closure $schemaClosure, array $opt return $schema; } - } diff --git a/lib/Migration/Version0024Date20220317190331.php b/lib/Migration/Version0024Date20220317190331.php new file mode 100644 index 000000000..0590a689f --- /dev/null +++ b/lib/Migration/Version0024Date20220317190331.php @@ -0,0 +1,70 @@ + + * @copyright 2022 + * @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 . + * + */ + + +namespace OCA\Circles\Migration; + +use Closure; +use Doctrine\DBAL\Schema\SchemaException; +use OCP\DB\ISchemaWrapper; +use OCP\Migration\IOutput; +use OCP\Migration\SimpleMigrationStep; + +class Version0024Date20220317190331 extends SimpleMigrationStep { + + /** + * @param IOutput $output + * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` + * @param array $options + * + * @return null|ISchemaWrapper + * @throws SchemaException + */ + public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { + /** @var ISchemaWrapper $schema */ + $schema = $schemaClosure(); + + if ($schema->hasTable('circles_membership')) { + $table = $schema->getTable('circles_membership'); + if (!$table->hasPrimaryKey()) { + $indexes = $table->getIndexes(); + // conflict in Oracle with existing unique index, duplicate of primaryKey. + foreach ($indexes as $index) { + if ($index->isUnique()) { + $table->dropIndex($index->getName()); + } + } + $table->setPrimaryKey(['single_id', 'circle_id']); + } + } + + return $schema; + } +}