diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/Application.php | 4 | ||||
-rw-r--r-- | core/Command/Db/AddMissingIndices.php | 33 | ||||
-rw-r--r-- | core/Migrations/Version13000Date20170718121200.php | 105 | ||||
-rw-r--r-- | core/Migrations/Version13000Date20170919121250.php | 13 | ||||
-rw-r--r-- | core/Migrations/Version21000Date20201120141228.php | 65 |
5 files changed, 214 insertions, 6 deletions
diff --git a/core/Application.php b/core/Application.php index bda271c41fe..068aa49a84a 100644 --- a/core/Application.php +++ b/core/Application.php @@ -148,6 +148,10 @@ class Application extends App { 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')) { diff --git a/core/Command/Db/AddMissingIndices.php b/core/Command/Db/AddMissingIndices.php index d06f27e8449..49fc16b079a 100644 --- a/core/Command/Db/AddMissingIndices.php +++ b/core/Command/Db/AddMissingIndices.php @@ -200,8 +200,23 @@ class AddMissingIndices extends Command { } $output->writeln('<info>Check indices of the cards table.</info>'); + $cardsUpdated = false; if ($schema->hasTable('cards')) { $table = $schema->getTable('cards'); + + if ($table->hasIndex('addressbookid_uri_index')) { + $output->writeln('<info>Renaming addressbookid_uri_index index to to the cards table, this can take some time...</info>'); + + foreach ($table->getIndexes() as $index) { + if ($index->getColumns() === ['addressbookid', 'uri']) { + $table->renameIndex('addressbookid_uri_index', 'cards_abiduri'); + } + } + + $this->connection->migrateToSchema($schema->getWrappedSchema()); + $cardsUpdated = true; + } + if (!$table->hasIndex('cards_abid')) { $output->writeln('<info>Adding cards_abid index to the cards table, this can take some time...</info>'); @@ -213,6 +228,24 @@ class AddMissingIndices extends Command { $table->addIndex(['addressbookid'], 'cards_abid'); $this->connection->migrateToSchema($schema->getWrappedSchema()); + $cardsUpdated = true; + } + + if (!$table->hasIndex('cards_abiduri')) { + $output->writeln('<info>Adding cards_abiduri index to the cards table, this can take some time...</info>'); + + foreach ($table->getIndexes() as $index) { + if ($index->getColumns() === ['addressbookid', 'uri']) { + $table->dropIndex($index->getName()); + } + } + + $table->addIndex(['addressbookid', 'uri'], 'cards_abiduri'); + $this->connection->migrateToSchema($schema->getWrappedSchema()); + $cardsUpdated = true; + } + + if ($cardsUpdated) { $updated = true; $output->writeln('<info>cards table updated successfully.</info>'); } diff --git a/core/Migrations/Version13000Date20170718121200.php b/core/Migrations/Version13000Date20170718121200.php index 2a47bb52cfc..3acdc3122e3 100644 --- a/core/Migrations/Version13000Date20170718121200.php +++ b/core/Migrations/Version13000Date20170718121200.php @@ -31,11 +31,37 @@ namespace OC\Core\Migrations; use Doctrine\DBAL\Types\Types; use OCP\DB\ISchemaWrapper; +use OCP\IDBConnection; use OCP\Migration\IOutput; use OCP\Migration\SimpleMigrationStep; class Version13000Date20170718121200 extends SimpleMigrationStep { + /** @var IDBConnection */ + private $connection; + + public function __construct(IDBConnection $connection) { + $this->connection = $connection; + } + + public function preSchemaChange(IOutput $output, \Closure $schemaClosure, array $options) { + /** @var ISchemaWrapper $schema */ + $schema = $schemaClosure(); + + if (!$schema->hasTable('properties')) { + return; + } + // in case we have a properties table from oc we drop it since we will only migrate + // the dav_properties values in the postSchemaChange step + $table = $schema->getTable('properties'); + if ($table->hasColumn('fileid')) { + $qb = $this->connection->getQueryBuilder(); + $qb->delete('properties'); + $qb->execute(); + } + } + + /** * @param IOutput $output * @param \Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` @@ -122,6 +148,15 @@ class Version13000Date20170718121200 extends SimpleMigrationStep { $table->addIndex(['root_id'], 'mounts_root_index'); $table->addIndex(['mount_id'], 'mounts_mount_id_index'); $table->addUniqueIndex(['user_id', 'root_id'], 'mounts_user_root_index'); + } else { + $table = $schema->getTable('mounts'); + $table->addColumn('mount_id', Types::BIGINT, [ + 'notnull' => false, + 'length' => 20, + ]); + if (!$table->hasIndex('mounts_mount_id_index')) { + $table->addIndex(['mount_id'], 'mounts_mount_id_index'); + } } if (!$schema->hasTable('mimetypes')) { @@ -321,6 +356,27 @@ class Version13000Date20170718121200 extends SimpleMigrationStep { $table->setPrimaryKey(['id']); $table->addIndex(['userid'], 'property_index'); $table->addIndex(['userid', 'propertypath'], 'properties_path_index'); + } else { + $table = $schema->getTable('properties'); + if ($table->hasColumn('propertytype')) { + $table->dropColumn('propertytype'); + } + if ($table->hasColumn('fileid')) { + $table->dropColumn('fileid'); + } + if (!$table->hasColumn('propertypath')) { + $table->addColumn('propertypath', 'string', [ + 'notnull' => true, + 'length' => 255, + ]); + } + if (!$table->hasColumn('userid')) { + $table->addColumn('userid', 'string', [ + 'notnull' => false, + 'length' => 64, + 'default' => '', + ]); + } } if (!$schema->hasTable('share')) { @@ -416,6 +472,14 @@ class Version13000Date20170718121200 extends SimpleMigrationStep { $table->addIndex(['parent'], 'parent_index'); $table->addIndex(['uid_owner'], 'owner_index'); $table->addIndex(['uid_initiator'], 'initiator_index'); + } else { + $table = $schema->getTable('share'); + if (!$table->hasColumn('password')) { + $table->addColumn('password', 'string', [ + 'notnull' => false, + 'length' => 255, + ]); + } } if (!$schema->hasTable('jobs')) { @@ -506,25 +570,25 @@ class Version13000Date20170718121200 extends SimpleMigrationStep { 'default' => '', ]); $table->addColumn('type', 'smallint', [ - 'notnull' => true, + 'notnull' => false, 'length' => 2, 'default' => 0, 'unsigned' => true, ]); $table->addColumn('remember', 'smallint', [ - 'notnull' => true, + 'notnull' => false, 'length' => 1, 'default' => 0, 'unsigned' => true, ]); $table->addColumn('last_activity', 'integer', [ - 'notnull' => true, + 'notnull' => false, 'length' => 4, 'default' => 0, 'unsigned' => true, ]); $table->addColumn('last_check', 'integer', [ - 'notnull' => true, + 'notnull' => false, 'length' => 4, 'default' => 0, 'unsigned' => true, @@ -535,6 +599,11 @@ class Version13000Date20170718121200 extends SimpleMigrationStep { $table->setPrimaryKey(['id']); $table->addUniqueIndex(['token'], 'authtoken_token_index'); $table->addIndex(['last_activity'], 'authtoken_last_activity_idx'); + } else { + $table = $schema->getTable('authtoken'); + $table->addColumn('scope', 'text', [ + 'notnull' => false, + ]); } if (!$schema->hasTable('bruteforce_attempts')) { @@ -937,4 +1006,32 @@ class Version13000Date20170718121200 extends SimpleMigrationStep { } return $schema; } + + public function postSchemaChange(IOutput $output, \Closure $schemaClosure, array $options) { + /** @var ISchemaWrapper $schema */ + $schema = $schemaClosure(); + if (!$schema->hasTable('dav_properties')) { + return; + } + $query = $this->connection->getQueryBuilder(); + $query->select('*') + ->from('dav_properties'); + + $insert = $this->connection->getQueryBuilder(); + $insert->insert('properties') + ->setValue('propertypath', $insert->createParameter('propertypath')) + ->setValue('propertyname', $insert->createParameter('propertyname')) + ->setValue('propertyvalue', $insert->createParameter('propertyvalue')) + ->setValue('userid', $insert->createParameter('userid')); + + $result = $query->execute(); + while ($row = $result->fetch()) { + preg_match('/(calendar)\/([A-z0-9-@_]+)\//', $row['propertypath'], $match); + $insert->setParameter('propertypath', (string) $row['propertypath']) + ->setParameter('propertyname', (string) $row['propertyname']) + ->setParameter('propertyvalue', (string) $row['propertyvalue']) + ->setParameter('userid', (string) ($match[2] ?? '')); + $insert->execute(); + } + } } diff --git a/core/Migrations/Version13000Date20170919121250.php b/core/Migrations/Version13000Date20170919121250.php index 330a0141eb8..0667ea87339 100644 --- a/core/Migrations/Version13000Date20170919121250.php +++ b/core/Migrations/Version13000Date20170919121250.php @@ -63,8 +63,17 @@ class Version13000Date20170919121250 extends SimpleMigrationStep { $column->setUnsigned(true); $column = $table->getColumn('type'); $column->setUnsigned(true); - $column = $table->getColumn('remember'); - $column->setUnsigned(true); + if ($table->hasColumn('remember')) { + $column = $table->getColumn('remember'); + $column->setUnsigned(true); + } else { + $table->addColumn('remember', 'smallint', [ + 'notnull' => false, + 'length' => 1, + 'default' => 0, + 'unsigned' => true, + ]); + } $column = $table->getColumn('last_activity'); $column->setUnsigned(true); $column = $table->getColumn('last_check'); diff --git a/core/Migrations/Version21000Date20201120141228.php b/core/Migrations/Version21000Date20201120141228.php new file mode 100644 index 00000000000..844679b8d95 --- /dev/null +++ b/core/Migrations/Version21000Date20201120141228.php @@ -0,0 +1,65 @@ +<?php + +declare(strict_types=1); + +namespace OC\Core\Migrations; + +use Closure; +use OCP\DB\ISchemaWrapper; +use OCP\Migration\IOutput; +use OCP\Migration\SimpleMigrationStep; + +class Version21000Date20201120141228 extends SimpleMigrationStep { + public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { + /** @var ISchemaWrapper $schema */ + $schema = $schemaClosure(); + + if ($schema->hasTable('authtoken')) { + $table = $schema->getTable('authtoken'); + $loginNameColumn = $table->getColumn('login_name'); + if ($loginNameColumn->getLength() !== 255) { + $loginNameColumn->setLength(255); + } + $table->changeColumn('type', [ + 'notnull' => false, + ]); + $table->changeColumn('remember', [ + 'notnull' => false, + ]); + $table->changeColumn('last_activity', [ + 'notnull' => false, + ]); + $table->changeColumn('last_check', [ + 'notnull' => false, + ]); + } + + if ($schema->hasTable('dav_job_status')) { + $schema->dropTable('dav_job_status'); + } + + if ($schema->hasTable('systemtag')) { + $table = $schema->getTable('systemtag'); + if ($table->hasColumn('systemtag')) { + $table->dropColumn('assignable'); + } + } + + if ($schema->hasTable('share')) { + $table = $schema->getTable('share'); + if ($table->hasColumn('attributes')) { + $table->dropColumn('attributes'); + } + } + + if ($schema->hasTable('jobs')) { + $table = $schema->getTable('jobs'); + $table->changeColumn('execution_duration', [ + 'notnull' => false, + 'default' => 0, + ]); + } + + return $schema; + } +} |