[ticket/17525] Rename all indexes to make names unique

With this reNAMING schema, max index name length is 23.

PHPBB-17525
This commit is contained in:
rxu 2025-06-25 17:42:36 +07:00
parent 45a69eca14
commit 1339a31c23
No known key found for this signature in database
GPG key ID: 8117904FEDEFDD17
2 changed files with 129 additions and 98 deletions

View file

@ -123,6 +123,108 @@ class table_helper
}
}
/**
* Maps short table names for the purpose of prefixing tables' index names.
*
* @param array $additional_tables Additional table names without prefix to add to the map.
* @param array $table_prefix Tables prefix.
*
* @return array<string, string> Pairs of table names and their short name representations.
*/
public static function map_short_table_names(array $additional_tables = [], string $table_prefix = ''): array
{
$short_table_names_map = [
"{$table_prefix}acl_groups" => 'aclgrps',
"{$table_prefix}acl_options" => 'aclopts',
"{$table_prefix}acl_roles" => 'aclrls',
"{$table_prefix}acl_roles_data" => 'aclrlsdt',
"{$table_prefix}acl_users" => 'aclusrs',
"{$table_prefix}attachments" => 'atchmnts',
"{$table_prefix}backups" => 'bckps',
"{$table_prefix}bans" => 'bans',
"{$table_prefix}bbcodes" => 'bbcds',
"{$table_prefix}bookmarks" => 'bkmrks',
"{$table_prefix}bots" => 'bots',
"{$table_prefix}captcha_answers" => 'cptchans',
"{$table_prefix}captcha_questions" => 'cptchqs',
"{$table_prefix}config" => 'cnfg',
"{$table_prefix}config_text" => 'cnfgtxt',
"{$table_prefix}confirm" => 'cnfrm',
"{$table_prefix}disallow" => 'dslw',
"{$table_prefix}drafts" => 'drfts',
"{$table_prefix}ext" => 'ext',
"{$table_prefix}extension_groups" => 'extgrps',
"{$table_prefix}extensions" => 'exts',
"{$table_prefix}forums" => 'frms',
"{$table_prefix}forums_access" => 'frmsacs',
"{$table_prefix}forums_track" => 'frmstrck',
"{$table_prefix}forums_watch" => 'frmswtch',
"{$table_prefix}groups" => 'grps',
"{$table_prefix}icons" => 'icns',
"{$table_prefix}lang" => 'lang',
"{$table_prefix}log" => 'log',
"{$table_prefix}login_attempts" => 'lgnatmpts',
"{$table_prefix}migrations" => 'mgrtns',
"{$table_prefix}moderator_cache" => 'mdrtche',
"{$table_prefix}modules" => 'mdls',
"{$table_prefix}notification_emails"=> 'ntfemls',
"{$table_prefix}notification_push" => 'ntfpsh',
"{$table_prefix}notification_types" => 'ntftps',
"{$table_prefix}notifications" => 'nftcns',
"{$table_prefix}oauth_accounts" => 'oauthacnts',
"{$table_prefix}oauth_states" => 'oauthsts',
"{$table_prefix}oauth_tokens" => 'oauthtkns',
"{$table_prefix}poll_options" => 'pllopts',
"{$table_prefix}poll_votes" => 'pllvts',
"{$table_prefix}posts" => 'psts',
"{$table_prefix}privmsgs" => 'pms',
"{$table_prefix}privmsgs_folder" => 'pmsfldr',
"{$table_prefix}privmsgs_rules" => 'pmsrls',
"{$table_prefix}privmsgs_to" => 'pmsto',
"{$table_prefix}profile_fields" => 'prflds',
"{$table_prefix}profile_fields_data"=> 'prfldt',
"{$table_prefix}profile_fields_lang"=> 'prfldlng',
"{$table_prefix}profile_lang" => 'prflng',
"{$table_prefix}push_subscriptions" => 'pshsbscrs',
"{$table_prefix}qa_confirm" => 'qacnfm',
"{$table_prefix}ranks" => 'rnks',
"{$table_prefix}reports" => 'rprts',
"{$table_prefix}reports_reasons" => 'rprtrsns',
"{$table_prefix}search_results" => 'srchrslts',
"{$table_prefix}search_wordlist" => 'wrdlst',
"{$table_prefix}search_wordmatch" => 'wrdmtch',
"{$table_prefix}sessions" => 'ssns',
"{$table_prefix}sessions_keys" => 'ssnkeys',
"{$table_prefix}sitelist" => 'sitelst',
"{$table_prefix}smilies" => 'smls',
"{$table_prefix}storage" => 'strg',
"{$table_prefix}styles" => 'stls',
"{$table_prefix}teampage" => 'teampg',
"{$table_prefix}topics" => 'tpcs',
"{$table_prefix}topics_posted" => 'tpcspstd',
"{$table_prefix}topics_track" => 'tpcstrk',
"{$table_prefix}topics_watch" => 'tpkswtch',
"{$table_prefix}user_group" => 'usrgrp',
"{$table_prefix}user_notifications" => 'usrntfs',
"{$table_prefix}users" => 'usrs',
"{$table_prefix}warnings" => 'wrns',
"{$table_prefix}words" => 'wrds',
"{$table_prefix}zebra" => 'zbra',
];
// Add table prefix to additional tables
if (!empty($table_prefix && !empty($additional_tables)))
{
foreach ($additional_tables as $key => $value)
{
$additional_tables["{$table_prefix}{$key}"] = $value;
unset($additional_tables[$key]);
}
}
return array_merge($short_table_names_map, $additional_tables);
}
/**
* Private constructor. Call methods of table_helper statically.
*/

View file

@ -14,6 +14,7 @@
namespace phpbb\db\migration\data\v400;
use phpbb\db\migration\migration;
use phpbb\db\doctrine\table_helper;
class rename_duplicated_index_names extends migration
{
@ -26,105 +27,33 @@ class rename_duplicated_index_names extends migration
public function update_schema()
{
$rename_index = $table_keys = [];
$db_table_schema = json_decode(file_get_contents($this->phpbb_root_path . 'store/schema.json'), true);
foreach ($db_table_schema as $table_name => $table_data)
{
if (isset($table_data['KEYS']))
{
$table_name = $this->table_prefix . $table_name;
foreach ($table_data['KEYS'] as $key_name => $key_data)
{
$table_keys[$table_name][] = $key_name;
}
}
}
$short_table_names = table_helper::map_short_table_names([], $this->table_prefix);
foreach ($table_keys as $table_name => $key_names)
{
$key_name_new = $short_table_names[$table_name] . '_' . $key_name;
foreach ($key_names as $key_name)
{
$rename_index[$table_name][$key_name] = $key_name_new;
$rename_index[$table_name][$table_name . '_' . $key_name] = $key_name_new;
}
}
return [
'rename_index' => [
$this->table_prefix . 'acl_groups' => [
'auth_role_id' => 'aclgrps_auth_role_id',
'group_id' => 'aclgrps_group_id',
],
$this->table_prefix . 'acl_users' => [
'auth_role_id' => 'aclusrs_auth_role_id',
'user_id' => 'aclusrs_user_id',
],
$this->table_prefix . 'attachments' => [
'poster_id' => 'attchmnts_poster_id',
'topic_id' => 'attchmnts_topic_id',
],
$this->table_prefix . 'bbcodes' => [
'display_on_post' => 'bbcds_display_on_post',
],
$this->table_prefix . 'forums' => [
'left_right_id' => 'frms_left_right_id',
],
$this->table_prefix . 'forums_watch' => [
'forum_id' => 'frmswtch_forum_id',
'notify_stat' => 'frmswtch_notify_stat',
'user_id' => 'frmswtch_user_id',
],
$this->table_prefix . 'log' => [
'forum_id' => 'log_forum_id',
'topic_id' => 'log_topic_id',
'user_id' => 'log_user_id',
],
$this->table_prefix . 'login_attempts' => [
'user_id' => 'lgnatmpts_user_id',
],
$this->table_prefix . 'moderator_cache' => [
'forum_id' => 'mdrtrcch_forum_id',
],
$this->table_prefix . 'modules' => [
'left_right_id' => 'mdls_left_right_id',
],
$this->table_prefix . 'oauth_states' => [
'provider' => 'oauthsts_provider',
'user_id' => 'oauthsts_user_id',
],
$this->table_prefix . 'oauth_tokens' => [
'provider' => 'oauthtkns_provider',
'user_id' => 'oauthtkns_user_id',
],
$this->table_prefix . 'poll_options' => [
'topic_id' => 'pllopts_topic_id',
],
$this->table_prefix . 'poll_votes' => [
'topic_id' => 'pllvts_topic_id',
],
$this->table_prefix . 'posts' => [
'forum_id' => 'psts_forum_id',
'poster_id' => 'psts_poster_id',
'topic_id' => 'psts_topic_id',
],
$this->table_prefix . 'privmsgs' => [
'author_id' => 'pms_author_id',
],
$this->table_prefix . 'privmsgs_folder' => [
'user_id' => 'pmsfldr_user_id',
],
$this->table_prefix . 'privmsgs_rules' => [
'user_id' => 'pmsrls_user_id',
],
$this->table_prefix . 'privmsgs_to' => [
'author_id' => 'pmsto_author_id',
],
$this->table_prefix . 'reports' => [
'post_id' => 'rprts_post_id',
],
$this->table_prefix . 'search_wordmatch' => [
'post_id' => 'wrdmtch_post_id',
],
$this->table_prefix . 'smilies' => [
'display_on_post' => 'smls_display_on_post',
],
$this->table_prefix . 'topics' => [
'forum_id' => 'tpcs_forum_id',
],
$this->table_prefix . 'topics_track' => [
'forum_id' => 'tpcstrk_forum_id',
'topic_id' => 'tpcstrk_topic_id',
],
$this->table_prefix . 'topics_watch' => [
'topic_id' => 'tpcswtch_topic_id',
'notify_stat' => 'tpcswtch_notify_stat',
'user_id' => 'tpcswtch_user_id',
],
$this->table_prefix . 'user_group' => [
'group_id' => 'usrgrp_group_id',
'user_id' => 'usrgrp_user_id',
],
$this->table_prefix . 'user_notifications' => [
'user_id' => 'usrntf_user_id',
],
],
'rename_index' => $rename_index,
];
}