Add a new column user_agent_type to statistics tables

[MAILPOET-3736]
This commit is contained in:
Jan Lysý
2021-08-19 12:37:21 +02:00
committed by Veljko V
parent f6513ab2b7
commit 9192602adf

View File

@@ -68,6 +68,7 @@ class Migrator {
} }
$this->updateNullInUnsubscribeStats(); $this->updateNullInUnsubscribeStats();
$this->fixScheduledTasksSubscribersTimestampColumns(); $this->fixScheduledTasksSubscribersTimestampColumns();
$this->removeDeprecatedStatisticsIndexes();
return $output; return $output;
} }
@@ -427,11 +428,12 @@ class Migrator {
'queue_id int(11) unsigned NOT NULL,', 'queue_id int(11) unsigned NOT NULL,',
'link_id int(11) unsigned NOT NULL,', 'link_id int(11) unsigned NOT NULL,',
'user_agent_id int(11) unsigned NULL,', 'user_agent_id int(11) unsigned NULL,',
'user_agent_type varchar(50) NULL,',
'count int(11) unsigned NOT NULL,', 'count int(11) unsigned NOT NULL,',
'created_at timestamp NULL,', // must be NULL, see comment at the top 'created_at timestamp NULL,', // must be NULL, see comment at the top
'updated_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,', 'updated_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,',
'PRIMARY KEY (id),', 'PRIMARY KEY (id),',
'KEY newsletter_id_subscriber_id (newsletter_id, subscriber_id),', 'KEY newsletter_id_subscriber_id_user_agent_type (newsletter_id, subscriber_id, user_agent_type),',
'KEY queue_id (queue_id),', 'KEY queue_id (queue_id),',
'KEY subscriber_id (subscriber_id)', 'KEY subscriber_id (subscriber_id)',
]; ];
@@ -445,9 +447,10 @@ class Migrator {
'subscriber_id int(11) unsigned NOT NULL,', 'subscriber_id int(11) unsigned NOT NULL,',
'queue_id int(11) unsigned NOT NULL,', 'queue_id int(11) unsigned NOT NULL,',
'user_agent_id int(11) unsigned NULL,', 'user_agent_id int(11) unsigned NULL,',
'user_agent_type varchar(50) NULL,',
'created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,', 'created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,',
'PRIMARY KEY (id),', 'PRIMARY KEY (id),',
'KEY newsletter_id_subscriber_id (newsletter_id, subscriber_id),', 'KEY newsletter_id_subscriber_id_user_agent_type (newsletter_id, subscriber_id, user_agent_type),',
'KEY queue_id (queue_id),', 'KEY queue_id (queue_id),',
'KEY subscriber_id (subscriber_id),', 'KEY subscriber_id (subscriber_id),',
'KEY created_at (created_at),', 'KEY created_at (created_at),',
@@ -645,4 +648,36 @@ class Migrator {
} }
return true; return true;
} }
private function removeDeprecatedStatisticsIndexes(): bool {
global $wpdb;
// skip the migration if the DB version is higher than 3.67.1 or is not set (a new install)
if (version_compare($this->settings->get('db_version', '3.67.1'), '3.67.1', '>')) {
return false;
}
$dbName = Env::$dbName;
$statisticsTables = [
"{$this->prefix}statistics_clicks",
"{$this->prefix}statistics_opens",
];
foreach ($statisticsTables as $statisticsTable) {
$oldStatisticsIndexExists = $wpdb->get_results("
SELECT DISTINCT INDEX_NAME
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = '{$dbName}'
AND TABLE_NAME = '$statisticsTable'
AND INDEX_NAME='newsletter_id_subscriber_id'
");
if (!empty($oldStatisticsIndexExists)) {
$dropIndexQuery = "
ALTER TABLE `{$statisticsTable}`
DROP INDEX `newsletter_id_subscriber_id`
";
$wpdb->query($dropIndexQuery);
}
}
return true;
}
} }