| @@ -42,9 +42,10 @@ | ||
| 42 | 42 | PRIMARY KEY (`id`), |
| 43 | 43 | KEY `form_id_status` (`form_id`, `status`), |
| 44 | 44 | KEY `form_id_created_at` (`form_id`, `created_at`), |
| 45 | 45 | KEY `user_id` (`user_id`), |
| 46 | - KEY `serial_number` (`serial_number`)) $charsetCollate;"; | |
| 46 | + KEY `serial_number` (`serial_number`), | |
| 47 | + KEY `created_at` (`created_at`)) $charsetCollate;"; | |
| 47 | 48 | |
| 48 | 49 | // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Migration file, direct query needed |
| 49 | 50 | if ($force || $wpdb->get_var($wpdb->prepare("SHOW TABLES LIKE %s", $table)) != $table) { |
| 50 | 51 | require_once ABSPATH . 'wp-admin/includes/upgrade.php'; |
| @@ -84,8 +85,16 @@ | ||
| 84 | 85 | // Add composite index form_id + created_at if it doesn't exist |
| 85 | 86 | if (!in_array('form_id_created_at', $existingIndexes)) { |
| 86 | 87 | // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.DirectDatabaseQuery.SchemaChange, WordPress.DB.PreparedSQLPlaceholders.UnquotedComplexPlaceholder -- Migration file, adding composite index for performance, %1s is for identifier |
| 87 | 88 | $wpdb->query($wpdb->prepare("ALTER TABLE %1s ADD KEY `form_id_created_at` (`form_id`, `created_at`)", $table)); |
| 89 | + } | |
| 90 | + | |
| 91 | + // Add a standalone created_at index for cross-form, date-only reports — | |
| 92 | + // form_id_created_at leads with form_id, so it can't serve a query that | |
| 93 | + // filters on created_at with no form_id (e.g. the unrestricted analytics). | |
| 94 | + if (!in_array('created_at', $existingIndexes)) { | |
| 95 | + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.DirectDatabaseQuery.SchemaChange, WordPress.DB.PreparedSQLPlaceholders.UnquotedComplexPlaceholder -- Migration file, adding index for performance, %1s is for identifier | |
| 96 | + $wpdb->query($wpdb->prepare("ALTER TABLE %1s ADD KEY `created_at` (`created_at`)", $table)); | |
| 88 | 97 | } |
| 89 | 98 | |
| 90 | 99 | // Add user_id index if it doesn't exist |
| 91 | 100 | if (!in_array('user_id', $existingIndexes)) { |