diff options
author | Maxence Lange <maxence@artificial-owl.com> | 2024-01-26 09:53:34 -0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-26 09:53:34 -0100 |
commit | 08ec513f2956c1beb49cf12385e945ec5e46eaea (patch) | |
tree | b92811627a18118869ae342ff96f09c0d7a28d07 /core | |
parent | 05fea4550b68e7b72416f02ef50b542459e5d3ca (diff) | |
parent | a845e0f73addd5cb7837ed1362b42ccf43ccc89c (diff) | |
download | nextcloud-server-08ec513f2956c1beb49cf12385e945ec5e46eaea.tar.gz nextcloud-server-08ec513f2956c1beb49cf12385e945ec5e46eaea.zip |
Merge pull request #42903 from nextcloud/enh/noid/improve-index-on-appconfig
improve index on appconfig
Diffstat (limited to 'core')
-rw-r--r-- | core/Migrations/Version28000Date20231126110901.php | 68 | ||||
-rw-r--r-- | core/Migrations/Version29000Date20231126110901.php | 39 | ||||
-rw-r--r-- | core/Migrations/Version29000Date20240124132201.php | 75 | ||||
-rw-r--r-- | core/Migrations/Version29000Date20240124132202.php | 53 |
4 files changed, 219 insertions, 16 deletions
diff --git a/core/Migrations/Version28000Date20231126110901.php b/core/Migrations/Version28000Date20231126110901.php new file mode 100644 index 00000000000..ec1e80d24ba --- /dev/null +++ b/core/Migrations/Version28000Date20231126110901.php @@ -0,0 +1,68 @@ +<?php + +declare(strict_types=1); +/** + * @copyright 2023 Maxence Lange <maxence@artificial-owl.com> + * + * @author Maxence Lange <maxence@artificial-owl.com> + * + * @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; + +/** + * Create new fields for type and lazy loading in appconfig for the new IAppConfig API. + */ +class Version28000Date20231126110901 extends SimpleMigrationStep { + public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { + return null; + + /** + * this migration was needed during Nextcloud 28 to prep the migration to 29 and a + * new IAppConfig as its API require 'lazy' and 'type' database field. + * + * some changes in the migration process and the expected result have made its execution + * useless, therefore ignored. + * + * @see Version29000Date20240124132201 + * @see Version29000Date20240124132202 + */ + // /** @var ISchemaWrapper $schema */ + // $schema = $schemaClosure(); + // + // if (!$schema->hasTable('appconfig')) { + // return null; + // } + // + // $table = $schema->getTable('appconfig'); + // if ($table->hasColumn('lazy')) { + // return null; + // } + // + // // type=2 means value is typed as MIXED + // $table->addColumn('type', Types::INTEGER, ['notnull' => true, 'default' => 2]); + // $table->addColumn('lazy', Types::BOOLEAN, ['notnull' => false, 'default' => false]); + // + // return $schema; + } +} diff --git a/core/Migrations/Version29000Date20231126110901.php b/core/Migrations/Version29000Date20231126110901.php index 3867074e013..cbbac6b7777 100644 --- a/core/Migrations/Version29000Date20231126110901.php +++ b/core/Migrations/Version29000Date20231126110901.php @@ -39,27 +39,34 @@ class Version29000Date20231126110901 extends SimpleMigrationStep { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); - if (!$schema->hasTable('appconfig')) { - return null; - } - $table = $schema->getTable('appconfig'); if ($table->hasColumn('lazy')) { return null; } - // type=2 means value is typed as MIXED - $table->addColumn('type', Types::INTEGER, ['notnull' => true, 'default' => 2]); - $table->addColumn('lazy', Types::BOOLEAN, ['notnull' => false, 'default' => false]); - - if ($table->hasIndex('appconfig_config_key_index')) { - $table->dropIndex('appconfig_config_key_index'); - } - - $table->addIndex(['lazy'], 'ac_lazy_i'); - $table->addIndex(['appid', 'lazy'], 'ac_app_lazy_i'); - $table->addIndex(['appid', 'lazy', 'configkey'], 'ac_app_lazy_key_i'); + /** + * This code is now useless, after a discussion about boolean on oracle; + * it has been decided to use another type for the lazy field + * + * a better migration process is available there: + * + * @see Version29000Date20240124132201 for the revert of current migration + * @see Version29000Date20240124132202 for the new migration process + */ + return null; - return $schema; + // // type=2 means value is typed as MIXED + // $table->addColumn('type', Types::INTEGER, ['notnull' => true, 'default' => 2]); + // $table->addColumn('lazy', Types::BOOLEAN, ['notnull' => false, 'default' => false]); + // + // if ($table->hasIndex('appconfig_config_key_index')) { + // $table->dropIndex('appconfig_config_key_index'); + // } + // + // $table->addIndex(['lazy'], 'ac_lazy_i'); + // $table->addIndex(['appid', 'lazy'], 'ac_app_lazy_i'); + // $table->addIndex(['appid', 'lazy', 'configkey'], 'ac_app_lazy_key_i'); + // + // return $schema; } } diff --git a/core/Migrations/Version29000Date20240124132201.php b/core/Migrations/Version29000Date20240124132201.php new file mode 100644 index 00000000000..dd287da1f89 --- /dev/null +++ b/core/Migrations/Version29000Date20240124132201.php @@ -0,0 +1,75 @@ +<?php + +declare(strict_types=1); +/** + * @copyright 2023 Maxence Lange <maxence@artificial-owl.com> + * + * @author Maxence Lange <maxence@artificial-owl.com> + * + * @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\DB\Types; +use OCP\Migration\IOutput; +use OCP\Migration\SimpleMigrationStep; + +/** + * Create new column for type and remove previous lazy column in appconfig (will be recreated by Version29000Date20240124132202) for the new IAppConfig API. + */ +class Version29000Date20240124132201 extends SimpleMigrationStep { + public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { + /** @var ISchemaWrapper $schema */ + $schema = $schemaClosure(); + + $table = $schema->getTable('appconfig'); + + // we will drop 'lazy', we start to clean related indexes first + if ($table->hasIndex('ac_lazy_i')) { + $table->dropIndex('ac_lazy_i'); + } + + if ($table->hasIndex('ac_app_lazy_i')) { + $table->dropIndex('ac_app_lazy_i'); + } + + if ($table->hasIndex('ac_app_lazy_key_i')) { + $table->dropIndex('ac_app_lazy_key_i'); + } + + if ($table->hasColumn('lazy')) { + $table->dropColumn('lazy'); + } + + // create field 'type' if it does not exist yet, or fix the fact that it is missing 'unsigned' + if (!$table->hasColumn('type')) { + $table->addColumn('type', Types::INTEGER, ['notnull' => true, 'default' => 2, 'unsigned' => true]); + } else { + $table->modifyColumn('type', ['notnull' => true, 'default' => 2, 'unsigned' => true]); + } + + // not needed anymore + if ($table->hasIndex('appconfig_config_key_index')) { + $table->dropIndex('appconfig_config_key_index'); + } + + return $schema; + } +} diff --git a/core/Migrations/Version29000Date20240124132202.php b/core/Migrations/Version29000Date20240124132202.php new file mode 100644 index 00000000000..cca0d6a5a71 --- /dev/null +++ b/core/Migrations/Version29000Date20240124132202.php @@ -0,0 +1,53 @@ +<?php + +declare(strict_types=1); +/** + * @copyright 2023 Maxence Lange <maxence@artificial-owl.com> + * + * @author Maxence Lange <maxence@artificial-owl.com> + * + * @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\DB\Types; +use OCP\Migration\IOutput; +use OCP\Migration\SimpleMigrationStep; + +/** + * Create new column and index for lazy loading in appconfig for the new IAppConfig API. + */ +class Version29000Date20240124132202 extends SimpleMigrationStep { + public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { + /** @var ISchemaWrapper $schema */ + $schema = $schemaClosure(); + + $table = $schema->getTable('appconfig'); + $table->addColumn('lazy', Types::SMALLINT, ['notnull' => true, 'default' => 0, 'length' => 1, 'unsigned' => true]); + + /** + * we only need an index on lazy, the group 'appid'+'configkey' already + * exists as primary ({@see Version13000Date20170718121200}) + */ + $table->addIndex(['lazy'], 'ac_lazy_i'); + + return $schema; + } +} |