From 35c840ca343351f5fd38a82e3191ba7a7069d288 Mon Sep 17 00:00:00 2001 From: Touhidur Rahman Date: Thu, 1 Aug 2024 16:37:13 +0600 Subject: [PATCH] pkp/pkp-lib#9892 fixed column types and added float to decimal change migration --- .../migration/install/JournalsMigration.php | 2 +- .../migration/install/MetricsMigration.php | 30 +++++------ classes/migration/install/OJSMigration.php | 48 ++++++++--------- .../v3_4_0/I7901_Duplicate_OAI_IDs.php | 15 +++--- .../v3_4_0/I9231_FixMetricsIndexes.php | 30 +++++------ .../I9892_FloatToDecimalColumnTypeUpdate.php | 51 +++++++++++++++++++ dbscripts/xml/upgrade.xml | 1 + 7 files changed, 104 insertions(+), 73 deletions(-) create mode 100644 classes/migration/upgrade/v3_5_0/I9892_FloatToDecimalColumnTypeUpdate.php diff --git a/classes/migration/install/JournalsMigration.php b/classes/migration/install/JournalsMigration.php index a39e242b15c..e0bc39cb536 100644 --- a/classes/migration/install/JournalsMigration.php +++ b/classes/migration/install/JournalsMigration.php @@ -29,7 +29,7 @@ public function up(): void $table->comment('A list of all journals in the installation of OJS.'); $table->bigInteger('journal_id')->autoIncrement(); $table->string('path', 32); - $table->float('seq', 53)->default(0)->comment('Used to order lists of journals'); + $table->float('seq')->default(0)->comment('Used to order lists of journals'); $table->string('primary_locale', 28); $table->smallInteger('enabled')->default(1)->comment('Controls whether or not the journal is considered "live" and will appear on the website. (Note that disabled journals may still be accessible, but only if the user knows the URL.)'); $table->unique(['path'], 'journals_path'); diff --git a/classes/migration/install/MetricsMigration.php b/classes/migration/install/MetricsMigration.php index 86e798dd469..d214809e6c8 100644 --- a/classes/migration/install/MetricsMigration.php +++ b/classes/migration/install/MetricsMigration.php @@ -219,17 +219,14 @@ public function up(): void $table->integer('metric_unique'); $table->index(['context_id', 'submission_id'], 'msgd_context_id_submission_id'); - switch (DB::getDriverName()) { - case 'mysql': - case 'mariadb': + match (DB::getDriverName()) { + 'mysql', 'mariadb' => // See "Create a database table" here: https://db-ip.com/db/format/ip-to-city-lite/csv.html // where city is defined as varchar(80) - $table->unique([DB::raw('load_id, context_id, submission_id, country, region, city(80), date')], 'msgd_uc_load_context_submission_c_r_c_date'); - break; - case 'pgsql': - $table->unique(['load_id', 'context_id', 'submission_id', 'country', 'region', 'city', 'date'], 'msgd_uc_load_context_submission_c_r_c_date'); - break; - } + $table->unique([DB::raw('load_id, context_id, submission_id, country, region, city(80), date')], 'msgd_uc_load_context_submission_c_r_c_date'), + 'pgsql' => + $table->unique(['load_id', 'context_id', 'submission_id', 'country', 'region', 'city', 'date'], 'msgd_uc_load_context_submission_c_r_c_date') + }; }); Schema::create('metrics_submission_geo_monthly', function (Blueprint $table) { @@ -252,17 +249,14 @@ public function up(): void $table->integer('metric_unique'); $table->index(['context_id', 'submission_id'], 'msgm_context_id_submission_id'); - switch (DB::getDriverName()) { - case 'mysql': - case 'mariadb': + match (DB::getDriverName()) { + 'mysql', 'mariadb' => // See "Create a database table" here: https://db-ip.com/db/format/ip-to-city-lite/csv.html // where city is defined as varchar(80) - $table->unique([DB::raw('context_id, submission_id, country, region, city(80), month')], 'msgm_uc_context_submission_c_r_c_month'); - break; - case 'pgsql': - $table->unique(['context_id', 'submission_id', 'country', 'region', 'city', 'month'], 'msgm_uc_context_submission_c_r_c_month'); - break; - } + $table->unique([DB::raw('context_id, submission_id, country, region, city(80), month')], 'msgm_uc_context_submission_c_r_c_month'), + 'pgsql' => + $table->unique(['context_id', 'submission_id', 'country', 'region', 'city', 'month'], 'msgm_uc_context_submission_c_r_c_month') + }; }); // Usage stats total item temporary records diff --git a/classes/migration/install/OJSMigration.php b/classes/migration/install/OJSMigration.php index 0c3ed7785ae..329c85aea1f 100644 --- a/classes/migration/install/OJSMigration.php +++ b/classes/migration/install/OJSMigration.php @@ -38,7 +38,7 @@ public function up(): void $table->foreign('review_form_id', 'sections_review_form_id')->references('review_form_id')->on('review_forms')->onDelete('set null'); $table->index(['review_form_id'], 'sections_review_form_id'); - $table->float('seq', 53)->default(0); + $table->float('seq')->default(0); $table->smallInteger('editor_restricted')->default(0); $table->smallInteger('meta_indexed')->default(0); $table->smallInteger('meta_reviewed')->default(1); @@ -114,15 +114,12 @@ public function up(): void $table->unique(['issue_id', 'locale', 'setting_name'], 'issue_settings_unique'); }); // Add partial index (DBMS-specific) - switch (DB::getDriverName()) { - case 'mysql': - case 'mariadb': - DB::unprepared('CREATE INDEX issue_settings_name_value ON issue_settings (setting_name(50), setting_value(150))'); - break; - case 'pgsql': - DB::unprepared("CREATE INDEX issue_settings_name_value ON issue_settings (setting_name, setting_value) WHERE setting_name IN ('medra::registeredDoi', 'datacite::registeredDoi')"); - break; - } + match (DB::getDriverName()) { + 'mysql', 'mariadb' => + DB::unprepared('CREATE INDEX issue_settings_name_value ON issue_settings (setting_name(50), setting_value(150))'), + 'pgsql' => + DB::unprepared("CREATE INDEX issue_settings_name_value ON issue_settings (setting_name, setting_value) WHERE setting_name IN ('medra::registeredDoi', 'datacite::registeredDoi')") + }; Schema::create('issue_files', function (Blueprint $table) { $table->comment('Relationships between issues and issue files, such as cover images.'); @@ -157,7 +154,7 @@ public function up(): void $table->index(['file_id'], 'issue_galleys_file_id'); $table->string('label', 255)->nullable(); - $table->float('seq', 53)->default(0); + $table->float('seq')->default(0); $table->string('url_path', 64)->nullable(); $table->index(['url_path'], 'issue_galleys_url_path'); @@ -192,7 +189,7 @@ public function up(): void $table->foreign('journal_id', 'custom_issue_orders_journal_id')->references('journal_id')->on('journals')->onDelete('cascade'); $table->index(['journal_id'], 'custom_issue_orders_journal_id'); - $table->float('seq', 53)->default(0); + $table->float('seq')->default(0); $table->unique(['issue_id'], 'custom_issue_orders_unique'); }); @@ -209,7 +206,7 @@ public function up(): void $table->foreign('section_id', 'custom_section_orders_section_id')->references('section_id')->on('sections')->onDelete('cascade'); $table->index(['section_id'], 'custom_section_orders_section_id'); - $table->float('seq', 53)->default(0); + $table->float('seq')->default(0); $table->unique(['issue_id', 'section_id'], 'custom_section_orders_unique'); }); @@ -231,7 +228,7 @@ public function up(): void $table->foreign('section_id', 'publications_section_id')->references('section_id')->on('sections')->onDelete('set null'); $table->index(['section_id'], 'publications_section_id'); - $table->float('seq', 53)->default(0); + $table->float('seq')->default(0); $table->bigInteger('submission_id'); $table->foreign('submission_id', 'publications_submission_id')->references('submission_id')->on('submissions')->onDelete('cascade'); @@ -277,7 +274,7 @@ public function up(): void $table->foreign('submission_file_id')->references('submission_file_id')->on('submission_files'); $table->index(['submission_file_id'], 'publication_galleys_submission_file_id'); - $table->float('seq', 53)->default(0); + $table->float('seq')->default(0); $table->string('remote_url', 2047)->nullable(); $table->smallInteger('is_approved')->default(0); $table->string('url_path', 64)->nullable(); @@ -305,15 +302,12 @@ public function up(): void $table->unique(['galley_id', 'locale', 'setting_name'], 'publication_galley_settings_unique'); }); // Add partial index (DBMS-specific) - switch (DB::getDriverName()) { - case 'mysql': - case 'mariadb': - DB::unprepared('CREATE INDEX publication_galley_settings_name_value ON publication_galley_settings (setting_name(50), setting_value(150))'); - break; - case 'pgsql': - DB::unprepared('CREATE INDEX publication_galley_settings_name_value ON publication_galley_settings (setting_name, setting_value)'); - break; - } + match (DB::getDriverName()) { + 'mysql', 'mariadb' => + DB::unprepared('CREATE INDEX publication_galley_settings_name_value ON publication_galley_settings (setting_name(50), setting_value(150))'), + 'pgsql' => + DB::unprepared('CREATE INDEX publication_galley_settings_name_value ON publication_galley_settings (setting_name, setting_value)') + }; // Subscription types. Schema::create('subscription_types', function (Blueprint $table) { @@ -324,14 +318,14 @@ public function up(): void $table->foreign('journal_id', 'subscription_types_journal_id')->references('journal_id')->on('journals')->onDelete('cascade'); $table->index(['journal_id'], 'subscription_types_journal_id'); - $table->float('cost', 53); + $table->decimal('cost', 8, 2)->unsigned(); $table->string('currency_code_alpha', 3); $table->smallInteger('duration')->nullable(); $table->smallInteger('format'); $table->smallInteger('institutional')->default(0); $table->smallInteger('membership')->default(0); $table->smallInteger('disable_public_display'); - $table->float('seq', 53); + $table->float('seq'); }); // Locale-specific subscription type data @@ -421,7 +415,7 @@ public function up(): void $table->index(['user_id'], 'completed_payments_user_id'); $table->bigInteger('assoc_id')->nullable(); - $table->float('amount', 53); + $table->decimal('amount', 8, 2)->unsigned(); $table->string('currency_code_alpha', 3)->nullable(); $table->string('payment_method_plugin_name', 80)->nullable(); }); diff --git a/classes/migration/upgrade/v3_4_0/I7901_Duplicate_OAI_IDs.php b/classes/migration/upgrade/v3_4_0/I7901_Duplicate_OAI_IDs.php index 92024e29575..ebb5537ba42 100644 --- a/classes/migration/upgrade/v3_4_0/I7901_Duplicate_OAI_IDs.php +++ b/classes/migration/upgrade/v3_4_0/I7901_Duplicate_OAI_IDs.php @@ -21,9 +21,8 @@ class I7901_Duplicate_OAI_IDs extends \PKP\migration\Migration */ public function up(): void { - switch (DB::getDriverName()) { - case 'mysql': - case 'mariadb': + match (DB::getDriverName()) { + 'mysql', 'mariadb' => DB::unprepared( "DELETE dot FROM data_object_tombstones dot @@ -33,9 +32,8 @@ public function up(): void JOIN publication_settings psissue ON (psissue.publication_id = p.publication_id AND psissue.setting_name='issueId' AND psissue.locale='') JOIN issues i ON (CAST(i.issue_id AS CHAR(20)) = psissue.setting_value) WHERE i.published = 1 AND j.enabled = 1 AND p.status = 3" - ); - break; - case 'pgsql': + ), + 'pgsql' => DB::unprepared( "DELETE FROM data_object_tombstones dot USING submissions s, journals j, publications p, publication_settings psissue, issues i @@ -45,9 +43,8 @@ public function up(): void AND psissue.publication_id = p.publication_id AND psissue.setting_name='issueId' AND psissue.locale='' AND (CAST(i.issue_id AS CHAR(20)) = psissue.setting_value) AND i.published = 1 AND j.enabled = 1 AND p.status = 3" - ); - break; - } + ) + }; } /** diff --git a/classes/migration/upgrade/v3_4_0/I9231_FixMetricsIndexes.php b/classes/migration/upgrade/v3_4_0/I9231_FixMetricsIndexes.php index 1f783d7931b..f8fbbc2e980 100644 --- a/classes/migration/upgrade/v3_4_0/I9231_FixMetricsIndexes.php +++ b/classes/migration/upgrade/v3_4_0/I9231_FixMetricsIndexes.php @@ -52,27 +52,21 @@ public function up(): void // and create new ones using city column prefix for MySQL Schema::table('metrics_submission_geo_daily', function (Blueprint $table) { $table->dropUnique('msgd_uc_load_context_submission_c_r_c_date'); - switch (DB::getDriverName()) { - case 'mysql': - case 'mariadb': - $table->unique([DB::raw('load_id, context_id, submission_id, country, region, city(80), date')], 'msgd_uc_load_context_submission_c_r_c_date'); - break; - case 'pgsql': - $table->unique(['load_id', 'context_id', 'submission_id', 'country', 'region', 'city', 'date'], 'msgd_uc_load_context_submission_c_r_c_date'); - break; - } + match (DB::getDriverName()) { + 'mysql', 'mariadb' => + $table->unique([DB::raw('load_id, context_id, submission_id, country, region, city(80), date')], 'msgd_uc_load_context_submission_c_r_c_date'), + 'pgsql' => + $table->unique(['load_id', 'context_id', 'submission_id', 'country', 'region', 'city', 'date'], 'msgd_uc_load_context_submission_c_r_c_date'), + }; }); Schema::table('metrics_submission_geo_monthly', function (Blueprint $table) { $table->dropUnique('msgm_uc_context_submission_c_r_c_month'); - switch (DB::getDriverName()) { - case 'mysql': - case 'mariadb': - $table->unique([DB::raw('context_id, submission_id, country, region, city(80), month')], 'msgm_uc_context_submission_c_r_c_month'); - break; - case 'pgsql': - $table->unique(['context_id', 'submission_id', 'country', 'region', 'city', 'month'], 'msgm_uc_context_submission_c_r_c_month'); - break; - } + match (DB::getDriverName()) { + 'mysql', 'mariadb' => + $table->unique([DB::raw('context_id, submission_id, country, region, city(80), month')], 'msgm_uc_context_submission_c_r_c_month'), + 'pgsql' => + $table->unique(['context_id', 'submission_id', 'country', 'region', 'city', 'month'], 'msgm_uc_context_submission_c_r_c_month'), + }; }); } diff --git a/classes/migration/upgrade/v3_5_0/I9892_FloatToDecimalColumnTypeUpdate.php b/classes/migration/upgrade/v3_5_0/I9892_FloatToDecimalColumnTypeUpdate.php new file mode 100644 index 00000000000..521ad3ff738 --- /dev/null +++ b/classes/migration/upgrade/v3_5_0/I9892_FloatToDecimalColumnTypeUpdate.php @@ -0,0 +1,51 @@ +decimal('cost', 8, 2)->unsigned()->change(); + }); + + Schema::table('completed_payments', function (Blueprint $table) { + $table->decimal('amount', 8, 2)->unsigned()->change(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('subscription_types', function (Blueprint $table) { + $table->double('cost')->change(); + }); + + Schema::table('completed_payments', function (Blueprint $table) { + $table->double('amount')->change(); + }); + } +} diff --git a/dbscripts/xml/upgrade.xml b/dbscripts/xml/upgrade.xml index 2f925e9d549..6cb8bcdf44f 100644 --- a/dbscripts/xml/upgrade.xml +++ b/dbscripts/xml/upgrade.xml @@ -128,6 +128,7 @@ +