| @@ -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 |
| @@ -592,8 +597,40 @@ | ||
| 592 | 597 | AttributeObjectRelationsMigrator::migrate(); |
| 593 | 598 | AttributeTermsMigrator::migrate(); |
| 594 | 599 | AttributeSeeder::seed(); |
| 595 | 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 { | |
| 596 | 633 | self::releaseMigrationLock(); |
| 597 | 634 | } |
| 598 | 635 | } |
| 599 | 636 | |