PluginProbe
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler / 1.6.5
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler v1.6.5
1.6.5 1.6.4 1.6.3 1.6.2 1.6.1 1.6.0 1.5.4 1.5.5 1.5.3 1.5.2 1.5.1 1.5.0 1.4.2 1.4.1 1.4.0 1.3.28 1.3.27 1.3.26 1.3.25 1.3.23 1.3.22 1.3.21 1.3.20 1.3.19 trunk All 48 releases
← All changes | database/DBMigrator.php +43 -0 1.6.0 → 1.6.5 View file →
@@ -135,8 +135,10 @@
135 135 }
136 136
137 137 public static function maybeMigrateDBChanges()
138 138 {
139 + self::maybeMigrateCustomerRecoveryIndexes();
140 +
139 141 /*
140 142 * TODO We will remove this after final release
141 143 */
142 144 $currentDBVersion = get_option('_fluent_cart_db_version');
@@ -177,8 +179,11 @@
177 179
178 180 // 2026-07-24
179 181 OrdersMigrator::addUuidIndex();
180 182
183 + // 2026-08-20
184 + ProductMetaMigrator::addObjectMetaIndex();
185 +
181 186 // let's check the orders table sequence number
182 187 global $wpdb;
183 188
184 189 // Product Meta unique index removal
@@ -480,9 +485,15 @@
480 485 \FluentCart\Database\Migrations\ShippingZonesMigrator::migrated();
481 486 \FluentCart\Database\Migrations\ShippingClassesMigrator::migrated();
482 487 \FluentCart\Database\Migrations\SubscriptionsMigrator::migrated();
483 488
489 + // 2026-08-06
490 + // fct_order_transactions subscription_id index — also run here so
491 + // in-place plugin updates deliver it; migrate() only covers the
492 + // activation path.
493 + \FluentCart\Database\Migrations\OrderTransactionsMigrator::migrated();
484 494
495 +
485 496 // 2026-05-06
486 497 // Backfill, dedup, then add unique index — must run in this order
487 498 // so the constraint can be applied without "Duplicate entry" errors.
488 499 TaxClassesMigrator::backfillNullSlugs();
@@ -586,8 +597,40 @@
586 597 AttributeObjectRelationsMigrator::migrate();
587 598 AttributeTermsMigrator::migrate();
588 599 AttributeSeeder::seed();
589 600
601 + self::releaseMigrationLock();
602 + }
603 + }
604 +
605 + /** Upgrade active stores without running index DDL on customer requests. */
606 + public static function maybeMigrateCustomerRecoveryIndexes(): void
607 + {
608 + $option = '_fluent_cart_customer_recovery_indexes_version';
609 + if (get_option($option) === '1') {
610 + return;
611 + }
612 + if (!(defined('WP_CLI') && WP_CLI) && (!is_admin() || !current_user_can('manage_options'))) {
613 + return;
614 + }
615 + if (!self::acquireMigrationLock()) {
616 + return;
617 + }
618 + try {
619 + if (get_option($option) === '1') {
620 + return;
621 + }
622 + foreach ([SubscriptionsMigrator::class, OrderDownloadPermissionsMigrator::class, CartMigrator::class] as $migrator) {
623 + if (!Schema::hasTable($migrator::$tableName)) {
624 + return;
625 + }
626 + $migrator::addCustomerRecoveryIndex();
627 + if (!$migrator::hasCustomerRecoveryIndex()) {
628 + return; // Keep the upgrade pending if ALTER failed.
629 + }
630 + }
631 + update_option($option, '1', false);
632 + } finally {
590 633 self::releaseMigrationLock();
591 634 }
592 635 }
593 636