diff options
author | Shauren <shauren.trinity@gmail.com> | 2020-04-25 17:01:26 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2020-04-25 17:01:26 +0200 |
commit | af76dc6b88bdfc910a93b2549c1a89afdeb41b91 (patch) | |
tree | f485e213dd54d2a04cdc7e2af7a69836da7de231 | |
parent | 96ec1f16d434b65ac7775ff9fa50f605f6fbf4d8 (diff) |
Core/DataStores: Speedup loading hotfix database and change hotfix database character set to utf8mb4
-rw-r--r-- | sql/create/create_mysql.sql | 2 | ||||
-rw-r--r-- | sql/updates/hotfixes/master/2020_04_25_00_hotfixes.sql | 1034 | ||||
-rw-r--r-- | src/server/database/Database/Implementation/HotfixDatabase.cpp | 798 | ||||
-rw-r--r-- | src/server/database/Database/Implementation/HotfixDatabase.h | 252 | ||||
-rw-r--r-- | src/server/shared/DataStores/DB2DatabaseLoader.cpp | 10 |
5 files changed, 1803 insertions, 293 deletions
diff --git a/sql/create/create_mysql.sql b/sql/create/create_mysql.sql index a5e00ed7330..4fb3733ad9e 100644 --- a/sql/create/create_mysql.sql +++ b/sql/create/create_mysql.sql @@ -6,7 +6,7 @@ CREATE DATABASE `characters` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE DATABASE `auth` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; -CREATE DATABASE `hotfixes` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; +CREATE DATABASE `hotfixes` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; GRANT ALL PRIVILEGES ON `world` . * TO 'trinity'@'localhost' WITH GRANT OPTION; diff --git a/sql/updates/hotfixes/master/2020_04_25_00_hotfixes.sql b/sql/updates/hotfixes/master/2020_04_25_00_hotfixes.sql new file mode 100644 index 00000000000..9a45ae887bd --- /dev/null +++ b/sql/updates/hotfixes/master/2020_04_25_00_hotfixes.sql @@ -0,0 +1,1034 @@ +ALTER TABLE `achievement` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `achievement` MODIFY COLUMN `Description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL FIRST; +ALTER TABLE `achievement` MODIFY COLUMN `Title` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Description`; +ALTER TABLE `achievement` MODIFY COLUMN `Reward` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Title`; + +ALTER TABLE `achievement_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `achievement_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `achievement_locale` MODIFY COLUMN `Description_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `achievement_locale` MODIFY COLUMN `Title_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Description_lang`; +ALTER TABLE `achievement_locale` MODIFY COLUMN `Reward_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Title_lang`; +ALTER TABLE `achievement_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `anim_kit` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `animation_data` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `area_group_member` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `area_table` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `area_table` MODIFY COLUMN `ZoneName` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; +ALTER TABLE `area_table` MODIFY COLUMN `AreaName` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ZoneName`; + +ALTER TABLE `area_table_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `area_table_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `area_table_locale` MODIFY COLUMN `AreaName_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `area_table_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `area_trigger` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `armor_location` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `artifact` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `artifact` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL FIRST; + +ALTER TABLE `artifact_appearance` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `artifact_appearance` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL FIRST; + +ALTER TABLE `artifact_appearance_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `artifact_appearance_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `artifact_appearance_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `artifact_appearance_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `artifact_appearance_set` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `artifact_appearance_set` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL FIRST; +ALTER TABLE `artifact_appearance_set` MODIFY COLUMN `Description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name`; + +ALTER TABLE `artifact_appearance_set_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `artifact_appearance_set_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `artifact_appearance_set_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `artifact_appearance_set_locale` MODIFY COLUMN `Description_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name_lang`; +ALTER TABLE `artifact_appearance_set_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `artifact_category` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `artifact_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `artifact_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `artifact_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `artifact_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `artifact_power` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `artifact_power_link` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `artifact_power_picker` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `artifact_power_rank` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `artifact_quest_xp` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `artifact_tier` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `artifact_unlock` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `auction_house` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `auction_house` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; + +ALTER TABLE `auction_house_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `auction_house_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `auction_house_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `auction_house_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `azerite_empowered_item` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `azerite_essence` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `azerite_essence` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL FIRST; +ALTER TABLE `azerite_essence` MODIFY COLUMN `Description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name`; + +ALTER TABLE `azerite_essence_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `azerite_essence_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `azerite_essence_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `azerite_essence_locale` MODIFY COLUMN `Description_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name_lang`; +ALTER TABLE `azerite_essence_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `azerite_essence_power` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `azerite_essence_power` MODIFY COLUMN `SourceAlliance` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; +ALTER TABLE `azerite_essence_power` MODIFY COLUMN `SourceHorde` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `SourceAlliance`; + +ALTER TABLE `azerite_essence_power_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `azerite_essence_power_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `azerite_essence_power_locale` MODIFY COLUMN `SourceAlliance_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `azerite_essence_power_locale` MODIFY COLUMN `SourceHorde_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `SourceAlliance_lang`; +ALTER TABLE `azerite_essence_power_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `azerite_item` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `azerite_item_milestone_power` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `azerite_knowledge_multiplier` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `azerite_level_info` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `azerite_power` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `azerite_power_set_member` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `azerite_tier_unlock` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `azerite_tier_unlock_set` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `azerite_unlock_mapping` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `bank_bag_slot_prices` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `banned_addons` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `banned_addons` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; +ALTER TABLE `banned_addons` MODIFY COLUMN `Version` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name`; + +ALTER TABLE `barber_shop_style` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `barber_shop_style` MODIFY COLUMN `DisplayName` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL FIRST; +ALTER TABLE `barber_shop_style` MODIFY COLUMN `Description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `DisplayName`; + +ALTER TABLE `barber_shop_style_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `barber_shop_style_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `barber_shop_style_locale` MODIFY COLUMN `DisplayName_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `barber_shop_style_locale` MODIFY COLUMN `Description_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `DisplayName_lang`; +ALTER TABLE `barber_shop_style_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `battle_pet_breed_quality` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `battle_pet_breed_state` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `battle_pet_species` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `battle_pet_species` MODIFY COLUMN `Description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL FIRST; +ALTER TABLE `battle_pet_species` MODIFY COLUMN `SourceText` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Description`; + +ALTER TABLE `battle_pet_species_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `battle_pet_species_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `battle_pet_species_locale` MODIFY COLUMN `Description_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `battle_pet_species_locale` MODIFY COLUMN `SourceText_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Description_lang`; +ALTER TABLE `battle_pet_species_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `battle_pet_species_state` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `battlemaster_list` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `battlemaster_list` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; +ALTER TABLE `battlemaster_list` MODIFY COLUMN `GameType` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name`; +ALTER TABLE `battlemaster_list` MODIFY COLUMN `ShortDescription` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `GameType`; +ALTER TABLE `battlemaster_list` MODIFY COLUMN `LongDescription` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ShortDescription`; + +ALTER TABLE `battlemaster_list_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `battlemaster_list_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `battlemaster_list_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `battlemaster_list_locale` MODIFY COLUMN `GameType_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name_lang`; +ALTER TABLE `battlemaster_list_locale` MODIFY COLUMN `ShortDescription_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `GameType_lang`; +ALTER TABLE `battlemaster_list_locale` MODIFY COLUMN `LongDescription_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ShortDescription_lang`; +ALTER TABLE `battlemaster_list_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `broadcast_text` CHARACTER SET = utf8mb4, COLLATE = utf8mb4_unicode_ci; +ALTER TABLE `broadcast_text` MODIFY COLUMN `Text` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL FIRST; +ALTER TABLE `broadcast_text` MODIFY COLUMN `Text1` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Text`; + +ALTER TABLE `broadcast_text_locale` CHARACTER SET = utf8mb4, COLLATE = utf8mb4_unicode_ci; +ALTER TABLE `broadcast_text_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `broadcast_text_locale` MODIFY COLUMN `Text_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `broadcast_text_locale` MODIFY COLUMN `Text1_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Text_lang`; +ALTER TABLE `broadcast_text_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `cfg_regions` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `cfg_regions` MODIFY COLUMN `Tag` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; + +ALTER TABLE `char_base_section` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `char_sections` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `char_start_outfit` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `char_titles` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `char_titles` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; +ALTER TABLE `char_titles` MODIFY COLUMN `Name1` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name`; + +ALTER TABLE `char_titles_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `char_titles_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `char_titles_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `char_titles_locale` MODIFY COLUMN `Name1_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name_lang`; +ALTER TABLE `char_titles_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `character_facial_hair_styles` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `chat_channels` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `chat_channels` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; +ALTER TABLE `chat_channels` MODIFY COLUMN `Shortcut` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name`; + +ALTER TABLE `chat_channels_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `chat_channels_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `chat_channels_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `chat_channels_locale` MODIFY COLUMN `Shortcut_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name_lang`; +ALTER TABLE `chat_channels_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `chr_classes` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `chr_classes` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL FIRST; +ALTER TABLE `chr_classes` MODIFY COLUMN `Filename` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name`; +ALTER TABLE `chr_classes` MODIFY COLUMN `NameMale` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Filename`; +ALTER TABLE `chr_classes` MODIFY COLUMN `NameFemale` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `NameMale`; +ALTER TABLE `chr_classes` MODIFY COLUMN `PetNameToken` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `NameFemale`; + +ALTER TABLE `chr_classes_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `chr_classes_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `chr_classes_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `chr_classes_locale` MODIFY COLUMN `NameMale_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name_lang`; +ALTER TABLE `chr_classes_locale` MODIFY COLUMN `NameFemale_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `NameMale_lang`; +ALTER TABLE `chr_classes_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `chr_classes_x_power_types` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `chr_races` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `chr_races` MODIFY COLUMN `ClientPrefix` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL FIRST; +ALTER TABLE `chr_races` MODIFY COLUMN `ClientFileString` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ClientPrefix`; +ALTER TABLE `chr_races` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ClientFileString`; +ALTER TABLE `chr_races` MODIFY COLUMN `NameFemale` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name`; +ALTER TABLE `chr_races` MODIFY COLUMN `NameLowercase` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `NameFemale`; +ALTER TABLE `chr_races` MODIFY COLUMN `NameFemaleLowercase` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `NameLowercase`; + +ALTER TABLE `chr_races_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `chr_races_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `chr_races_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `chr_races_locale` MODIFY COLUMN `NameFemale_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name_lang`; +ALTER TABLE `chr_races_locale` MODIFY COLUMN `NameLowercase_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `NameFemale_lang`; +ALTER TABLE `chr_races_locale` MODIFY COLUMN `NameFemaleLowercase_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `NameLowercase_lang`; +ALTER TABLE `chr_races_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `chr_specialization` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `chr_specialization` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL FIRST; +ALTER TABLE `chr_specialization` MODIFY COLUMN `FemaleName` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name`; +ALTER TABLE `chr_specialization` MODIFY COLUMN `Description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `FemaleName`; + +ALTER TABLE `chr_specialization_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `chr_specialization_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `chr_specialization_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `chr_specialization_locale` MODIFY COLUMN `FemaleName_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name_lang`; +ALTER TABLE `chr_specialization_locale` MODIFY COLUMN `Description_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `FemaleName_lang`; +ALTER TABLE `chr_specialization_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `cinematic_camera` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `cinematic_sequences` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `content_tuning` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `content_tuning_x_expected` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `conversation_line` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `creature_display_info` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `creature_display_info_extra` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `creature_family` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `creature_family` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; + +ALTER TABLE `creature_family_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `creature_family_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `creature_family_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `creature_family_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `creature_model_data` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `creature_type` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `creature_type` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; + +ALTER TABLE `creature_type_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `creature_type_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `creature_type_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `creature_type_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `criteria` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `criteria_tree` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `criteria_tree` MODIFY COLUMN `Description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; + +ALTER TABLE `criteria_tree_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `criteria_tree_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `criteria_tree_locale` MODIFY COLUMN `Description_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `criteria_tree_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `currency_types` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `currency_types` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; +ALTER TABLE `currency_types` MODIFY COLUMN `Description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name`; + +ALTER TABLE `currency_types_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `currency_types_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `currency_types_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `currency_types_locale` MODIFY COLUMN `Description_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name_lang`; +ALTER TABLE `currency_types_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `curve` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `curve_point` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `destructible_model_data` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `difficulty` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `difficulty` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; + +ALTER TABLE `difficulty_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `difficulty_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `difficulty_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `difficulty_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `dungeon_encounter` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `dungeon_encounter` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL FIRST; + +ALTER TABLE `dungeon_encounter_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `dungeon_encounter_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `dungeon_encounter_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `dungeon_encounter_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `durability_costs` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `durability_quality` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `emotes` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `emotes` MODIFY COLUMN `EmoteSlashCommand` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `RaceMask`; + +ALTER TABLE `emotes_text` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `emotes_text` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; + +ALTER TABLE `emotes_text_sound` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `expected_stat` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `expected_stat_mod` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `faction` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `faction` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ReputationRaceMask4`; +ALTER TABLE `faction` MODIFY COLUMN `Description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name`; + +ALTER TABLE `faction_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `faction_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `faction_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `faction_locale` MODIFY COLUMN `Description_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name_lang`; +ALTER TABLE `faction_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `faction_template` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `gameobject_display_info` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `gameobjects` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `gameobjects` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL FIRST; + +ALTER TABLE `gameobjects_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `gameobjects_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `gameobjects_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `gameobjects_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `garr_ability` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `garr_ability` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL FIRST; +ALTER TABLE `garr_ability` MODIFY COLUMN `Description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name`; + +ALTER TABLE `garr_ability_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `garr_ability_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `garr_ability_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `garr_ability_locale` MODIFY COLUMN `Description_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name_lang`; +ALTER TABLE `garr_ability_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `garr_building` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `garr_building` MODIFY COLUMN `HordeName` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; +ALTER TABLE `garr_building` MODIFY COLUMN `AllianceName` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `HordeName`; +ALTER TABLE `garr_building` MODIFY COLUMN `Description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `AllianceName`; +ALTER TABLE `garr_building` MODIFY COLUMN `Tooltip` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Description`; + +ALTER TABLE `garr_building_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `garr_building_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `garr_building_locale` MODIFY COLUMN `HordeName_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `garr_building_locale` MODIFY COLUMN `AllianceName_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `HordeName_lang`; +ALTER TABLE `garr_building_locale` MODIFY COLUMN `Description_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `AllianceName_lang`; +ALTER TABLE `garr_building_locale` MODIFY COLUMN `Tooltip_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Description_lang`; +ALTER TABLE `garr_building_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `garr_building_plot_inst` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `garr_class_spec` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `garr_class_spec` MODIFY COLUMN `ClassSpec` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL FIRST; +ALTER TABLE `garr_class_spec` MODIFY COLUMN `ClassSpecMale` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ClassSpec`; +ALTER TABLE `garr_class_spec` MODIFY COLUMN `ClassSpecFemale` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ClassSpecMale`; + +ALTER TABLE `garr_class_spec_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `garr_class_spec_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `garr_class_spec_locale` MODIFY COLUMN `ClassSpec_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `garr_class_spec_locale` MODIFY COLUMN `ClassSpecMale_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ClassSpec_lang`; +ALTER TABLE `garr_class_spec_locale` MODIFY COLUMN `ClassSpecFemale_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ClassSpecMale_lang`; +ALTER TABLE `garr_class_spec_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `garr_follower` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `garr_follower` MODIFY COLUMN `HordeSourceText` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL FIRST; +ALTER TABLE `garr_follower` MODIFY COLUMN `AllianceSourceText` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `HordeSourceText`; +ALTER TABLE `garr_follower` MODIFY COLUMN `TitleName` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `AllianceSourceText`; + +ALTER TABLE `garr_follower_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `garr_follower_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `garr_follower_locale` MODIFY COLUMN `HordeSourceText_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `garr_follower_locale` MODIFY COLUMN `AllianceSourceText_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `HordeSourceText_lang`; +ALTER TABLE `garr_follower_locale` MODIFY COLUMN `TitleName_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `AllianceSourceText_lang`; +ALTER TABLE `garr_follower_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `garr_follower_x_ability` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `garr_plot` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `garr_plot` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; + +ALTER TABLE `garr_plot_building` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `garr_plot_instance` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `garr_plot_instance` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; + +ALTER TABLE `garr_site_level` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `garr_site_level_plot_inst` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `gem_properties` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `glyph_bindable_spell` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `glyph_properties` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `glyph_required_spec` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `guild_color_background` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `guild_color_border` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `guild_color_emblem` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `guild_perk_spells` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `heirloom` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `heirloom` MODIFY COLUMN `SourceText` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL FIRST; + +ALTER TABLE `heirloom_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `heirloom_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `heirloom_locale` MODIFY COLUMN `SourceText_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `heirloom_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `holidays` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `import_price_armor` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `import_price_quality` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `import_price_shield` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `import_price_weapon` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `item` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `item_appearance` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `item_armor_quality` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `item_armor_shield` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `item_armor_total` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `item_bag_family` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `item_bag_family` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; + +ALTER TABLE `item_bag_family_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `item_bag_family_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `item_bag_family_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `item_bag_family_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `item_bonus` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `item_bonus_list_level_delta` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `item_bonus_tree_node` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `item_child_equipment` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `item_class` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `item_class` MODIFY COLUMN `ClassName` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; + +ALTER TABLE `item_class_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `item_class_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `item_class_locale` MODIFY COLUMN `ClassName_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `item_class_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `item_currency_cost` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `item_damage_ammo` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `item_damage_one_hand` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `item_damage_one_hand_caster` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `item_damage_two_hand` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `item_damage_two_hand_caster` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `item_disenchant_loot` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `item_effect` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `item_extended_cost` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `item_level_selector` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `item_level_selector_quality` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `item_level_selector_quality_set` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `item_limit_category` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `item_limit_category` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; + +ALTER TABLE `item_limit_category_condition` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `item_limit_category_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `item_limit_category_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; + +ALTER TABLE `item_limit_category_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; + +ALTER TABLE `item_limit_category_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `item_modified_appearance` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `item_name_description` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `item_name_description` MODIFY COLUMN `Description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; + +ALTER TABLE `item_name_description_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `item_name_description_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `item_name_description_locale` MODIFY COLUMN `Description_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `item_name_description_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `item_price_base` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `item_search_name` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `item_search_name` MODIFY COLUMN `Display` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `AllowableRace`; + +ALTER TABLE `item_search_name_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `item_search_name_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `item_search_name_locale` MODIFY COLUMN `Display_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `item_search_name_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `item_set` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `item_set` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; + +ALTER TABLE `item_set_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `item_set_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `item_set_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `item_set_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `item_set_spell` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `item_sparse` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `item_sparse` MODIFY COLUMN `Description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `AllowableRace`; +ALTER TABLE `item_sparse` MODIFY COLUMN `Display3` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Description`; +ALTER TABLE `item_sparse` MODIFY COLUMN `Display2` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Display3`; +ALTER TABLE `item_sparse` MODIFY COLUMN `Display1` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Display2`; +ALTER TABLE `item_sparse` MODIFY COLUMN `Display` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Display1`; + +ALTER TABLE `item_sparse_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `item_sparse_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `item_sparse_locale` MODIFY COLUMN `Description_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `item_sparse_locale` MODIFY COLUMN `Display3_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Description_lang`; +ALTER TABLE `item_sparse_locale` MODIFY COLUMN `Display2_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Display3_lang`; +ALTER TABLE `item_sparse_locale` MODIFY COLUMN `Display1_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Display2_lang`; +ALTER TABLE `item_sparse_locale` MODIFY COLUMN `Display_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Display1_lang`; +ALTER TABLE `item_sparse_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `item_spec` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `item_spec_override` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `item_x_bonus_tree` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `keychain` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `lfg_dungeons` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `lfg_dungeons` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; +ALTER TABLE `lfg_dungeons` MODIFY COLUMN `Description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name`; + +ALTER TABLE `lfg_dungeons_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `lfg_dungeons_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `lfg_dungeons_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `lfg_dungeons_locale` MODIFY COLUMN `Description_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name_lang`; +ALTER TABLE `lfg_dungeons_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `light` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `liquid_type` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `liquid_type` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; +ALTER TABLE `liquid_type` MODIFY COLUMN `Texture1` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name`; +ALTER TABLE `liquid_type` MODIFY COLUMN `Texture2` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Texture1`; +ALTER TABLE `liquid_type` MODIFY COLUMN `Texture3` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Texture2`; +ALTER TABLE `liquid_type` MODIFY COLUMN `Texture4` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Texture3`; +ALTER TABLE `liquid_type` MODIFY COLUMN `Texture5` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Texture4`; +ALTER TABLE `liquid_type` MODIFY COLUMN `Texture6` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Texture5`; + +ALTER TABLE `lock` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `mail_template` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `mail_template` MODIFY COLUMN `Body` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; + +ALTER TABLE `mail_template_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `mail_template_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `mail_template_locale` MODIFY COLUMN `Body_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `mail_template_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `map` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `map` MODIFY COLUMN `Directory` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; +ALTER TABLE `map` MODIFY COLUMN `MapName` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Directory`; +ALTER TABLE `map` MODIFY COLUMN `MapDescription0` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `MapName`; +ALTER TABLE `map` MODIFY COLUMN `MapDescription1` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `MapDescription0`; +ALTER TABLE `map` MODIFY COLUMN `PvpShortDescription` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `MapDescription1`; +ALTER TABLE `map` MODIFY COLUMN `PvpLongDescription` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `PvpShortDescription`; + +ALTER TABLE `map_difficulty` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `map_difficulty` MODIFY COLUMN `Message` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; + +ALTER TABLE `map_difficulty_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `map_difficulty_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `map_difficulty_locale` MODIFY COLUMN `Message_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `map_difficulty_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `map_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `map_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `map_locale` MODIFY COLUMN `MapName_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `map_locale` MODIFY COLUMN `MapDescription0_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `MapName_lang`; +ALTER TABLE `map_locale` MODIFY COLUMN `MapDescription1_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `MapDescription0_lang`; +ALTER TABLE `map_locale` MODIFY COLUMN `PvpShortDescription_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `MapDescription1_lang`; +ALTER TABLE `map_locale` MODIFY COLUMN `PvpLongDescription_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `PvpShortDescription_lang`; +ALTER TABLE `map_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `modifier_tree` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `mount` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `mount` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL FIRST; +ALTER TABLE `mount` MODIFY COLUMN `SourceText` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name`; +ALTER TABLE `mount` MODIFY COLUMN `Description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `SourceText`; + +ALTER TABLE `mount_capability` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `mount_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `mount_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `mount_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `mount_locale` MODIFY COLUMN `SourceText_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name_lang`; +ALTER TABLE `mount_locale` MODIFY COLUMN `Description_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `SourceText_lang`; +ALTER TABLE `mount_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `mount_type_x_capability` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `mount_x_display` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `movie` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `name_gen` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `name_gen` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; + +ALTER TABLE `names_profanity` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `names_profanity` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; + +ALTER TABLE `names_reserved` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `names_reserved` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; + +ALTER TABLE `names_reserved_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `names_reserved_locale` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; + +ALTER TABLE `num_talents_at_level` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `override_spell_data` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `phase` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `phase_x_phase_group` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `player_condition` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `player_condition` MODIFY COLUMN `FailureDescription` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `RaceMask`; + +ALTER TABLE `player_condition_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `player_condition_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `player_condition_locale` MODIFY COLUMN `FailureDescription_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `player_condition_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `power_display` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `power_display` MODIFY COLUMN `GlobalStringBaseTag` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; + +ALTER TABLE `power_type` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `power_type` MODIFY COLUMN `NameGlobalStringTag` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL FIRST; +ALTER TABLE `power_type` MODIFY COLUMN `CostGlobalStringTag` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `NameGlobalStringTag`; + +ALTER TABLE `prestige_level_info` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `prestige_level_info` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; + +ALTER TABLE `prestige_level_info_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `prestige_level_info_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `prestige_level_info_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `prestige_level_info_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `pvp_difficulty` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `pvp_item` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `pvp_talent` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `pvp_talent` MODIFY COLUMN `Description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL FIRST; + +ALTER TABLE `pvp_talent_category` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `pvp_talent_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `pvp_talent_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `pvp_talent_locale` MODIFY COLUMN `Description_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `pvp_talent_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `pvp_talent_slot_unlock` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `quest_faction_reward` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `quest_money_reward` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `quest_package_item` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `quest_sort` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `quest_sort` MODIFY COLUMN `SortName` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; + +ALTER TABLE `quest_sort_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `quest_sort_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `quest_sort_locale` MODIFY COLUMN `SortName_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `quest_sort_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `quest_v2` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `quest_xp` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `rand_prop_points` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `reward_pack` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `reward_pack_x_currency_type` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `reward_pack_x_item` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `scaling_stat_distribution` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `scenario` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `scenario` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; + +ALTER TABLE `scenario_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `scenario_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `scenario_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `scenario_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `scenario_step` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `scenario_step` MODIFY COLUMN `Description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; +ALTER TABLE `scenario_step` MODIFY COLUMN `Title` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Description`; + +ALTER TABLE `scenario_step_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `scenario_step_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `scenario_step_locale` MODIFY COLUMN `Description_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `scenario_step_locale` MODIFY COLUMN `Title_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Description_lang`; +ALTER TABLE `scenario_step_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `scene_script` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `scene_script_global_text` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `scene_script_global_text` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; +ALTER TABLE `scene_script_global_text` MODIFY COLUMN `Script` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name`; + +ALTER TABLE `scene_script_package` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `scene_script_package` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; + +ALTER TABLE `scene_script_text` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `scene_script_text` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; +ALTER TABLE `scene_script_text` MODIFY COLUMN `Script` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name`; + +ALTER TABLE `skill_line` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `skill_line` MODIFY COLUMN `DisplayName` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL FIRST; +ALTER TABLE `skill_line` MODIFY COLUMN `AlternateVerb` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `DisplayName`; +ALTER TABLE `skill_line` MODIFY COLUMN `Description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `AlternateVerb`; +ALTER TABLE `skill_line` MODIFY COLUMN `HordeDisplayName` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Description`; +ALTER TABLE `skill_line` MODIFY COLUMN `OverrideSourceInfoDisplayName` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `HordeDisplayName`; + +ALTER TABLE `skill_line_ability` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `skill_line_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `skill_line_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `skill_line_locale` MODIFY COLUMN `DisplayName_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `skill_line_locale` MODIFY COLUMN `AlternateVerb_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `DisplayName_lang`; +ALTER TABLE `skill_line_locale` MODIFY COLUMN `Description_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `AlternateVerb_lang`; +ALTER TABLE `skill_line_locale` MODIFY COLUMN `HordeDisplayName_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Description_lang`; +ALTER TABLE `skill_line_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `skill_race_class_info` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `sound_kit` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `spec_set_member` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `specialization_spells` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `specialization_spells` MODIFY COLUMN `Description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL FIRST; + +ALTER TABLE `specialization_spells_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `specialization_spells_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `specialization_spells_locale` MODIFY COLUMN `Description_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `specialization_spells_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `spell_aura_options` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `spell_aura_restrictions` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `spell_cast_times` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `spell_casting_requirements` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `spell_categories` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `spell_category` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `spell_category` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; + +ALTER TABLE `spell_category_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `spell_category_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `spell_category_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `spell_category_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `spell_class_options` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `spell_cooldowns` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `spell_duration` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `spell_effect` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `spell_equipped_items` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `spell_focus_object` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `spell_focus_object` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; + +ALTER TABLE `spell_focus_object_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `spell_focus_object_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `spell_focus_object_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `spell_focus_object_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `spell_interrupts` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `spell_item_enchantment` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `spell_item_enchantment` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; +ALTER TABLE `spell_item_enchantment` MODIFY COLUMN `HordeName` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name`; + +ALTER TABLE `spell_item_enchantment_condition` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `spell_item_enchantment_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `spell_item_enchantment_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `spell_item_enchantment_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `spell_item_enchantment_locale` MODIFY COLUMN `HordeName_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name_lang`; + +ALTER TABLE `spell_item_enchantment_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `spell_learn_spell` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `spell_levels` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `spell_misc` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `spell_name` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `spell_name` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; + +ALTER TABLE `spell_name_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `spell_name_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `spell_name_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `spell_name_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `spell_power` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `spell_power_difficulty` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `spell_procs_per_minute` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `spell_procs_per_minute_mod` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `spell_radius` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `spell_range` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `spell_range` MODIFY COLUMN `DisplayName` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; +ALTER TABLE `spell_range` MODIFY COLUMN `DisplayNameShort` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `DisplayName`; + +ALTER TABLE `spell_range_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `spell_range_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `spell_range_locale` MODIFY COLUMN `DisplayName_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `spell_range_locale` MODIFY COLUMN `DisplayNameShort_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `DisplayName_lang`; +ALTER TABLE `spell_range_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `spell_reagents` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `spell_scaling` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `spell_shapeshift` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `spell_shapeshift_form` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `spell_shapeshift_form` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; + +ALTER TABLE `spell_shapeshift_form_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `spell_shapeshift_form_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `spell_shapeshift_form_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `spell_shapeshift_form_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `spell_target_restrictions` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `spell_totems` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `spell_visual_kit` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `spell_x_spell_visual` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `summon_properties` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `tact_key` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `talent` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `talent` MODIFY COLUMN `Description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; + +ALTER TABLE `talent_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `talent_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `talent_locale` MODIFY COLUMN `Description_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `talent_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `taxi_nodes` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `taxi_nodes` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL FIRST; + +ALTER TABLE `taxi_nodes_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `taxi_nodes_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `taxi_nodes_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `taxi_nodes_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `taxi_path` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `taxi_path_node` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `totem_category` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `totem_category` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; + +ALTER TABLE `totem_category_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `totem_category_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `totem_category_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `totem_category_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `toy` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `toy` MODIFY COLUMN `SourceText` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL FIRST; + +ALTER TABLE `toy_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `toy_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `toy_locale` MODIFY COLUMN `SourceText_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `toy_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `transmog_holiday` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `transmog_set` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `transmog_set` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL FIRST; + +ALTER TABLE `transmog_set_group` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `transmog_set_group` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL FIRST; + +ALTER TABLE `transmog_set_group_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `transmog_set_group_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `transmog_set_group_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `transmog_set_group_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `transmog_set_item` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `transmog_set_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `transmog_set_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `transmog_set_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `transmog_set_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `transport_animation` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `transport_rotation` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `ui_map` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `ui_map` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL FIRST; + +ALTER TABLE `ui_map_assignment` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `ui_map_link` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `ui_map_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `ui_map_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `ui_map_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `ui_map_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `ui_map_x_map_art` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `unit_power_bar` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `unit_power_bar` MODIFY COLUMN `Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; +ALTER TABLE `unit_power_bar` MODIFY COLUMN `Cost` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name`; +ALTER TABLE `unit_power_bar` MODIFY COLUMN `OutOfError` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Cost`; +ALTER TABLE `unit_power_bar` MODIFY COLUMN `ToolTip` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `OutOfError`; + +ALTER TABLE `unit_power_bar_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `unit_power_bar_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `unit_power_bar_locale` MODIFY COLUMN `Name_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `unit_power_bar_locale` MODIFY COLUMN `Cost_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Name_lang`; +ALTER TABLE `unit_power_bar_locale` MODIFY COLUMN `OutOfError_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `Cost_lang`; +ALTER TABLE `unit_power_bar_locale` MODIFY COLUMN `ToolTip_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `OutOfError_lang`; +ALTER TABLE `unit_power_bar_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `vehicle` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `vehicle_seat` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `wmo_area_table` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `wmo_area_table` MODIFY COLUMN `AreaName` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL FIRST; + +ALTER TABLE `wmo_area_table_locale` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `wmo_area_table_locale` MODIFY COLUMN `locale` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL AFTER `ID`; +ALTER TABLE `wmo_area_table_locale` MODIFY COLUMN `AreaName_lang` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `locale`; +ALTER TABLE `wmo_area_table_locale` ADD INDEX `idx_locale`(`locale`); + +ALTER TABLE `world_effect` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `world_map_overlay` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; + +ALTER TABLE `world_state_expression` CHARACTER SET=utf8mb4, COLLATE=utf8mb4_unicode_ci; +ALTER TABLE `world_state_expression` MODIFY COLUMN `Expression` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL AFTER `ID`; diff --git a/src/server/database/Database/Implementation/HotfixDatabase.cpp b/src/server/database/Database/Implementation/HotfixDatabase.cpp index fbc14556cf5..ada118d4830 100644 --- a/src/server/database/Database/Implementation/HotfixDatabase.cpp +++ b/src/server/database/Database/Implementation/HotfixDatabase.cpp @@ -21,9 +21,14 @@ #include "HotfixDatabase.h" #include "MySQLPreparedStatement.h" -// Force locale statments to appear exactly in locale declaration order, right after normal data fetch statement +// Force max id statements to appear exactly right after normal data fetch statement +#define PREPARE_MAX_ID_STMT(stmtBase, sql, con) \ + static_assert(stmtBase + 1 == stmtBase##_MAX_ID, "Invalid prepared statement index for " #stmtBase "_MAX_ID"); \ + PrepareStatement(stmtBase##_MAX_ID, sql, con); + +// Force locale statements to be right after max id fetch statement #define PREPARE_LOCALE_STMT(stmtBase, sql, con) \ - static_assert(stmtBase + 1 == stmtBase##_LOCALE, "Invalid prepared statement index for " #stmtBase "_LOCALE"); \ + static_assert(stmtBase + 2 == stmtBase##_LOCALE, "Invalid prepared statement index for " #stmtBase "_LOCALE"); \ PrepareStatement(stmtBase##_LOCALE, sql, con); void HotfixDatabaseConnection::DoPrepareStatements() @@ -33,206 +38,248 @@ void HotfixDatabaseConnection::DoPrepareStatements() // Achievement.db2 PrepareStatement(HOTFIX_SEL_ACHIEVEMENT, "SELECT Description, Title, Reward, ID, InstanceID, Faction, Supercedes, Category, MinimumCriteria, " - "Points, Flags, UiOrder, IconFileID, RewardItemID, CriteriaTree, SharesCriteria FROM achievement ORDER BY ID DESC", CONNECTION_SYNCH); + "Points, Flags, UiOrder, IconFileID, RewardItemID, CriteriaTree, SharesCriteria FROM achievement", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ACHIEVEMENT, "SELECT MAX(ID) + 1 FROM achievement", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_ACHIEVEMENT, "SELECT ID, Description_lang, Title_lang, Reward_lang FROM achievement_locale WHERE locale = ?", CONNECTION_SYNCH); // AnimationData.db2 - PrepareStatement(HOTFIX_SEL_ANIMATION_DATA, "SELECT ID, BehaviorID, BehaviorTier, Fallback, Flags1, Flags2 FROM animation_data ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ANIMATION_DATA, "SELECT ID, BehaviorID, BehaviorTier, Fallback, Flags1, Flags2 FROM animation_data", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ANIMATION_DATA, "SELECT MAX(ID) + 1 FROM animation_data", CONNECTION_SYNCH); // AnimKit.db2 - PrepareStatement(HOTFIX_SEL_ANIM_KIT, "SELECT ID, OneShotDuration, OneShotStopAnimKitID, LowDefAnimKitID FROM anim_kit ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ANIM_KIT, "SELECT ID, OneShotDuration, OneShotStopAnimKitID, LowDefAnimKitID FROM anim_kit", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ANIM_KIT, "SELECT MAX(ID) + 1 FROM anim_kit", CONNECTION_SYNCH); // AreaGroupMember.db2 - PrepareStatement(HOTFIX_SEL_AREA_GROUP_MEMBER, "SELECT ID, AreaID, AreaGroupID FROM area_group_member ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_AREA_GROUP_MEMBER, "SELECT ID, AreaID, AreaGroupID FROM area_group_member", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_AREA_GROUP_MEMBER, "SELECT MAX(ID) + 1 FROM area_group_member", CONNECTION_SYNCH); // AreaTable.db2 PrepareStatement(HOTFIX_SEL_AREA_TABLE, "SELECT ID, ZoneName, AreaName, ContinentID, ParentAreaID, AreaBit, SoundProviderPref, " "SoundProviderPrefUnderwater, AmbienceID, UwAmbience, ZoneMusic, UwZoneMusic, ExplorationLevel, IntroSound, UwIntroSound, FactionGroupMask, " "AmbientMultiplier, MountFlags, PvpCombatWorldStateID, WildBattlePetLevelMin, WildBattlePetLevelMax, WindSettingsID, Flags1, Flags2, " - "LiquidTypeID1, LiquidTypeID2, LiquidTypeID3, LiquidTypeID4 FROM area_table ORDER BY ID DESC", CONNECTION_SYNCH); + "LiquidTypeID1, LiquidTypeID2, LiquidTypeID3, LiquidTypeID4 FROM area_table", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_AREA_TABLE, "SELECT MAX(ID) + 1 FROM area_table", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_AREA_TABLE, "SELECT ID, AreaName_lang FROM area_table_locale WHERE locale = ?", CONNECTION_SYNCH); // AreaTrigger.db2 PrepareStatement(HOTFIX_SEL_AREA_TRIGGER, "SELECT PosX, PosY, PosZ, ID, ContinentID, PhaseUseFlags, PhaseID, PhaseGroupID, Radius, BoxLength, " - "BoxWidth, BoxHeight, BoxYaw, ShapeType, ShapeID, AreaTriggerActionSetID, Flags FROM area_trigger ORDER BY ID DESC", CONNECTION_SYNCH); + "BoxWidth, BoxHeight, BoxYaw, ShapeType, ShapeID, AreaTriggerActionSetID, Flags FROM area_trigger", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_AREA_TRIGGER, "SELECT MAX(ID) + 1 FROM area_trigger", CONNECTION_SYNCH); // ArmorLocation.db2 - PrepareStatement(HOTFIX_SEL_ARMOR_LOCATION, "SELECT ID, Clothmodifier, Leathermodifier, Chainmodifier, Platemodifier, Modifier FROM armor_location" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ARMOR_LOCATION, "SELECT ID, Clothmodifier, Leathermodifier, Chainmodifier, Platemodifier, Modifier FROM armor_location", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ARMOR_LOCATION, "SELECT MAX(ID) + 1 FROM armor_location", CONNECTION_SYNCH); // Artifact.db2 PrepareStatement(HOTFIX_SEL_ARTIFACT, "SELECT Name, ID, UiTextureKitID, UiNameColor, UiBarOverlayColor, UiBarBackgroundColor, " - "ChrSpecializationID, Flags, ArtifactCategoryID, UiModelSceneID, SpellVisualKitID FROM artifact ORDER BY ID DESC", CONNECTION_SYNCH); + "ChrSpecializationID, Flags, ArtifactCategoryID, UiModelSceneID, SpellVisualKitID FROM artifact", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ARTIFACT, "SELECT MAX(ID) + 1 FROM artifact", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_ARTIFACT, "SELECT ID, Name_lang FROM artifact_locale WHERE locale = ?", CONNECTION_SYNCH); // ArtifactAppearance.db2 PrepareStatement(HOTFIX_SEL_ARTIFACT_APPEARANCE, "SELECT Name, ID, ArtifactAppearanceSetID, DisplayIndex, UnlockPlayerConditionID, " "ItemAppearanceModifierID, UiSwatchColor, UiModelSaturation, UiModelOpacity, OverrideShapeshiftFormID, OverrideShapeshiftDisplayID, " - "UiItemAppearanceID, UiAltItemAppearanceID, Flags, UiCameraID, UsablePlayerConditionID FROM artifact_appearance ORDER BY ID DESC", CONNECTION_SYNCH); + "UiItemAppearanceID, UiAltItemAppearanceID, Flags, UiCameraID, UsablePlayerConditionID FROM artifact_appearance", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ARTIFACT_APPEARANCE, "SELECT MAX(ID) + 1 FROM artifact_appearance", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_ARTIFACT_APPEARANCE, "SELECT ID, Name_lang FROM artifact_appearance_locale WHERE locale = ?", CONNECTION_SYNCH); // ArtifactAppearanceSet.db2 PrepareStatement(HOTFIX_SEL_ARTIFACT_APPEARANCE_SET, "SELECT Name, Description, ID, DisplayIndex, UiCameraID, AltHandUICameraID, " - "ForgeAttachmentOverride, Flags, ArtifactID FROM artifact_appearance_set ORDER BY ID DESC", CONNECTION_SYNCH); + "ForgeAttachmentOverride, Flags, ArtifactID FROM artifact_appearance_set", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ARTIFACT_APPEARANCE_SET, "SELECT MAX(ID) + 1 FROM artifact_appearance_set", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_ARTIFACT_APPEARANCE_SET, "SELECT ID, Name_lang, Description_lang FROM artifact_appearance_set_locale" " WHERE locale = ?", CONNECTION_SYNCH); // ArtifactCategory.db2 - PrepareStatement(HOTFIX_SEL_ARTIFACT_CATEGORY, "SELECT ID, XpMultCurrencyID, XpMultCurveID FROM artifact_category ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ARTIFACT_CATEGORY, "SELECT ID, XpMultCurrencyID, XpMultCurveID FROM artifact_category", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ARTIFACT_CATEGORY, "SELECT MAX(ID) + 1 FROM artifact_category", CONNECTION_SYNCH); // ArtifactPower.db2 PrepareStatement(HOTFIX_SEL_ARTIFACT_POWER, "SELECT DisplayPosX, DisplayPosY, ID, ArtifactID, MaxPurchasableRank, Label, Flags, Tier" - " FROM artifact_power ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM artifact_power", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ARTIFACT_POWER, "SELECT MAX(ID) + 1 FROM artifact_power", CONNECTION_SYNCH); // ArtifactPowerLink.db2 - PrepareStatement(HOTFIX_SEL_ARTIFACT_POWER_LINK, "SELECT ID, PowerA, PowerB FROM artifact_power_link ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ARTIFACT_POWER_LINK, "SELECT ID, PowerA, PowerB FROM artifact_power_link", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ARTIFACT_POWER_LINK, "SELECT MAX(ID) + 1 FROM artifact_power_link", CONNECTION_SYNCH); // ArtifactPowerPicker.db2 - PrepareStatement(HOTFIX_SEL_ARTIFACT_POWER_PICKER, "SELECT ID, PlayerConditionID FROM artifact_power_picker ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ARTIFACT_POWER_PICKER, "SELECT ID, PlayerConditionID FROM artifact_power_picker", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ARTIFACT_POWER_PICKER, "SELECT MAX(ID) + 1 FROM artifact_power_picker", CONNECTION_SYNCH); // ArtifactPowerRank.db2 PrepareStatement(HOTFIX_SEL_ARTIFACT_POWER_RANK, "SELECT ID, RankIndex, SpellID, ItemBonusListID, AuraPointsOverride, ArtifactPowerID" - " FROM artifact_power_rank ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM artifact_power_rank", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ARTIFACT_POWER_RANK, "SELECT MAX(ID) + 1 FROM artifact_power_rank", CONNECTION_SYNCH); // ArtifactQuestXp.db2 PrepareStatement(HOTFIX_SEL_ARTIFACT_QUEST_XP, "SELECT ID, Difficulty1, Difficulty2, Difficulty3, Difficulty4, Difficulty5, Difficulty6, " - "Difficulty7, Difficulty8, Difficulty9, Difficulty10 FROM artifact_quest_xp ORDER BY ID DESC", CONNECTION_SYNCH); + "Difficulty7, Difficulty8, Difficulty9, Difficulty10 FROM artifact_quest_xp", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ARTIFACT_QUEST_XP, "SELECT MAX(ID) + 1 FROM artifact_quest_xp", CONNECTION_SYNCH); // ArtifactTier.db2 PrepareStatement(HOTFIX_SEL_ARTIFACT_TIER, "SELECT ID, ArtifactTier, MaxNumTraits, MaxArtifactKnowledge, KnowledgePlayerCondition, " - "MinimumEmpowerKnowledge FROM artifact_tier ORDER BY ID DESC", CONNECTION_SYNCH); + "MinimumEmpowerKnowledge FROM artifact_tier", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ARTIFACT_TIER, "SELECT MAX(ID) + 1 FROM artifact_tier", CONNECTION_SYNCH); // ArtifactUnlock.db2 - PrepareStatement(HOTFIX_SEL_ARTIFACT_UNLOCK, "SELECT ID, PowerID, PowerRank, ItemBonusListID, PlayerConditionID, ArtifactID FROM artifact_unlock" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ARTIFACT_UNLOCK, "SELECT ID, PowerID, PowerRank, ItemBonusListID, PlayerConditionID, ArtifactID FROM artifact_unlock", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ARTIFACT_UNLOCK, "SELECT MAX(ID) + 1 FROM artifact_unlock", CONNECTION_SYNCH); // AuctionHouse.db2 - PrepareStatement(HOTFIX_SEL_AUCTION_HOUSE, "SELECT ID, Name, FactionID, DepositRate, ConsignmentRate FROM auction_house ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_AUCTION_HOUSE, "SELECT ID, Name, FactionID, DepositRate, ConsignmentRate FROM auction_house", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_AUCTION_HOUSE, "SELECT MAX(ID) + 1 FROM auction_house", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_AUCTION_HOUSE, "SELECT ID, Name_lang FROM auction_house_locale WHERE locale = ?", CONNECTION_SYNCH); // AzeriteEmpoweredItem.db2 - PrepareStatement(HOTFIX_SEL_AZERITE_EMPOWERED_ITEM, "SELECT ID, ItemID, AzeriteTierUnlockSetID, AzeritePowerSetID FROM azerite_empowered_item" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_AZERITE_EMPOWERED_ITEM, "SELECT ID, ItemID, AzeriteTierUnlockSetID, AzeritePowerSetID FROM azerite_empowered_item", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_AZERITE_EMPOWERED_ITEM, "SELECT MAX(ID) + 1 FROM azerite_empowered_item", CONNECTION_SYNCH); // AzeriteEssence.db2 - PrepareStatement(HOTFIX_SEL_AZERITE_ESSENCE, "SELECT Name, Description, ID, SpecSetID FROM azerite_essence ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_AZERITE_ESSENCE, "SELECT Name, Description, ID, SpecSetID FROM azerite_essence", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_AZERITE_ESSENCE, "SELECT MAX(ID) + 1 FROM azerite_essence", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_AZERITE_ESSENCE, "SELECT ID, Name_lang, Description_lang FROM azerite_essence_locale WHERE locale = ?", CONNECTION_SYNCH); // AzeriteEssencePower.db2 PrepareStatement(HOTFIX_SEL_AZERITE_ESSENCE_POWER, "SELECT ID, SourceAlliance, SourceHorde, AzeriteEssenceID, Tier, MajorPowerDescription, " - "MinorPowerDescription, MajorPowerActual, MinorPowerActual FROM azerite_essence_power ORDER BY ID DESC", CONNECTION_SYNCH); + "MinorPowerDescription, MajorPowerActual, MinorPowerActual FROM azerite_essence_power", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_AZERITE_ESSENCE_POWER, "SELECT MAX(ID) + 1 FROM azerite_essence_power", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_AZERITE_ESSENCE_POWER, "SELECT ID, SourceAlliance_lang, SourceHorde_lang FROM azerite_essence_power_locale" " WHERE locale = ?", CONNECTION_SYNCH); // AzeriteItem.db2 - PrepareStatement(HOTFIX_SEL_AZERITE_ITEM, "SELECT ID, ItemID FROM azerite_item ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_AZERITE_ITEM, "SELECT ID, ItemID FROM azerite_item", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_AZERITE_ITEM, "SELECT MAX(ID) + 1 FROM azerite_item", CONNECTION_SYNCH); // AzeriteItemMilestonePower.db2 PrepareStatement(HOTFIX_SEL_AZERITE_ITEM_MILESTONE_POWER, "SELECT ID, RequiredLevel, AzeritePowerID, Type, AutoUnlock" - " FROM azerite_item_milestone_power ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM azerite_item_milestone_power", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_AZERITE_ITEM_MILESTONE_POWER, "SELECT MAX(ID) + 1 FROM azerite_item_milestone_power", CONNECTION_SYNCH); // AzeriteKnowledgeMultiplier.db2 - PrepareStatement(HOTFIX_SEL_AZERITE_KNOWLEDGE_MULTIPLIER, "SELECT ID, Multiplier FROM azerite_knowledge_multiplier ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_AZERITE_KNOWLEDGE_MULTIPLIER, "SELECT ID, Multiplier FROM azerite_knowledge_multiplier", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_AZERITE_KNOWLEDGE_MULTIPLIER, "SELECT MAX(ID) + 1 FROM azerite_knowledge_multiplier", CONNECTION_SYNCH); // AzeriteLevelInfo.db2 PrepareStatement(HOTFIX_SEL_AZERITE_LEVEL_INFO, "SELECT ID, BaseExperienceToNextLevel, MinimumExperienceToNextLevel, ItemLevel" - " FROM azerite_level_info ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM azerite_level_info", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_AZERITE_LEVEL_INFO, "SELECT MAX(ID) + 1 FROM azerite_level_info", CONNECTION_SYNCH); // AzeritePower.db2 - PrepareStatement(HOTFIX_SEL_AZERITE_POWER, "SELECT ID, SpellID, ItemBonusListID, SpecSetID, Flags FROM azerite_power ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_AZERITE_POWER, "SELECT ID, SpellID, ItemBonusListID, SpecSetID, Flags FROM azerite_power", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_AZERITE_POWER, "SELECT MAX(ID) + 1 FROM azerite_power", CONNECTION_SYNCH); // AzeritePowerSetMember.db2 PrepareStatement(HOTFIX_SEL_AZERITE_POWER_SET_MEMBER, "SELECT ID, AzeritePowerSetID, AzeritePowerID, Class, Tier, OrderIndex" - " FROM azerite_power_set_member ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM azerite_power_set_member", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_AZERITE_POWER_SET_MEMBER, "SELECT MAX(ID) + 1 FROM azerite_power_set_member", CONNECTION_SYNCH); // AzeriteTierUnlock.db2 PrepareStatement(HOTFIX_SEL_AZERITE_TIER_UNLOCK, "SELECT ID, ItemCreationContext, Tier, AzeriteLevel, AzeriteTierUnlockSetID" - " FROM azerite_tier_unlock ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM azerite_tier_unlock", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_AZERITE_TIER_UNLOCK, "SELECT MAX(ID) + 1 FROM azerite_tier_unlock", CONNECTION_SYNCH); // AzeriteTierUnlockSet.db2 - PrepareStatement(HOTFIX_SEL_AZERITE_TIER_UNLOCK_SET, "SELECT ID, Flags FROM azerite_tier_unlock_set ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_AZERITE_TIER_UNLOCK_SET, "SELECT ID, Flags FROM azerite_tier_unlock_set", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_AZERITE_TIER_UNLOCK_SET, "SELECT MAX(ID) + 1 FROM azerite_tier_unlock_set", CONNECTION_SYNCH); // AzeriteUnlockMapping.db2 PrepareStatement(HOTFIX_SEL_AZERITE_UNLOCK_MAPPING, "SELECT ID, ItemLevel, ItemBonusListHead, ItemBonusListShoulders, ItemBonusListChest, " - "AzeriteUnlockMappingSetID FROM azerite_unlock_mapping ORDER BY ID DESC", CONNECTION_SYNCH); + "AzeriteUnlockMappingSetID FROM azerite_unlock_mapping", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_AZERITE_UNLOCK_MAPPING, "SELECT MAX(ID) + 1 FROM azerite_unlock_mapping", CONNECTION_SYNCH); // BankBagSlotPrices.db2 - PrepareStatement(HOTFIX_SEL_BANK_BAG_SLOT_PRICES, "SELECT ID, Cost FROM bank_bag_slot_prices ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_BANK_BAG_SLOT_PRICES, "SELECT ID, Cost FROM bank_bag_slot_prices", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_BANK_BAG_SLOT_PRICES, "SELECT MAX(ID) + 1 FROM bank_bag_slot_prices", CONNECTION_SYNCH); // BannedAddons.db2 - PrepareStatement(HOTFIX_SEL_BANNED_ADDONS, "SELECT ID, Name, Version, Flags FROM banned_addons ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_BANNED_ADDONS, "SELECT ID, Name, Version, Flags FROM banned_addons", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_BANNED_ADDONS, "SELECT MAX(ID) + 1 FROM banned_addons", CONNECTION_SYNCH); // BarberShopStyle.db2 - PrepareStatement(HOTFIX_SEL_BARBER_SHOP_STYLE, "SELECT DisplayName, Description, ID, Type, CostModifier, Race, Sex, Data FROM barber_shop_style" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_BARBER_SHOP_STYLE, "SELECT DisplayName, Description, ID, Type, CostModifier, Race, Sex, Data FROM barber_shop_style", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_BARBER_SHOP_STYLE, "SELECT MAX(ID) + 1 FROM barber_shop_style", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_BARBER_SHOP_STYLE, "SELECT ID, DisplayName_lang, Description_lang FROM barber_shop_style_locale WHERE locale = ?", CONNECTION_SYNCH); // BattlePetBreedQuality.db2 - PrepareStatement(HOTFIX_SEL_BATTLE_PET_BREED_QUALITY, "SELECT ID, StateMultiplier, QualityEnum FROM battle_pet_breed_quality ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_BATTLE_PET_BREED_QUALITY, "SELECT ID, StateMultiplier, QualityEnum FROM battle_pet_breed_quality", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_BATTLE_PET_BREED_QUALITY, "SELECT MAX(ID) + 1 FROM battle_pet_breed_quality", CONNECTION_SYNCH); // BattlePetBreedState.db2 - PrepareStatement(HOTFIX_SEL_BATTLE_PET_BREED_STATE, "SELECT ID, BattlePetStateID, Value, BattlePetBreedID FROM battle_pet_breed_state" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_BATTLE_PET_BREED_STATE, "SELECT ID, BattlePetStateID, Value, BattlePetBreedID FROM battle_pet_breed_state", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_BATTLE_PET_BREED_STATE, "SELECT MAX(ID) + 1 FROM battle_pet_breed_state", CONNECTION_SYNCH); // BattlePetSpecies.db2 PrepareStatement(HOTFIX_SEL_BATTLE_PET_SPECIES, "SELECT Description, SourceText, ID, CreatureID, SummonSpellID, IconFileDataID, PetTypeEnum, " - "Flags, SourceTypeEnum, CardUIModelSceneID, LoadoutUIModelSceneID FROM battle_pet_species ORDER BY ID DESC", CONNECTION_SYNCH); + "Flags, SourceTypeEnum, CardUIModelSceneID, LoadoutUIModelSceneID FROM battle_pet_species", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_BATTLE_PET_SPECIES, "SELECT MAX(ID) + 1 FROM battle_pet_species", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_BATTLE_PET_SPECIES, "SELECT ID, Description_lang, SourceText_lang FROM battle_pet_species_locale WHERE locale = ?", CONNECTION_SYNCH); // BattlePetSpeciesState.db2 - PrepareStatement(HOTFIX_SEL_BATTLE_PET_SPECIES_STATE, "SELECT ID, BattlePetStateID, Value, BattlePetSpeciesID FROM battle_pet_species_state" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_BATTLE_PET_SPECIES_STATE, "SELECT ID, BattlePetStateID, Value, BattlePetSpeciesID FROM battle_pet_species_state", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_BATTLE_PET_SPECIES_STATE, "SELECT MAX(ID) + 1 FROM battle_pet_species_state", CONNECTION_SYNCH); // BattlemasterList.db2 PrepareStatement(HOTFIX_SEL_BATTLEMASTER_LIST, "SELECT ID, Name, GameType, ShortDescription, LongDescription, InstanceType, MinLevel, MaxLevel, " "RatedPlayers, MinPlayers, MaxPlayers, GroupsAllowed, MaxGroupSize, HolidayWorldState, Flags, IconFileDataID, RequiredPlayerConditionID, " "MapID1, MapID2, MapID3, MapID4, MapID5, MapID6, MapID7, MapID8, MapID9, MapID10, MapID11, MapID12, MapID13, MapID14, MapID15, MapID16" - " FROM battlemaster_list ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM battlemaster_list", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_BATTLEMASTER_LIST, "SELECT MAX(ID) + 1 FROM battlemaster_list", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_BATTLEMASTER_LIST, "SELECT ID, Name_lang, GameType_lang, ShortDescription_lang, LongDescription_lang" " FROM battlemaster_list_locale WHERE locale = ?", CONNECTION_SYNCH); // BroadcastText.db2 PrepareStatement(HOTFIX_SEL_BROADCAST_TEXT, "SELECT Text, Text1, ID, LanguageID, ConditionID, EmotesID, Flags, ChatBubbleDurationMs, " - "SoundEntriesID1, SoundEntriesID2, EmoteID1, EmoteID2, EmoteID3, EmoteDelay1, EmoteDelay2, EmoteDelay3 FROM broadcast_text ORDER BY ID DESC", CONNECTION_SYNCH); + "SoundEntriesID1, SoundEntriesID2, EmoteID1, EmoteID2, EmoteID3, EmoteDelay1, EmoteDelay2, EmoteDelay3 FROM broadcast_text", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_BROADCAST_TEXT, "SELECT MAX(ID) + 1 FROM broadcast_text", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_BROADCAST_TEXT, "SELECT ID, Text_lang, Text1_lang FROM broadcast_text_locale WHERE locale = ?", CONNECTION_SYNCH); // CfgRegions.db2 - PrepareStatement(HOTFIX_SEL_CFG_REGIONS, "SELECT ID, Tag, RegionID, Raidorigin, RegionGroupMask, ChallengeOrigin FROM cfg_regions ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_CFG_REGIONS, "SELECT ID, Tag, RegionID, Raidorigin, RegionGroupMask, ChallengeOrigin FROM cfg_regions", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_CFG_REGIONS, "SELECT MAX(ID) + 1 FROM cfg_regions", CONNECTION_SYNCH); // CharacterFacialHairStyles.db2 PrepareStatement(HOTFIX_SEL_CHARACTER_FACIAL_HAIR_STYLES, "SELECT ID, Geoset1, Geoset2, Geoset3, Geoset4, Geoset5, RaceID, SexID, VariationID" - " FROM character_facial_hair_styles ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM character_facial_hair_styles", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_CHARACTER_FACIAL_HAIR_STYLES, "SELECT MAX(ID) + 1 FROM character_facial_hair_styles", CONNECTION_SYNCH); // CharBaseSection.db2 - PrepareStatement(HOTFIX_SEL_CHAR_BASE_SECTION, "SELECT ID, LayoutResType, VariationEnum, ResolutionVariationEnum FROM char_base_section" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_CHAR_BASE_SECTION, "SELECT ID, LayoutResType, VariationEnum, ResolutionVariationEnum FROM char_base_section", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_CHAR_BASE_SECTION, "SELECT MAX(ID) + 1 FROM char_base_section", CONNECTION_SYNCH); // CharSections.db2 PrepareStatement(HOTFIX_SEL_CHAR_SECTIONS, "SELECT ID, RaceID, SexID, BaseSection, VariationIndex, ColorIndex, Flags, MaterialResourcesID1, " - "MaterialResourcesID2, MaterialResourcesID3 FROM char_sections ORDER BY ID DESC", CONNECTION_SYNCH); + "MaterialResourcesID2, MaterialResourcesID3 FROM char_sections", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_CHAR_SECTIONS, "SELECT MAX(ID) + 1 FROM char_sections", CONNECTION_SYNCH); // CharStartOutfit.db2 PrepareStatement(HOTFIX_SEL_CHAR_START_OUTFIT, "SELECT ID, ClassID, SexID, OutfitID, PetDisplayID, PetFamilyID, ItemID1, ItemID2, ItemID3, " "ItemID4, ItemID5, ItemID6, ItemID7, ItemID8, ItemID9, ItemID10, ItemID11, ItemID12, ItemID13, ItemID14, ItemID15, ItemID16, ItemID17, " - "ItemID18, ItemID19, ItemID20, ItemID21, ItemID22, ItemID23, ItemID24, RaceID FROM char_start_outfit ORDER BY ID DESC", CONNECTION_SYNCH); + "ItemID18, ItemID19, ItemID20, ItemID21, ItemID22, ItemID23, ItemID24, RaceID FROM char_start_outfit", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_CHAR_START_OUTFIT, "SELECT MAX(ID) + 1 FROM char_start_outfit", CONNECTION_SYNCH); // CharTitles.db2 - PrepareStatement(HOTFIX_SEL_CHAR_TITLES, "SELECT ID, Name, Name1, MaskID, Flags FROM char_titles ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_CHAR_TITLES, "SELECT ID, Name, Name1, MaskID, Flags FROM char_titles", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_CHAR_TITLES, "SELECT MAX(ID) + 1 FROM char_titles", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_CHAR_TITLES, "SELECT ID, Name_lang, Name1_lang FROM char_titles_locale WHERE locale = ?", CONNECTION_SYNCH); // ChatChannels.db2 - PrepareStatement(HOTFIX_SEL_CHAT_CHANNELS, "SELECT ID, Name, Shortcut, Flags, FactionGroup FROM chat_channels ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_CHAT_CHANNELS, "SELECT ID, Name, Shortcut, Flags, FactionGroup FROM chat_channels", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_CHAT_CHANNELS, "SELECT MAX(ID) + 1 FROM chat_channels", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_CHAT_CHANNELS, "SELECT ID, Name_lang, Shortcut_lang FROM chat_channels_locale WHERE locale = ?", CONNECTION_SYNCH); // ChrClasses.db2 PrepareStatement(HOTFIX_SEL_CHR_CLASSES, "SELECT Name, Filename, NameMale, NameFemale, PetNameToken, ID, CreateScreenFileDataID, " "SelectScreenFileDataID, IconFileDataID, LowResScreenFileDataID, StartingLevel, SpellTextureBlobFileDataID, Flags, CinematicSequenceID, " "DefaultSpec, PrimaryStatPriority, DisplayPower, RangedAttackPowerPerAgility, AttackPowerPerAgility, AttackPowerPerStrength, SpellClassSet" - " FROM chr_classes ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM chr_classes", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_CHR_CLASSES, "SELECT MAX(ID) + 1 FROM chr_classes", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_CHR_CLASSES, "SELECT ID, Name_lang, NameMale_lang, NameFemale_lang FROM chr_classes_locale WHERE locale = ?", CONNECTION_SYNCH); // ChrClassesXPowerTypes.db2 - PrepareStatement(HOTFIX_SEL_CHR_CLASSES_X_POWER_TYPES, "SELECT ID, PowerType, ClassID FROM chr_classes_x_power_types ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_CHR_CLASSES_X_POWER_TYPES, "SELECT ID, PowerType, ClassID FROM chr_classes_x_power_types", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_CHR_CLASSES_X_POWER_TYPES, "SELECT MAX(ID) + 1 FROM chr_classes_x_power_types", CONNECTION_SYNCH); // ChrRaces.db2 PrepareStatement(HOTFIX_SEL_CHR_RACES, "SELECT ClientPrefix, ClientFileString, Name, NameFemale, NameLowercase, NameFemaleLowercase, ID, Flags, " @@ -244,50 +291,59 @@ void HotfixDatabaseConnection::DoPrepareStatements() "CinematicSequenceID, ResSicknessSpellID, SplashSoundID, BaseLanguage, CreatureType, Alliance, RaceRelated, UnalteredVisualRaceID, " "CharComponentTextureLayoutID, CharComponentTexLayoutHiResID, DefaultClassID, NeutralRaceID, MaleModelFallbackRaceID, MaleModelFallbackSex, " "FemaleModelFallbackRaceID, FemaleModelFallbackSex, MaleTextureFallbackRaceID, MaleTextureFallbackSex, FemaleTextureFallbackRaceID, " - "FemaleTextureFallbackSex FROM chr_races ORDER BY ID DESC", CONNECTION_SYNCH); + "FemaleTextureFallbackSex FROM chr_races", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_CHR_RACES, "SELECT MAX(ID) + 1 FROM chr_races", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_CHR_RACES, "SELECT ID, Name_lang, NameFemale_lang, NameLowercase_lang, NameFemaleLowercase_lang" " FROM chr_races_locale WHERE locale = ?", CONNECTION_SYNCH); // ChrSpecialization.db2 PrepareStatement(HOTFIX_SEL_CHR_SPECIALIZATION, "SELECT Name, FemaleName, Description, ID, ClassID, OrderIndex, PetTalentType, Role, Flags, " - "SpellIconFileID, PrimaryStatPriority, AnimReplacements, MasterySpellID1, MasterySpellID2 FROM chr_specialization ORDER BY ID DESC", CONNECTION_SYNCH); + "SpellIconFileID, PrimaryStatPriority, AnimReplacements, MasterySpellID1, MasterySpellID2 FROM chr_specialization", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_CHR_SPECIALIZATION, "SELECT MAX(ID) + 1 FROM chr_specialization", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_CHR_SPECIALIZATION, "SELECT ID, Name_lang, FemaleName_lang, Description_lang FROM chr_specialization_locale" " WHERE locale = ?", CONNECTION_SYNCH); // CinematicCamera.db2 - PrepareStatement(HOTFIX_SEL_CINEMATIC_CAMERA, "SELECT ID, OriginX, OriginY, OriginZ, SoundID, OriginFacing, FileDataID FROM cinematic_camera" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_CINEMATIC_CAMERA, "SELECT ID, OriginX, OriginY, OriginZ, SoundID, OriginFacing, FileDataID FROM cinematic_camera", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_CINEMATIC_CAMERA, "SELECT MAX(ID) + 1 FROM cinematic_camera", CONNECTION_SYNCH); // CinematicSequences.db2 PrepareStatement(HOTFIX_SEL_CINEMATIC_SEQUENCES, "SELECT ID, SoundID, Camera1, Camera2, Camera3, Camera4, Camera5, Camera6, Camera7, Camera8" - " FROM cinematic_sequences ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM cinematic_sequences", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_CINEMATIC_SEQUENCES, "SELECT MAX(ID) + 1 FROM cinematic_sequences", CONNECTION_SYNCH); // ContentTuning.db2 - PrepareStatement(HOTFIX_SEL_CONTENT_TUNING, "SELECT ID, MinLevel, MaxLevel, Flags, ExpansionID FROM content_tuning ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_CONTENT_TUNING, "SELECT ID, MinLevel, MaxLevel, Flags, ExpansionID FROM content_tuning", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_CONTENT_TUNING, "SELECT MAX(ID) + 1 FROM content_tuning", CONNECTION_SYNCH); // ContentTuningXExpected.db2 PrepareStatement(HOTFIX_SEL_CONTENT_TUNING_X_EXPECTED, "SELECT ID, ExpectedStatModID, MythicPlusSeasonID, ContentTuningID" - " FROM content_tuning_x_expected ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM content_tuning_x_expected", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_CONTENT_TUNING_X_EXPECTED, "SELECT MAX(ID) + 1 FROM content_tuning_x_expected", CONNECTION_SYNCH); // ConversationLine.db2 PrepareStatement(HOTFIX_SEL_CONVERSATION_LINE, "SELECT ID, BroadcastTextID, SpellVisualKitID, AdditionalDuration, NextConversationLineID, " - "AnimKitID, SpeechType, StartAnimation, EndAnimation FROM conversation_line ORDER BY ID DESC", CONNECTION_SYNCH); + "AnimKitID, SpeechType, StartAnimation, EndAnimation FROM conversation_line", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_CONVERSATION_LINE, "SELECT MAX(ID) + 1 FROM conversation_line", CONNECTION_SYNCH); // CreatureDisplayInfo.db2 PrepareStatement(HOTFIX_SEL_CREATURE_DISPLAY_INFO, "SELECT ID, ModelID, SoundID, SizeClass, CreatureModelScale, CreatureModelAlpha, BloodID, " "ExtendedDisplayInfoID, NPCSoundID, ParticleColorID, PortraitCreatureDisplayInfoID, PortraitTextureFileDataID, ObjectEffectPackageID, " "AnimReplacementSetID, Flags, StateSpellVisualKitID, PlayerOverrideScale, PetInstanceScale, UnarmedWeaponType, MountPoofSpellVisualKitID, " "DissolveEffectID, Gender, DissolveOutEffectID, CreatureModelMinLod, TextureVariationFileDataID1, TextureVariationFileDataID2, " - "TextureVariationFileDataID3 FROM creature_display_info ORDER BY ID DESC", CONNECTION_SYNCH); + "TextureVariationFileDataID3 FROM creature_display_info", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_CREATURE_DISPLAY_INFO, "SELECT MAX(ID) + 1 FROM creature_display_info", CONNECTION_SYNCH); // CreatureDisplayInfoExtra.db2 PrepareStatement(HOTFIX_SEL_CREATURE_DISPLAY_INFO_EXTRA, "SELECT ID, DisplayRaceID, DisplaySexID, DisplayClassID, SkinID, FaceID, HairStyleID, " "HairColorID, FacialHairID, Flags, BakeMaterialResourcesID, HDBakeMaterialResourcesID, CustomDisplayOption1, CustomDisplayOption2, " - "CustomDisplayOption3 FROM creature_display_info_extra ORDER BY ID DESC", CONNECTION_SYNCH); + "CustomDisplayOption3 FROM creature_display_info_extra", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_CREATURE_DISPLAY_INFO_EXTRA, "SELECT MAX(ID) + 1 FROM creature_display_info_extra", CONNECTION_SYNCH); // CreatureFamily.db2 PrepareStatement(HOTFIX_SEL_CREATURE_FAMILY, "SELECT ID, Name, MinScale, MinScaleLevel, MaxScale, MaxScaleLevel, PetFoodMask, PetTalentType, " - "IconFileID, SkillLine1, SkillLine2 FROM creature_family ORDER BY ID DESC", CONNECTION_SYNCH); + "IconFileID, SkillLine1, SkillLine2 FROM creature_family", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_CREATURE_FAMILY, "SELECT MAX(ID) + 1 FROM creature_family", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_CREATURE_FAMILY, "SELECT ID, Name_lang FROM creature_family_locale WHERE locale = ?", CONNECTION_SYNCH); // CreatureModelData.db2 @@ -296,49 +352,55 @@ void HotfixDatabaseConnection::DoPrepareStatements() "DeathThudCameraEffectID, SoundID, SizeClass, CollisionWidth, CollisionHeight, WorldEffectScale, CreatureGeosetDataID, HoverHeight, " "AttachedEffectScale, ModelScale, MissileCollisionRadius, MissileCollisionPush, MissileCollisionRaise, MountHeight, OverrideLootEffectScale, " "OverrideNameScale, OverrideSelectionRadius, TamedPetBaseScale, Unknown820_1, Unknown820_2, Unknown820_31, Unknown820_32" - " FROM creature_model_data ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM creature_model_data", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_CREATURE_MODEL_DATA, "SELECT MAX(ID) + 1 FROM creature_model_data", CONNECTION_SYNCH); // CreatureType.db2 - PrepareStatement(HOTFIX_SEL_CREATURE_TYPE, "SELECT ID, Name, Flags FROM creature_type ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_CREATURE_TYPE, "SELECT ID, Name, Flags FROM creature_type", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_CREATURE_TYPE, "SELECT MAX(ID) + 1 FROM creature_type", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_CREATURE_TYPE, "SELECT ID, Name_lang FROM creature_type_locale WHERE locale = ?", CONNECTION_SYNCH); // Criteria.db2 PrepareStatement(HOTFIX_SEL_CRITERIA, "SELECT ID, Type, Asset, ModifierTreeId, StartEvent, StartAsset, StartTimer, FailEvent, FailAsset, Flags, " - "EligibilityWorldStateID, EligibilityWorldStateValue FROM criteria ORDER BY ID DESC", CONNECTION_SYNCH); + "EligibilityWorldStateID, EligibilityWorldStateValue FROM criteria", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_CRITERIA, "SELECT MAX(ID) + 1 FROM criteria", CONNECTION_SYNCH); // CriteriaTree.db2 - PrepareStatement(HOTFIX_SEL_CRITERIA_TREE, "SELECT ID, Description, Parent, Amount, Operator, CriteriaID, OrderIndex, Flags FROM criteria_tree" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_CRITERIA_TREE, "SELECT ID, Description, Parent, Amount, Operator, CriteriaID, OrderIndex, Flags FROM criteria_tree", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_CRITERIA_TREE, "SELECT MAX(ID) + 1 FROM criteria_tree", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_CRITERIA_TREE, "SELECT ID, Description_lang FROM criteria_tree_locale WHERE locale = ?", CONNECTION_SYNCH); // CurrencyTypes.db2 PrepareStatement(HOTFIX_SEL_CURRENCY_TYPES, "SELECT ID, Name, Description, CategoryID, InventoryIconFileID, SpellWeight, SpellCategory, MaxQty, " - "MaxEarnablePerWeek, Flags, Quality, FactionID, ItemGroupSoundsID, ConvertToPlayerExperience, PlayerConditionID FROM currency_types" - " ORDER BY ID DESC", CONNECTION_SYNCH); + "MaxEarnablePerWeek, Flags, Quality, FactionID, ItemGroupSoundsID, ConvertToPlayerExperience, PlayerConditionID FROM currency_types", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_CURRENCY_TYPES, "SELECT MAX(ID) + 1 FROM currency_types", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_CURRENCY_TYPES, "SELECT ID, Name_lang, Description_lang FROM currency_types_locale WHERE locale = ?", CONNECTION_SYNCH); // Curve.db2 - PrepareStatement(HOTFIX_SEL_CURVE, "SELECT ID, Type, Flags FROM curve ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_CURVE, "SELECT ID, Type, Flags FROM curve", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_CURVE, "SELECT MAX(ID) + 1 FROM curve", CONNECTION_SYNCH); // CurvePoint.db2 - PrepareStatement(HOTFIX_SEL_CURVE_POINT, "SELECT ID, PosX, PosY, CurveID, OrderIndex FROM curve_point ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_CURVE_POINT, "SELECT ID, PosX, PosY, CurveID, OrderIndex FROM curve_point", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_CURVE_POINT, "SELECT MAX(ID) + 1 FROM curve_point", CONNECTION_SYNCH); // DestructibleModelData.db2 PrepareStatement(HOTFIX_SEL_DESTRUCTIBLE_MODEL_DATA, "SELECT ID, State0ImpactEffectDoodadSet, State0AmbientDoodadSet, State1Wmo, " "State1DestructionDoodadSet, State1ImpactEffectDoodadSet, State1AmbientDoodadSet, State2Wmo, State2DestructionDoodadSet, " "State2ImpactEffectDoodadSet, State2AmbientDoodadSet, State3Wmo, State3InitDoodadSet, State3AmbientDoodadSet, EjectDirection, DoNotHighlight, " - "State0Wmo, HealEffect, HealEffectSpeed, State0NameSet, State1NameSet, State2NameSet, State3NameSet FROM destructible_model_data" - " ORDER BY ID DESC", CONNECTION_SYNCH); + "State0Wmo, HealEffect, HealEffectSpeed, State0NameSet, State1NameSet, State2NameSet, State3NameSet FROM destructible_model_data", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_DESTRUCTIBLE_MODEL_DATA, "SELECT MAX(ID) + 1 FROM destructible_model_data", CONNECTION_SYNCH); // Difficulty.db2 PrepareStatement(HOTFIX_SEL_DIFFICULTY, "SELECT ID, Name, InstanceType, OrderIndex, OldEnumValue, FallbackDifficultyID, MinPlayers, MaxPlayers, " - "Flags, ItemContext, ToggleDifficultyID, GroupSizeHealthCurveID, GroupSizeDmgCurveID, GroupSizeSpellPointsCurveID FROM difficulty" - " ORDER BY ID DESC", CONNECTION_SYNCH); + "Flags, ItemContext, ToggleDifficultyID, GroupSizeHealthCurveID, GroupSizeDmgCurveID, GroupSizeSpellPointsCurveID FROM difficulty", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_DIFFICULTY, "SELECT MAX(ID) + 1 FROM difficulty", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_DIFFICULTY, "SELECT ID, Name_lang FROM difficulty_locale WHERE locale = ?", CONNECTION_SYNCH); // DungeonEncounter.db2 PrepareStatement(HOTFIX_SEL_DUNGEON_ENCOUNTER, "SELECT Name, ID, MapID, DifficultyID, OrderIndex, CompleteWorldStateID, Bit, CreatureDisplayID, " - "Flags, SpellIconFileID, Faction FROM dungeon_encounter ORDER BY ID DESC", CONNECTION_SYNCH); + "Flags, SpellIconFileID, Faction FROM dungeon_encounter", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_DUNGEON_ENCOUNTER, "SELECT MAX(ID) + 1 FROM dungeon_encounter", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_DUNGEON_ENCOUNTER, "SELECT ID, Name_lang FROM dungeon_encounter_locale WHERE locale = ?", CONNECTION_SYNCH); // DurabilityCosts.db2 @@ -347,71 +409,86 @@ void HotfixDatabaseConnection::DoPrepareStatements() "WeaponSubClassCost11, WeaponSubClassCost12, WeaponSubClassCost13, WeaponSubClassCost14, WeaponSubClassCost15, WeaponSubClassCost16, " "WeaponSubClassCost17, WeaponSubClassCost18, WeaponSubClassCost19, WeaponSubClassCost20, WeaponSubClassCost21, ArmorSubClassCost1, " "ArmorSubClassCost2, ArmorSubClassCost3, ArmorSubClassCost4, ArmorSubClassCost5, ArmorSubClassCost6, ArmorSubClassCost7, ArmorSubClassCost8" - " FROM durability_costs ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM durability_costs", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_DURABILITY_COSTS, "SELECT MAX(ID) + 1 FROM durability_costs", CONNECTION_SYNCH); // DurabilityQuality.db2 - PrepareStatement(HOTFIX_SEL_DURABILITY_QUALITY, "SELECT ID, Data FROM durability_quality ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_DURABILITY_QUALITY, "SELECT ID, Data FROM durability_quality", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_DURABILITY_QUALITY, "SELECT MAX(ID) + 1 FROM durability_quality", CONNECTION_SYNCH); // Emotes.db2 PrepareStatement(HOTFIX_SEL_EMOTES, "SELECT ID, RaceMask, EmoteSlashCommand, AnimID, EmoteFlags, EmoteSpecProc, EmoteSpecProcParam, EventSoundID, " - "SpellVisualKitID, ClassMask FROM emotes ORDER BY ID DESC", CONNECTION_SYNCH); + "SpellVisualKitID, ClassMask FROM emotes", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_EMOTES, "SELECT MAX(ID) + 1 FROM emotes", CONNECTION_SYNCH); // EmotesText.db2 - PrepareStatement(HOTFIX_SEL_EMOTES_TEXT, "SELECT ID, Name, EmoteID FROM emotes_text ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_EMOTES_TEXT, "SELECT ID, Name, EmoteID FROM emotes_text", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_EMOTES_TEXT, "SELECT MAX(ID) + 1 FROM emotes_text", CONNECTION_SYNCH); // EmotesTextSound.db2 - PrepareStatement(HOTFIX_SEL_EMOTES_TEXT_SOUND, "SELECT ID, RaceID, ClassID, SexID, SoundID, EmotesTextID FROM emotes_text_sound ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_EMOTES_TEXT_SOUND, "SELECT ID, RaceID, ClassID, SexID, SoundID, EmotesTextID FROM emotes_text_sound", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_EMOTES_TEXT_SOUND, "SELECT MAX(ID) + 1 FROM emotes_text_sound", CONNECTION_SYNCH); // ExpectedStat.db2 PrepareStatement(HOTFIX_SEL_EXPECTED_STAT, "SELECT ID, ExpansionID, CreatureHealth, PlayerHealth, CreatureAutoAttackDps, CreatureArmor, " - "PlayerMana, PlayerPrimaryStat, PlayerSecondaryStat, ArmorConstant, CreatureSpellDamage, Lvl FROM expected_stat ORDER BY ID DESC", CONNECTION_SYNCH); + "PlayerMana, PlayerPrimaryStat, PlayerSecondaryStat, ArmorConstant, CreatureSpellDamage, Lvl FROM expected_stat", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_EXPECTED_STAT, "SELECT MAX(ID) + 1 FROM expected_stat", CONNECTION_SYNCH); // ExpectedStatMod.db2 PrepareStatement(HOTFIX_SEL_EXPECTED_STAT_MOD, "SELECT ID, CreatureHealthMod, PlayerHealthMod, CreatureAutoAttackDPSMod, CreatureArmorMod, " - "PlayerManaMod, PlayerPrimaryStatMod, PlayerSecondaryStatMod, ArmorConstantMod, CreatureSpellDamageMod FROM expected_stat_mod ORDER BY ID DESC", CONNECTION_SYNCH); + "PlayerManaMod, PlayerPrimaryStatMod, PlayerSecondaryStatMod, ArmorConstantMod, CreatureSpellDamageMod FROM expected_stat_mod", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_EXPECTED_STAT_MOD, "SELECT MAX(ID) + 1 FROM expected_stat_mod", CONNECTION_SYNCH); // Faction.db2 PrepareStatement(HOTFIX_SEL_FACTION, "SELECT ReputationRaceMask1, ReputationRaceMask2, ReputationRaceMask3, ReputationRaceMask4, Name, " "Description, ID, ReputationIndex, ParentFactionID, Expansion, FriendshipRepID, Flags, ParagonFactionID, ReputationClassMask1, " "ReputationClassMask2, ReputationClassMask3, ReputationClassMask4, ReputationFlags1, ReputationFlags2, ReputationFlags3, ReputationFlags4, " "ReputationBase1, ReputationBase2, ReputationBase3, ReputationBase4, ReputationMax1, ReputationMax2, ReputationMax3, ReputationMax4, " - "ParentFactionMod1, ParentFactionMod2, ParentFactionCap1, ParentFactionCap2 FROM faction ORDER BY ID DESC", CONNECTION_SYNCH); + "ParentFactionMod1, ParentFactionMod2, ParentFactionCap1, ParentFactionCap2 FROM faction", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_FACTION, "SELECT MAX(ID) + 1 FROM faction", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_FACTION, "SELECT ID, Name_lang, Description_lang FROM faction_locale WHERE locale = ?", CONNECTION_SYNCH); // FactionTemplate.db2 PrepareStatement(HOTFIX_SEL_FACTION_TEMPLATE, "SELECT ID, Faction, Flags, FactionGroup, FriendGroup, EnemyGroup, Enemies1, Enemies2, Enemies3, " - "Enemies4, Friend1, Friend2, Friend3, Friend4 FROM faction_template ORDER BY ID DESC", CONNECTION_SYNCH); + "Enemies4, Friend1, Friend2, Friend3, Friend4 FROM faction_template", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_FACTION_TEMPLATE, "SELECT MAX(ID) + 1 FROM faction_template", CONNECTION_SYNCH); // GameobjectDisplayInfo.db2 PrepareStatement(HOTFIX_SEL_GAMEOBJECT_DISPLAY_INFO, "SELECT ID, GeoBoxMinX, GeoBoxMinY, GeoBoxMinZ, GeoBoxMaxX, GeoBoxMaxY, GeoBoxMaxZ, " - "FileDataID, ObjectEffectPackageID, OverrideLootEffectScale, OverrideNameScale FROM gameobject_display_info ORDER BY ID DESC", CONNECTION_SYNCH); + "FileDataID, ObjectEffectPackageID, OverrideLootEffectScale, OverrideNameScale FROM gameobject_display_info", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_GAMEOBJECT_DISPLAY_INFO, "SELECT MAX(ID) + 1 FROM gameobject_display_info", CONNECTION_SYNCH); // Gameobjects.db2 PrepareStatement(HOTFIX_SEL_GAMEOBJECTS, "SELECT Name, PosX, PosY, PosZ, Rot1, Rot2, Rot3, Rot4, ID, OwnerID, DisplayID, Scale, TypeID, " "PhaseUseFlags, PhaseID, PhaseGroupID, PropValue1, PropValue2, PropValue3, PropValue4, PropValue5, PropValue6, PropValue7, PropValue8" - " FROM gameobjects ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM gameobjects", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_GAMEOBJECTS, "SELECT MAX(ID) + 1 FROM gameobjects", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_GAMEOBJECTS, "SELECT ID, Name_lang FROM gameobjects_locale WHERE locale = ?", CONNECTION_SYNCH); // GarrAbility.db2 PrepareStatement(HOTFIX_SEL_GARR_ABILITY, "SELECT Name, Description, ID, GarrAbilityCategoryID, GarrFollowerTypeID, IconFileDataID, " - "FactionChangeGarrAbilityID, Flags FROM garr_ability ORDER BY ID DESC", CONNECTION_SYNCH); + "FactionChangeGarrAbilityID, Flags FROM garr_ability", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_GARR_ABILITY, "SELECT MAX(ID) + 1 FROM garr_ability", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_GARR_ABILITY, "SELECT ID, Name_lang, Description_lang FROM garr_ability_locale WHERE locale = ?", CONNECTION_SYNCH); // GarrBuilding.db2 PrepareStatement(HOTFIX_SEL_GARR_BUILDING, "SELECT ID, HordeName, AllianceName, Description, Tooltip, GarrTypeID, BuildingType, " "HordeGameObjectID, AllianceGameObjectID, GarrSiteID, UpgradeLevel, BuildSeconds, CurrencyTypeID, CurrencyQty, HordeUiTextureKitID, " "AllianceUiTextureKitID, IconFileDataID, AllianceSceneScriptPackageID, HordeSceneScriptPackageID, MaxAssignments, ShipmentCapacity, " - "GarrAbilityID, BonusGarrAbilityID, GoldCost, Flags FROM garr_building ORDER BY ID DESC", CONNECTION_SYNCH); + "GarrAbilityID, BonusGarrAbilityID, GoldCost, Flags FROM garr_building", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_GARR_BUILDING, "SELECT MAX(ID) + 1 FROM garr_building", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_GARR_BUILDING, "SELECT ID, HordeName_lang, AllianceName_lang, Description_lang, Tooltip_lang" " FROM garr_building_locale WHERE locale = ?", CONNECTION_SYNCH); // GarrBuildingPlotInst.db2 PrepareStatement(HOTFIX_SEL_GARR_BUILDING_PLOT_INST, "SELECT MapOffsetX, MapOffsetY, ID, GarrBuildingID, GarrSiteLevelPlotInstID, " - "UiTextureAtlasMemberID FROM garr_building_plot_inst ORDER BY ID DESC", CONNECTION_SYNCH); + "UiTextureAtlasMemberID FROM garr_building_plot_inst", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_GARR_BUILDING_PLOT_INST, "SELECT MAX(ID) + 1 FROM garr_building_plot_inst", CONNECTION_SYNCH); // GarrClassSpec.db2 PrepareStatement(HOTFIX_SEL_GARR_CLASS_SPEC, "SELECT ClassSpec, ClassSpecMale, ClassSpecFemale, ID, UiTextureAtlasMemberID, GarrFollItemSetID, " - "FollowerClassLimit, Flags FROM garr_class_spec ORDER BY ID DESC", CONNECTION_SYNCH); + "FollowerClassLimit, Flags FROM garr_class_spec", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_GARR_CLASS_SPEC, "SELECT MAX(ID) + 1 FROM garr_class_spec", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_GARR_CLASS_SPEC, "SELECT ID, ClassSpec_lang, ClassSpecMale_lang, ClassSpecFemale_lang FROM garr_class_spec_locale" " WHERE locale = ?", CONNECTION_SYNCH); @@ -420,62 +497,76 @@ void HotfixDatabaseConnection::DoPrepareStatements() "HordeCreatureID, AllianceCreatureID, HordeGarrFollRaceID, AllianceGarrFollRaceID, HordeGarrClassSpecID, AllianceGarrClassSpecID, Quality, " "FollowerLevel, ItemLevelWeapon, ItemLevelArmor, HordeSourceTypeEnum, AllianceSourceTypeEnum, HordeIconFileDataID, AllianceIconFileDataID, " "HordeGarrFollItemSetID, AllianceGarrFollItemSetID, HordeUITextureKitID, AllianceUITextureKitID, Vitality, HordeFlavorGarrStringID, " - "AllianceFlavorGarrStringID, HordeSlottingBroadcastTextID, AllySlottingBroadcastTextID, ChrClassID, Flags, Gender FROM garr_follower" - " ORDER BY ID DESC", CONNECTION_SYNCH); + "AllianceFlavorGarrStringID, HordeSlottingBroadcastTextID, AllySlottingBroadcastTextID, ChrClassID, Flags, Gender FROM garr_follower", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_GARR_FOLLOWER, "SELECT MAX(ID) + 1 FROM garr_follower", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_GARR_FOLLOWER, "SELECT ID, HordeSourceText_lang, AllianceSourceText_lang, TitleName_lang FROM garr_follower_locale" " WHERE locale = ?", CONNECTION_SYNCH); // GarrFollowerXAbility.db2 PrepareStatement(HOTFIX_SEL_GARR_FOLLOWER_X_ABILITY, "SELECT ID, OrderIndex, FactionIndex, GarrAbilityID, GarrFollowerID" - " FROM garr_follower_x_ability ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM garr_follower_x_ability", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_GARR_FOLLOWER_X_ABILITY, "SELECT MAX(ID) + 1 FROM garr_follower_x_ability", CONNECTION_SYNCH); // GarrPlot.db2 PrepareStatement(HOTFIX_SEL_GARR_PLOT, "SELECT ID, Name, PlotType, HordeConstructObjID, AllianceConstructObjID, Flags, UiCategoryID, " - "UpgradeRequirement1, UpgradeRequirement2 FROM garr_plot ORDER BY ID DESC", CONNECTION_SYNCH); + "UpgradeRequirement1, UpgradeRequirement2 FROM garr_plot", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_GARR_PLOT, "SELECT MAX(ID) + 1 FROM garr_plot", CONNECTION_SYNCH); // GarrPlotBuilding.db2 - PrepareStatement(HOTFIX_SEL_GARR_PLOT_BUILDING, "SELECT ID, GarrPlotID, GarrBuildingID FROM garr_plot_building ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_GARR_PLOT_BUILDING, "SELECT ID, GarrPlotID, GarrBuildingID FROM garr_plot_building", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_GARR_PLOT_BUILDING, "SELECT MAX(ID) + 1 FROM garr_plot_building", CONNECTION_SYNCH); // GarrPlotInstance.db2 - PrepareStatement(HOTFIX_SEL_GARR_PLOT_INSTANCE, "SELECT ID, Name, GarrPlotID FROM garr_plot_instance ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_GARR_PLOT_INSTANCE, "SELECT ID, Name, GarrPlotID FROM garr_plot_instance", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_GARR_PLOT_INSTANCE, "SELECT MAX(ID) + 1 FROM garr_plot_instance", CONNECTION_SYNCH); // GarrSiteLevel.db2 PrepareStatement(HOTFIX_SEL_GARR_SITE_LEVEL, "SELECT ID, TownHallUiPosX, TownHallUiPosY, GarrSiteID, GarrLevel, MapID, UpgradeMovieID, " - "UiTextureKitID, MaxBuildingLevel, UpgradeCost, UpgradeGoldCost FROM garr_site_level ORDER BY ID DESC", CONNECTION_SYNCH); + "UiTextureKitID, MaxBuildingLevel, UpgradeCost, UpgradeGoldCost FROM garr_site_level", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_GARR_SITE_LEVEL, "SELECT MAX(ID) + 1 FROM garr_site_level", CONNECTION_SYNCH); // GarrSiteLevelPlotInst.db2 PrepareStatement(HOTFIX_SEL_GARR_SITE_LEVEL_PLOT_INST, "SELECT ID, UiMarkerPosX, UiMarkerPosY, GarrSiteLevelID, GarrPlotInstanceID, UiMarkerSize" - " FROM garr_site_level_plot_inst ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM garr_site_level_plot_inst", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_GARR_SITE_LEVEL_PLOT_INST, "SELECT MAX(ID) + 1 FROM garr_site_level_plot_inst", CONNECTION_SYNCH); // GemProperties.db2 - PrepareStatement(HOTFIX_SEL_GEM_PROPERTIES, "SELECT ID, EnchantId, Type, MinItemLevel FROM gem_properties ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_GEM_PROPERTIES, "SELECT ID, EnchantId, Type, MinItemLevel FROM gem_properties", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_GEM_PROPERTIES, "SELECT MAX(ID) + 1 FROM gem_properties", CONNECTION_SYNCH); // GlyphBindableSpell.db2 - PrepareStatement(HOTFIX_SEL_GLYPH_BINDABLE_SPELL, "SELECT ID, SpellID, GlyphPropertiesID FROM glyph_bindable_spell ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_GLYPH_BINDABLE_SPELL, "SELECT ID, SpellID, GlyphPropertiesID FROM glyph_bindable_spell", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_GLYPH_BINDABLE_SPELL, "SELECT MAX(ID) + 1 FROM glyph_bindable_spell", CONNECTION_SYNCH); // GlyphProperties.db2 - PrepareStatement(HOTFIX_SEL_GLYPH_PROPERTIES, "SELECT ID, SpellID, GlyphType, GlyphExclusiveCategoryID, SpellIconFileDataID FROM glyph_properties" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_GLYPH_PROPERTIES, "SELECT ID, SpellID, GlyphType, GlyphExclusiveCategoryID, SpellIconFileDataID FROM glyph_properties", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_GLYPH_PROPERTIES, "SELECT MAX(ID) + 1 FROM glyph_properties", CONNECTION_SYNCH); // GlyphRequiredSpec.db2 - PrepareStatement(HOTFIX_SEL_GLYPH_REQUIRED_SPEC, "SELECT ID, ChrSpecializationID, GlyphPropertiesID FROM glyph_required_spec ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_GLYPH_REQUIRED_SPEC, "SELECT ID, ChrSpecializationID, GlyphPropertiesID FROM glyph_required_spec", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_GLYPH_REQUIRED_SPEC, "SELECT MAX(ID) + 1 FROM glyph_required_spec", CONNECTION_SYNCH); // GuildColorBackground.db2 - PrepareStatement(HOTFIX_SEL_GUILD_COLOR_BACKGROUND, "SELECT ID, Red, Blue, Green FROM guild_color_background ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_GUILD_COLOR_BACKGROUND, "SELECT ID, Red, Blue, Green FROM guild_color_background", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_GUILD_COLOR_BACKGROUND, "SELECT MAX(ID) + 1 FROM guild_color_background", CONNECTION_SYNCH); // GuildColorBorder.db2 - PrepareStatement(HOTFIX_SEL_GUILD_COLOR_BORDER, "SELECT ID, Red, Blue, Green FROM guild_color_border ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_GUILD_COLOR_BORDER, "SELECT ID, Red, Blue, Green FROM guild_color_border", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_GUILD_COLOR_BORDER, "SELECT MAX(ID) + 1 FROM guild_color_border", CONNECTION_SYNCH); // GuildColorEmblem.db2 - PrepareStatement(HOTFIX_SEL_GUILD_COLOR_EMBLEM, "SELECT ID, Red, Blue, Green FROM guild_color_emblem ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_GUILD_COLOR_EMBLEM, "SELECT ID, Red, Blue, Green FROM guild_color_emblem", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_GUILD_COLOR_EMBLEM, "SELECT MAX(ID) + 1 FROM guild_color_emblem", CONNECTION_SYNCH); // GuildPerkSpells.db2 - PrepareStatement(HOTFIX_SEL_GUILD_PERK_SPELLS, "SELECT ID, SpellID FROM guild_perk_spells ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_GUILD_PERK_SPELLS, "SELECT ID, SpellID FROM guild_perk_spells", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_GUILD_PERK_SPELLS, "SELECT MAX(ID) + 1 FROM guild_perk_spells", CONNECTION_SYNCH); // Heirloom.db2 PrepareStatement(HOTFIX_SEL_HEIRLOOM, "SELECT SourceText, ID, ItemID, LegacyUpgradedItemID, StaticUpgradedItemID, SourceTypeEnum, Flags, " "LegacyItemID, UpgradeItemID1, UpgradeItemID2, UpgradeItemID3, UpgradeItemID4, UpgradeItemBonusListID1, UpgradeItemBonusListID2, " - "UpgradeItemBonusListID3, UpgradeItemBonusListID4 FROM heirloom ORDER BY ID DESC", CONNECTION_SYNCH); + "UpgradeItemBonusListID3, UpgradeItemBonusListID4 FROM heirloom", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_HEIRLOOM, "SELECT MAX(ID) + 1 FROM heirloom", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_HEIRLOOM, "SELECT ID, SourceText_lang FROM heirloom_locale WHERE locale = ?", CONNECTION_SYNCH); // Holidays.db2 @@ -483,145 +574,175 @@ void HotfixDatabaseConnection::DoPrepareStatements() "Duration1, Duration2, Duration3, Duration4, Duration5, Duration6, Duration7, Duration8, Duration9, Duration10, Date1, Date2, Date3, Date4, " "Date5, Date6, Date7, Date8, Date9, Date10, Date11, Date12, Date13, Date14, Date15, Date16, Date17, Date18, Date19, Date20, Date21, Date22, " "Date23, Date24, Date25, Date26, CalendarFlags1, CalendarFlags2, CalendarFlags3, CalendarFlags4, CalendarFlags5, CalendarFlags6, " - "CalendarFlags7, CalendarFlags8, CalendarFlags9, CalendarFlags10, TextureFileDataID1, TextureFileDataID2, TextureFileDataID3 FROM holidays" - " ORDER BY ID DESC", CONNECTION_SYNCH); + "CalendarFlags7, CalendarFlags8, CalendarFlags9, CalendarFlags10, TextureFileDataID1, TextureFileDataID2, TextureFileDataID3 FROM holidays", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_HOLIDAYS, "SELECT MAX(ID) + 1 FROM holidays", CONNECTION_SYNCH); // ImportPriceArmor.db2 - PrepareStatement(HOTFIX_SEL_IMPORT_PRICE_ARMOR, "SELECT ID, ClothModifier, LeatherModifier, ChainModifier, PlateModifier FROM import_price_armor" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_IMPORT_PRICE_ARMOR, "SELECT ID, ClothModifier, LeatherModifier, ChainModifier, PlateModifier FROM import_price_armor", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_IMPORT_PRICE_ARMOR, "SELECT MAX(ID) + 1 FROM import_price_armor", CONNECTION_SYNCH); // ImportPriceQuality.db2 - PrepareStatement(HOTFIX_SEL_IMPORT_PRICE_QUALITY, "SELECT ID, Data FROM import_price_quality ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_IMPORT_PRICE_QUALITY, "SELECT ID, Data FROM import_price_quality", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_IMPORT_PRICE_QUALITY, "SELECT MAX(ID) + 1 FROM import_price_quality", CONNECTION_SYNCH); // ImportPriceShield.db2 - PrepareStatement(HOTFIX_SEL_IMPORT_PRICE_SHIELD, "SELECT ID, Data FROM import_price_shield ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_IMPORT_PRICE_SHIELD, "SELECT ID, Data FROM import_price_shield", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_IMPORT_PRICE_SHIELD, "SELECT MAX(ID) + 1 FROM import_price_shield", CONNECTION_SYNCH); // ImportPriceWeapon.db2 - PrepareStatement(HOTFIX_SEL_IMPORT_PRICE_WEAPON, "SELECT ID, Data FROM import_price_weapon ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_IMPORT_PRICE_WEAPON, "SELECT ID, Data FROM import_price_weapon", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_IMPORT_PRICE_WEAPON, "SELECT MAX(ID) + 1 FROM import_price_weapon", CONNECTION_SYNCH); // Item.db2 PrepareStatement(HOTFIX_SEL_ITEM, "SELECT ID, ClassID, SubclassID, Material, InventoryType, SheatheType, SoundOverrideSubclassID, IconFileDataID, " - "ItemGroupSoundsID FROM item ORDER BY ID DESC", CONNECTION_SYNCH); + "ItemGroupSoundsID FROM item", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM, "SELECT MAX(ID) + 1 FROM item", CONNECTION_SYNCH); // ItemAppearance.db2 - PrepareStatement(HOTFIX_SEL_ITEM_APPEARANCE, "SELECT ID, DisplayType, ItemDisplayInfoID, DefaultIconFileDataID, UiOrder FROM item_appearance" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_APPEARANCE, "SELECT ID, DisplayType, ItemDisplayInfoID, DefaultIconFileDataID, UiOrder FROM item_appearance", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_APPEARANCE, "SELECT MAX(ID) + 1 FROM item_appearance", CONNECTION_SYNCH); // ItemArmorQuality.db2 PrepareStatement(HOTFIX_SEL_ITEM_ARMOR_QUALITY, "SELECT ID, Qualitymod1, Qualitymod2, Qualitymod3, Qualitymod4, Qualitymod5, Qualitymod6, " - "Qualitymod7 FROM item_armor_quality ORDER BY ID DESC", CONNECTION_SYNCH); + "Qualitymod7 FROM item_armor_quality", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_ARMOR_QUALITY, "SELECT MAX(ID) + 1 FROM item_armor_quality", CONNECTION_SYNCH); // ItemArmorShield.db2 PrepareStatement(HOTFIX_SEL_ITEM_ARMOR_SHIELD, "SELECT ID, Quality1, Quality2, Quality3, Quality4, Quality5, Quality6, Quality7, ItemLevel" - " FROM item_armor_shield ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM item_armor_shield", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_ARMOR_SHIELD, "SELECT MAX(ID) + 1 FROM item_armor_shield", CONNECTION_SYNCH); // ItemArmorTotal.db2 - PrepareStatement(HOTFIX_SEL_ITEM_ARMOR_TOTAL, "SELECT ID, ItemLevel, Cloth, Leather, Mail, Plate FROM item_armor_total ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_ARMOR_TOTAL, "SELECT ID, ItemLevel, Cloth, Leather, Mail, Plate FROM item_armor_total", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_ARMOR_TOTAL, "SELECT MAX(ID) + 1 FROM item_armor_total", CONNECTION_SYNCH); // ItemBagFamily.db2 - PrepareStatement(HOTFIX_SEL_ITEM_BAG_FAMILY, "SELECT ID, Name FROM item_bag_family ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_BAG_FAMILY, "SELECT ID, Name FROM item_bag_family", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_BAG_FAMILY, "SELECT MAX(ID) + 1 FROM item_bag_family", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_ITEM_BAG_FAMILY, "SELECT ID, Name_lang FROM item_bag_family_locale WHERE locale = ?", CONNECTION_SYNCH); // ItemBonus.db2 - PrepareStatement(HOTFIX_SEL_ITEM_BONUS, "SELECT ID, Value1, Value2, Value3, ParentItemBonusListID, Type, OrderIndex FROM item_bonus" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_BONUS, "SELECT ID, Value1, Value2, Value3, ParentItemBonusListID, Type, OrderIndex FROM item_bonus", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_BONUS, "SELECT MAX(ID) + 1 FROM item_bonus", CONNECTION_SYNCH); // ItemBonusListLevelDelta.db2 - PrepareStatement(HOTFIX_SEL_ITEM_BONUS_LIST_LEVEL_DELTA, "SELECT ItemLevelDelta, ID FROM item_bonus_list_level_delta ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_BONUS_LIST_LEVEL_DELTA, "SELECT ItemLevelDelta, ID FROM item_bonus_list_level_delta", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_BONUS_LIST_LEVEL_DELTA, "SELECT MAX(ID) + 1 FROM item_bonus_list_level_delta", CONNECTION_SYNCH); // ItemBonusTreeNode.db2 PrepareStatement(HOTFIX_SEL_ITEM_BONUS_TREE_NODE, "SELECT ID, ItemContext, ChildItemBonusTreeID, ChildItemBonusListID, ChildItemLevelSelectorID, " - "ParentItemBonusTreeID FROM item_bonus_tree_node ORDER BY ID DESC", CONNECTION_SYNCH); + "ParentItemBonusTreeID FROM item_bonus_tree_node", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_BONUS_TREE_NODE, "SELECT MAX(ID) + 1 FROM item_bonus_tree_node", CONNECTION_SYNCH); // ItemChildEquipment.db2 - PrepareStatement(HOTFIX_SEL_ITEM_CHILD_EQUIPMENT, "SELECT ID, ParentItemID, ChildItemID, ChildItemEquipSlot FROM item_child_equipment" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_CHILD_EQUIPMENT, "SELECT ID, ParentItemID, ChildItemID, ChildItemEquipSlot FROM item_child_equipment", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_CHILD_EQUIPMENT, "SELECT MAX(ID) + 1 FROM item_child_equipment", CONNECTION_SYNCH); // ItemClass.db2 - PrepareStatement(HOTFIX_SEL_ITEM_CLASS, "SELECT ID, ClassName, ClassID, PriceModifier, Flags FROM item_class ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_CLASS, "SELECT ID, ClassName, ClassID, PriceModifier, Flags FROM item_class", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_CLASS, "SELECT MAX(ID) + 1 FROM item_class", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_ITEM_CLASS, "SELECT ID, ClassName_lang FROM item_class_locale WHERE locale = ?", CONNECTION_SYNCH); // ItemCurrencyCost.db2 - PrepareStatement(HOTFIX_SEL_ITEM_CURRENCY_COST, "SELECT ID, ItemID FROM item_currency_cost ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_CURRENCY_COST, "SELECT ID, ItemID FROM item_currency_cost", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_CURRENCY_COST, "SELECT MAX(ID) + 1 FROM item_currency_cost", CONNECTION_SYNCH); // ItemDamageAmmo.db2 PrepareStatement(HOTFIX_SEL_ITEM_DAMAGE_AMMO, "SELECT ID, ItemLevel, Quality1, Quality2, Quality3, Quality4, Quality5, Quality6, Quality7" - " FROM item_damage_ammo ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM item_damage_ammo", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_DAMAGE_AMMO, "SELECT MAX(ID) + 1 FROM item_damage_ammo", CONNECTION_SYNCH); // ItemDamageOneHand.db2 PrepareStatement(HOTFIX_SEL_ITEM_DAMAGE_ONE_HAND, "SELECT ID, ItemLevel, Quality1, Quality2, Quality3, Quality4, Quality5, Quality6, Quality7" - " FROM item_damage_one_hand ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM item_damage_one_hand", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_DAMAGE_ONE_HAND, "SELECT MAX(ID) + 1 FROM item_damage_one_hand", CONNECTION_SYNCH); // ItemDamageOneHandCaster.db2 PrepareStatement(HOTFIX_SEL_ITEM_DAMAGE_ONE_HAND_CASTER, "SELECT ID, ItemLevel, Quality1, Quality2, Quality3, Quality4, Quality5, Quality6, " - "Quality7 FROM item_damage_one_hand_caster ORDER BY ID DESC", CONNECTION_SYNCH); + "Quality7 FROM item_damage_one_hand_caster", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_DAMAGE_ONE_HAND_CASTER, "SELECT MAX(ID) + 1 FROM item_damage_one_hand_caster", CONNECTION_SYNCH); // ItemDamageTwoHand.db2 PrepareStatement(HOTFIX_SEL_ITEM_DAMAGE_TWO_HAND, "SELECT ID, ItemLevel, Quality1, Quality2, Quality3, Quality4, Quality5, Quality6, Quality7" - " FROM item_damage_two_hand ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM item_damage_two_hand", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_DAMAGE_TWO_HAND, "SELECT MAX(ID) + 1 FROM item_damage_two_hand", CONNECTION_SYNCH); // ItemDamageTwoHandCaster.db2 PrepareStatement(HOTFIX_SEL_ITEM_DAMAGE_TWO_HAND_CASTER, "SELECT ID, ItemLevel, Quality1, Quality2, Quality3, Quality4, Quality5, Quality6, " - "Quality7 FROM item_damage_two_hand_caster ORDER BY ID DESC", CONNECTION_SYNCH); + "Quality7 FROM item_damage_two_hand_caster", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_DAMAGE_TWO_HAND_CASTER, "SELECT MAX(ID) + 1 FROM item_damage_two_hand_caster", CONNECTION_SYNCH); // ItemDisenchantLoot.db2 PrepareStatement(HOTFIX_SEL_ITEM_DISENCHANT_LOOT, "SELECT ID, Subclass, Quality, MinLevel, MaxLevel, SkillRequired, ExpansionID, Class" - " FROM item_disenchant_loot ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM item_disenchant_loot", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_DISENCHANT_LOOT, "SELECT MAX(ID) + 1 FROM item_disenchant_loot", CONNECTION_SYNCH); // ItemEffect.db2 PrepareStatement(HOTFIX_SEL_ITEM_EFFECT, "SELECT ID, LegacySlotIndex, TriggerType, Charges, CoolDownMSec, CategoryCoolDownMSec, SpellCategoryID, " - "SpellID, ChrSpecializationID, ParentItemID FROM item_effect ORDER BY ID DESC", CONNECTION_SYNCH); + "SpellID, ChrSpecializationID, ParentItemID FROM item_effect", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_EFFECT, "SELECT MAX(ID) + 1 FROM item_effect", CONNECTION_SYNCH); // ItemExtendedCost.db2 PrepareStatement(HOTFIX_SEL_ITEM_EXTENDED_COST, "SELECT ID, RequiredArenaRating, ArenaBracket, Flags, MinFactionID, MinReputation, " "RequiredAchievement, ItemID1, ItemID2, ItemID3, ItemID4, ItemID5, ItemCount1, ItemCount2, ItemCount3, ItemCount4, ItemCount5, CurrencyID1, " "CurrencyID2, CurrencyID3, CurrencyID4, CurrencyID5, CurrencyCount1, CurrencyCount2, CurrencyCount3, CurrencyCount4, CurrencyCount5" - " FROM item_extended_cost ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM item_extended_cost", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_EXTENDED_COST, "SELECT MAX(ID) + 1 FROM item_extended_cost", CONNECTION_SYNCH); // ItemLevelSelector.db2 PrepareStatement(HOTFIX_SEL_ITEM_LEVEL_SELECTOR, "SELECT ID, MinItemLevel, ItemLevelSelectorQualitySetID, AzeriteUnlockMappingSet" - " FROM item_level_selector ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM item_level_selector", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_LEVEL_SELECTOR, "SELECT MAX(ID) + 1 FROM item_level_selector", CONNECTION_SYNCH); // ItemLevelSelectorQuality.db2 PrepareStatement(HOTFIX_SEL_ITEM_LEVEL_SELECTOR_QUALITY, "SELECT ID, QualityItemBonusListID, Quality, ParentILSQualitySetID" - " FROM item_level_selector_quality ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM item_level_selector_quality", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_LEVEL_SELECTOR_QUALITY, "SELECT MAX(ID) + 1 FROM item_level_selector_quality", CONNECTION_SYNCH); // ItemLevelSelectorQualitySet.db2 - PrepareStatement(HOTFIX_SEL_ITEM_LEVEL_SELECTOR_QUALITY_SET, "SELECT ID, IlvlRare, IlvlEpic FROM item_level_selector_quality_set ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_LEVEL_SELECTOR_QUALITY_SET, "SELECT ID, IlvlRare, IlvlEpic FROM item_level_selector_quality_set", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_LEVEL_SELECTOR_QUALITY_SET, "SELECT MAX(ID) + 1 FROM item_level_selector_quality_set", CONNECTION_SYNCH); // ItemLimitCategory.db2 - PrepareStatement(HOTFIX_SEL_ITEM_LIMIT_CATEGORY, "SELECT ID, Name, Quantity, Flags FROM item_limit_category ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_LIMIT_CATEGORY, "SELECT ID, Name, Quantity, Flags FROM item_limit_category", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_LIMIT_CATEGORY, "SELECT MAX(ID) + 1 FROM item_limit_category", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_ITEM_LIMIT_CATEGORY, "SELECT ID, Name_lang FROM item_limit_category_locale WHERE locale = ?", CONNECTION_SYNCH); // ItemLimitCategoryCondition.db2 PrepareStatement(HOTFIX_SEL_ITEM_LIMIT_CATEGORY_CONDITION, "SELECT ID, AddQuantity, PlayerConditionID, ParentItemLimitCategoryID" - " FROM item_limit_category_condition ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM item_limit_category_condition", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_LIMIT_CATEGORY_CONDITION, "SELECT MAX(ID) + 1 FROM item_limit_category_condition", CONNECTION_SYNCH); // ItemModifiedAppearance.db2 PrepareStatement(HOTFIX_SEL_ITEM_MODIFIED_APPEARANCE, "SELECT ID, ItemID, ItemAppearanceModifierID, ItemAppearanceID, OrderIndex, " - "TransmogSourceTypeEnum FROM item_modified_appearance ORDER BY ID DESC", CONNECTION_SYNCH); + "TransmogSourceTypeEnum FROM item_modified_appearance", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_MODIFIED_APPEARANCE, "SELECT MAX(ID) + 1 FROM item_modified_appearance", CONNECTION_SYNCH); // ItemNameDescription.db2 - PrepareStatement(HOTFIX_SEL_ITEM_NAME_DESCRIPTION, "SELECT ID, Description, Color FROM item_name_description ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_NAME_DESCRIPTION, "SELECT ID, Description, Color FROM item_name_description", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_NAME_DESCRIPTION, "SELECT MAX(ID) + 1 FROM item_name_description", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_ITEM_NAME_DESCRIPTION, "SELECT ID, Description_lang FROM item_name_description_locale WHERE locale = ?", CONNECTION_SYNCH); // ItemPriceBase.db2 - PrepareStatement(HOTFIX_SEL_ITEM_PRICE_BASE, "SELECT ID, ItemLevel, Armor, Weapon FROM item_price_base ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_PRICE_BASE, "SELECT ID, ItemLevel, Armor, Weapon FROM item_price_base", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_PRICE_BASE, "SELECT MAX(ID) + 1 FROM item_price_base", CONNECTION_SYNCH); // ItemSearchName.db2 PrepareStatement(HOTFIX_SEL_ITEM_SEARCH_NAME, "SELECT AllowableRace, Display, ID, OverallQualityID, ExpansionID, MinFactionID, MinReputation, " "AllowableClass, RequiredLevel, RequiredSkill, RequiredSkillRank, RequiredAbility, ItemLevel, Flags1, Flags2, Flags3, Flags4" - " FROM item_search_name ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM item_search_name", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_SEARCH_NAME, "SELECT MAX(ID) + 1 FROM item_search_name", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_ITEM_SEARCH_NAME, "SELECT ID, Display_lang FROM item_search_name_locale WHERE locale = ?", CONNECTION_SYNCH); // ItemSet.db2 PrepareStatement(HOTFIX_SEL_ITEM_SET, "SELECT ID, Name, SetFlags, RequiredSkill, RequiredSkillRank, ItemID1, ItemID2, ItemID3, ItemID4, ItemID5, " - "ItemID6, ItemID7, ItemID8, ItemID9, ItemID10, ItemID11, ItemID12, ItemID13, ItemID14, ItemID15, ItemID16, ItemID17 FROM item_set" - " ORDER BY ID DESC", CONNECTION_SYNCH); + "ItemID6, ItemID7, ItemID8, ItemID9, ItemID10, ItemID11, ItemID12, ItemID13, ItemID14, ItemID15, ItemID16, ItemID17 FROM item_set", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_SET, "SELECT MAX(ID) + 1 FROM item_set", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_ITEM_SET, "SELECT ID, Name_lang FROM item_set_locale WHERE locale = ?", CONNECTION_SYNCH); // ItemSetSpell.db2 - PrepareStatement(HOTFIX_SEL_ITEM_SET_SPELL, "SELECT ID, ChrSpecID, SpellID, Threshold, ItemSetID FROM item_set_spell ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_SET_SPELL, "SELECT ID, ChrSpecID, SpellID, Threshold, ItemSetID FROM item_set_spell", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_SET_SPELL, "SELECT MAX(ID) + 1 FROM item_set_spell", CONNECTION_SYNCH); // ItemSparse.db2 PrepareStatement(HOTFIX_SEL_ITEM_SPARSE, "SELECT ID, AllowableRace, Description, Display3, Display2, Display1, Display, DmgVariance, " @@ -636,36 +757,40 @@ void HotfixDatabaseConnection::DoPrepareStatements() "SocketType1, SocketType2, SocketType3, SheatheType, Material, PageMaterialID, LanguageID, Bonding, DamageDamageType, StatModifierBonusStat1, " "StatModifierBonusStat2, StatModifierBonusStat3, StatModifierBonusStat4, StatModifierBonusStat5, StatModifierBonusStat6, " "StatModifierBonusStat7, StatModifierBonusStat8, StatModifierBonusStat9, StatModifierBonusStat10, ContainerSlots, MinReputation, " - "RequiredPVPMedal, RequiredPVPRank, RequiredLevel, InventoryType, OverallQualityID FROM item_sparse ORDER BY ID DESC", CONNECTION_SYNCH); + "RequiredPVPMedal, RequiredPVPRank, RequiredLevel, InventoryType, OverallQualityID FROM item_sparse", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_SPARSE, "SELECT MAX(ID) + 1 FROM item_sparse", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_ITEM_SPARSE, "SELECT ID, Description_lang, Display3_lang, Display2_lang, Display1_lang, Display_lang" " FROM item_sparse_locale WHERE locale = ?", CONNECTION_SYNCH); // ItemSpec.db2 - PrepareStatement(HOTFIX_SEL_ITEM_SPEC, "SELECT ID, MinLevel, MaxLevel, ItemType, PrimaryStat, SecondaryStat, SpecializationID FROM item_spec" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_SPEC, "SELECT ID, MinLevel, MaxLevel, ItemType, PrimaryStat, SecondaryStat, SpecializationID FROM item_spec", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_SPEC, "SELECT MAX(ID) + 1 FROM item_spec", CONNECTION_SYNCH); // ItemSpecOverride.db2 - PrepareStatement(HOTFIX_SEL_ITEM_SPEC_OVERRIDE, "SELECT ID, SpecID, ItemID FROM item_spec_override ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_SPEC_OVERRIDE, "SELECT ID, SpecID, ItemID FROM item_spec_override", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_SPEC_OVERRIDE, "SELECT MAX(ID) + 1 FROM item_spec_override", CONNECTION_SYNCH); // ItemXBonusTree.db2 - PrepareStatement(HOTFIX_SEL_ITEM_X_BONUS_TREE, "SELECT ID, ItemBonusTreeID, ItemID FROM item_x_bonus_tree ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_X_BONUS_TREE, "SELECT ID, ItemBonusTreeID, ItemID FROM item_x_bonus_tree", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_X_BONUS_TREE, "SELECT MAX(ID) + 1 FROM item_x_bonus_tree", CONNECTION_SYNCH); // Keychain.db2 PrepareStatement(HOTFIX_SEL_KEYCHAIN, "SELECT ID, Key1, Key2, Key3, Key4, Key5, Key6, Key7, Key8, Key9, Key10, Key11, Key12, Key13, Key14, Key15, " - "Key16, Key17, Key18, Key19, Key20, Key21, Key22, Key23, Key24, Key25, Key26, Key27, Key28, Key29, Key30, Key31, Key32 FROM keychain" - " ORDER BY ID DESC", CONNECTION_SYNCH); + "Key16, Key17, Key18, Key19, Key20, Key21, Key22, Key23, Key24, Key25, Key26, Key27, Key28, Key29, Key30, Key31, Key32 FROM keychain", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_KEYCHAIN, "SELECT MAX(ID) + 1 FROM keychain", CONNECTION_SYNCH); // LfgDungeons.db2 PrepareStatement(HOTFIX_SEL_LFG_DUNGEONS, "SELECT ID, Name, Description, MinLevel, MaxLevel, TypeID, Subtype, Faction, IconTextureFileID, " "RewardsBgTextureFileID, PopupBgTextureFileID, ExpansionLevel, MapID, DifficultyID, MinGear, GroupID, OrderIndex, RequiredPlayerConditionId, " "TargetLevel, TargetLevelMin, TargetLevelMax, RandomID, ScenarioID, FinalEncounterID, CountTank, CountHealer, CountDamage, MinCountTank, " - "MinCountHealer, MinCountDamage, BonusReputationAmount, MentorItemLevel, MentorCharLevel, Flags1, Flags2 FROM lfg_dungeons ORDER BY ID DESC", CONNECTION_SYNCH); + "MinCountHealer, MinCountDamage, BonusReputationAmount, MentorItemLevel, MentorCharLevel, Flags1, Flags2 FROM lfg_dungeons", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_LFG_DUNGEONS, "SELECT MAX(ID) + 1 FROM lfg_dungeons", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_LFG_DUNGEONS, "SELECT ID, Name_lang, Description_lang FROM lfg_dungeons_locale WHERE locale = ?", CONNECTION_SYNCH); // Light.db2 PrepareStatement(HOTFIX_SEL_LIGHT, "SELECT ID, GameCoordsX, GameCoordsY, GameCoordsZ, GameFalloffStart, GameFalloffEnd, ContinentID, " - "LightParamsID1, LightParamsID2, LightParamsID3, LightParamsID4, LightParamsID5, LightParamsID6, LightParamsID7, LightParamsID8 FROM light" - " ORDER BY ID DESC", CONNECTION_SYNCH); + "LightParamsID1, LightParamsID2, LightParamsID3, LightParamsID4, LightParamsID5, LightParamsID6, LightParamsID7, LightParamsID8 FROM light", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_LIGHT, "SELECT MAX(ID) + 1 FROM light", CONNECTION_SYNCH); // LiquidType.db2 PrepareStatement(HOTFIX_SEL_LIQUID_TYPE, "SELECT ID, Name, Texture1, Texture2, Texture3, Texture4, Texture5, Texture6, Flags, SoundBank, SoundID, " @@ -673,77 +798,93 @@ void HotfixDatabaseConnection::DoPrepareStatements() "ParticleTexSlots, MaterialID, MinimapStaticCol, FrameCountTexture1, FrameCountTexture2, FrameCountTexture3, FrameCountTexture4, " "FrameCountTexture5, FrameCountTexture6, Color1, Color2, Float1, Float2, Float3, `Float4`, Float5, Float6, Float7, `Float8`, Float9, Float10, " "Float11, Float12, Float13, Float14, Float15, Float16, Float17, Float18, `Int1`, `Int2`, `Int3`, `Int4`, Coefficient1, Coefficient2, " - "Coefficient3, Coefficient4 FROM liquid_type ORDER BY ID DESC", CONNECTION_SYNCH); + "Coefficient3, Coefficient4 FROM liquid_type", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_LIQUID_TYPE, "SELECT MAX(ID) + 1 FROM liquid_type", CONNECTION_SYNCH); // Lock.db2 PrepareStatement(HOTFIX_SEL_LOCK, "SELECT ID, Index1, Index2, Index3, Index4, Index5, Index6, Index7, Index8, Skill1, Skill2, Skill3, Skill4, " "Skill5, Skill6, Skill7, Skill8, Type1, Type2, Type3, Type4, Type5, Type6, Type7, Type8, Action1, Action2, Action3, Action4, Action5, " - "Action6, Action7, Action8 FROM `lock` ORDER BY ID DESC", CONNECTION_SYNCH); + "Action6, Action7, Action8 FROM `lock`", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_LOCK, "SELECT MAX(ID) + 1 FROM `lock`", CONNECTION_SYNCH); // MailTemplate.db2 - PrepareStatement(HOTFIX_SEL_MAIL_TEMPLATE, "SELECT ID, Body FROM mail_template ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_MAIL_TEMPLATE, "SELECT ID, Body FROM mail_template", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_MAIL_TEMPLATE, "SELECT MAX(ID) + 1 FROM mail_template", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_MAIL_TEMPLATE, "SELECT ID, Body_lang FROM mail_template_locale WHERE locale = ?", CONNECTION_SYNCH); // Map.db2 PrepareStatement(HOTFIX_SEL_MAP, "SELECT ID, Directory, MapName, MapDescription0, MapDescription1, PvpShortDescription, PvpLongDescription, " "CorpseX, CorpseY, MapType, InstanceType, ExpansionID, AreaTableID, LoadingScreenID, TimeOfDayOverride, ParentMapID, CosmeticParentMapID, " - "TimeOffset, MinimapIconScale, CorpseMapID, MaxPlayers, WindSettingsID, ZmpFileDataID, WdtFileDataID, Flags1, Flags2 FROM map ORDER BY ID DESC", CONNECTION_SYNCH); + "TimeOffset, MinimapIconScale, CorpseMapID, MaxPlayers, WindSettingsID, ZmpFileDataID, WdtFileDataID, Flags1, Flags2 FROM map", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_MAP, "SELECT MAX(ID) + 1 FROM map", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_MAP, "SELECT ID, MapName_lang, MapDescription0_lang, MapDescription1_lang, PvpShortDescription_lang, " "PvpLongDescription_lang FROM map_locale WHERE locale = ?", CONNECTION_SYNCH); // MapDifficulty.db2 PrepareStatement(HOTFIX_SEL_MAP_DIFFICULTY, "SELECT ID, Message, DifficultyID, LockID, ResetInterval, MaxPlayers, ItemContext, " - "ItemContextPickerID, Flags, ContentTuningID, MapID FROM map_difficulty ORDER BY ID DESC", CONNECTION_SYNCH); + "ItemContextPickerID, Flags, ContentTuningID, MapID FROM map_difficulty", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_MAP_DIFFICULTY, "SELECT MAX(ID) + 1 FROM map_difficulty", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_MAP_DIFFICULTY, "SELECT ID, Message_lang FROM map_difficulty_locale WHERE locale = ?", CONNECTION_SYNCH); // ModifierTree.db2 - PrepareStatement(HOTFIX_SEL_MODIFIER_TREE, "SELECT ID, Parent, Operator, Amount, Type, Asset, SecondaryAsset, TertiaryAsset FROM modifier_tree" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_MODIFIER_TREE, "SELECT ID, Parent, Operator, Amount, Type, Asset, SecondaryAsset, TertiaryAsset FROM modifier_tree", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_MODIFIER_TREE, "SELECT MAX(ID) + 1 FROM modifier_tree", CONNECTION_SYNCH); // Mount.db2 PrepareStatement(HOTFIX_SEL_MOUNT, "SELECT Name, SourceText, Description, ID, MountTypeID, Flags, SourceTypeEnum, SourceSpellID, " - "PlayerConditionID, MountFlyRideHeight, UiModelSceneID, MountSpecialRiderAnimKitID, MountSpecialSpellVisualKitID FROM mount ORDER BY ID DESC", CONNECTION_SYNCH); + "PlayerConditionID, MountFlyRideHeight, UiModelSceneID, MountSpecialRiderAnimKitID, MountSpecialSpellVisualKitID FROM mount", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_MOUNT, "SELECT MAX(ID) + 1 FROM mount", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_MOUNT, "SELECT ID, Name_lang, SourceText_lang, Description_lang FROM mount_locale WHERE locale = ?", CONNECTION_SYNCH); // MountCapability.db2 PrepareStatement(HOTFIX_SEL_MOUNT_CAPABILITY, "SELECT ID, Flags, ReqRidingSkill, ReqAreaID, ReqSpellAuraID, ReqSpellKnownID, ModSpellAuraID, " - "ReqMapID, PlayerConditionID FROM mount_capability ORDER BY ID DESC", CONNECTION_SYNCH); + "ReqMapID, PlayerConditionID FROM mount_capability", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_MOUNT_CAPABILITY, "SELECT MAX(ID) + 1 FROM mount_capability", CONNECTION_SYNCH); // MountTypeXCapability.db2 - PrepareStatement(HOTFIX_SEL_MOUNT_TYPE_X_CAPABILITY, "SELECT ID, MountTypeID, MountCapabilityID, OrderIndex FROM mount_type_x_capability" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_MOUNT_TYPE_X_CAPABILITY, "SELECT ID, MountTypeID, MountCapabilityID, OrderIndex FROM mount_type_x_capability", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_MOUNT_TYPE_X_CAPABILITY, "SELECT MAX(ID) + 1 FROM mount_type_x_capability", CONNECTION_SYNCH); // MountXDisplay.db2 - PrepareStatement(HOTFIX_SEL_MOUNT_X_DISPLAY, "SELECT ID, CreatureDisplayInfoID, PlayerConditionID, MountID FROM mount_x_display ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_MOUNT_X_DISPLAY, "SELECT ID, CreatureDisplayInfoID, PlayerConditionID, MountID FROM mount_x_display", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_MOUNT_X_DISPLAY, "SELECT MAX(ID) + 1 FROM mount_x_display", CONNECTION_SYNCH); // Movie.db2 - PrepareStatement(HOTFIX_SEL_MOVIE, "SELECT ID, Volume, KeyID, AudioFileDataID, SubtitleFileDataID FROM movie ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_MOVIE, "SELECT ID, Volume, KeyID, AudioFileDataID, SubtitleFileDataID FROM movie", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_MOVIE, "SELECT MAX(ID) + 1 FROM movie", CONNECTION_SYNCH); // NameGen.db2 - PrepareStatement(HOTFIX_SEL_NAME_GEN, "SELECT ID, Name, RaceID, Sex FROM name_gen ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_NAME_GEN, "SELECT ID, Name, RaceID, Sex FROM name_gen", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_NAME_GEN, "SELECT MAX(ID) + 1 FROM name_gen", CONNECTION_SYNCH); // NamesProfanity.db2 - PrepareStatement(HOTFIX_SEL_NAMES_PROFANITY, "SELECT ID, Name, Language FROM names_profanity ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_NAMES_PROFANITY, "SELECT ID, Name, Language FROM names_profanity", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_NAMES_PROFANITY, "SELECT MAX(ID) + 1 FROM names_profanity", CONNECTION_SYNCH); // NamesReserved.db2 - PrepareStatement(HOTFIX_SEL_NAMES_RESERVED, "SELECT ID, Name FROM names_reserved ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_NAMES_RESERVED, "SELECT ID, Name FROM names_reserved", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_NAMES_RESERVED, "SELECT MAX(ID) + 1 FROM names_reserved", CONNECTION_SYNCH); // NamesReservedLocale.db2 - PrepareStatement(HOTFIX_SEL_NAMES_RESERVED_LOCALE, "SELECT ID, Name, LocaleMask FROM names_reserved_locale ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_NAMES_RESERVED_LOCALE, "SELECT ID, Name, LocaleMask FROM names_reserved_locale", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_NAMES_RESERVED_LOCALE, "SELECT MAX(ID) + 1 FROM names_reserved_locale", CONNECTION_SYNCH); // NumTalentsAtLevel.db2 - PrepareStatement(HOTFIX_SEL_NUM_TALENTS_AT_LEVEL, "SELECT ID, NumTalents, NumTalentsDeathKnight, NumTalentsDemonHunter FROM num_talents_at_level" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_NUM_TALENTS_AT_LEVEL, "SELECT ID, NumTalents, NumTalentsDeathKnight, NumTalentsDemonHunter FROM num_talents_at_level", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_NUM_TALENTS_AT_LEVEL, "SELECT MAX(ID) + 1 FROM num_talents_at_level", CONNECTION_SYNCH); // OverrideSpellData.db2 PrepareStatement(HOTFIX_SEL_OVERRIDE_SPELL_DATA, "SELECT ID, Spells1, Spells2, Spells3, Spells4, Spells5, Spells6, Spells7, Spells8, Spells9, " - "Spells10, PlayerActionBarFileDataID, Flags FROM override_spell_data ORDER BY ID DESC", CONNECTION_SYNCH); + "Spells10, PlayerActionBarFileDataID, Flags FROM override_spell_data", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_OVERRIDE_SPELL_DATA, "SELECT MAX(ID) + 1 FROM override_spell_data", CONNECTION_SYNCH); // Phase.db2 - PrepareStatement(HOTFIX_SEL_PHASE, "SELECT ID, Flags FROM phase ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_PHASE, "SELECT ID, Flags FROM phase", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_PHASE, "SELECT MAX(ID) + 1 FROM phase", CONNECTION_SYNCH); // PhaseXPhaseGroup.db2 - PrepareStatement(HOTFIX_SEL_PHASE_X_PHASE_GROUP, "SELECT ID, PhaseID, PhaseGroupID FROM phase_x_phase_group ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_PHASE_X_PHASE_GROUP, "SELECT ID, PhaseID, PhaseGroupID FROM phase_x_phase_group", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_PHASE_X_PHASE_GROUP, "SELECT MAX(ID) + 1 FROM phase_x_phase_group", CONNECTION_SYNCH); // PlayerCondition.db2 PrepareStatement(HOTFIX_SEL_PLAYER_CONDITION, "SELECT RaceMask, FailureDescription, ID, MinLevel, MaxLevel, ClassMask, SkillLogic, LanguageID, " @@ -762,164 +903,203 @@ void HotfixDatabaseConnection::DoPrepareStatements() "LfgStatus2, LfgStatus3, LfgStatus4, LfgCompare1, LfgCompare2, LfgCompare3, LfgCompare4, LfgValue1, LfgValue2, LfgValue3, LfgValue4, " "CurrencyID1, CurrencyID2, CurrencyID3, CurrencyID4, CurrencyCount1, CurrencyCount2, CurrencyCount3, CurrencyCount4, QuestKillMonster1, " "QuestKillMonster2, QuestKillMonster3, QuestKillMonster4, QuestKillMonster5, QuestKillMonster6, MovementFlags1, MovementFlags2" - " FROM player_condition ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM player_condition", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_PLAYER_CONDITION, "SELECT MAX(ID) + 1 FROM player_condition", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_PLAYER_CONDITION, "SELECT ID, FailureDescription_lang FROM player_condition_locale WHERE locale = ?", CONNECTION_SYNCH); // PowerDisplay.db2 - PrepareStatement(HOTFIX_SEL_POWER_DISPLAY, "SELECT ID, GlobalStringBaseTag, ActualType, Red, Green, Blue FROM power_display ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_POWER_DISPLAY, "SELECT ID, GlobalStringBaseTag, ActualType, Red, Green, Blue FROM power_display", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_POWER_DISPLAY, "SELECT MAX(ID) + 1 FROM power_display", CONNECTION_SYNCH); // PowerType.db2 PrepareStatement(HOTFIX_SEL_POWER_TYPE, "SELECT NameGlobalStringTag, CostGlobalStringTag, ID, PowerTypeEnum, MinPower, MaxBasePower, CenterPower, " - "DefaultPower, DisplayModifier, RegenInterruptTimeMS, RegenPeace, RegenCombat, Flags FROM power_type ORDER BY ID DESC", CONNECTION_SYNCH); + "DefaultPower, DisplayModifier, RegenInterruptTimeMS, RegenPeace, RegenCombat, Flags FROM power_type", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_POWER_TYPE, "SELECT MAX(ID) + 1 FROM power_type", CONNECTION_SYNCH); // PrestigeLevelInfo.db2 PrepareStatement(HOTFIX_SEL_PRESTIGE_LEVEL_INFO, "SELECT ID, Name, PrestigeLevel, BadgeTextureFileDataID, Flags, AwardedAchievementID" - " FROM prestige_level_info ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM prestige_level_info", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_PRESTIGE_LEVEL_INFO, "SELECT MAX(ID) + 1 FROM prestige_level_info", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_PRESTIGE_LEVEL_INFO, "SELECT ID, Name_lang FROM prestige_level_info_locale WHERE locale = ?", CONNECTION_SYNCH); // PvpDifficulty.db2 - PrepareStatement(HOTFIX_SEL_PVP_DIFFICULTY, "SELECT ID, RangeIndex, MinLevel, MaxLevel, MapID FROM pvp_difficulty ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_PVP_DIFFICULTY, "SELECT ID, RangeIndex, MinLevel, MaxLevel, MapID FROM pvp_difficulty", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_PVP_DIFFICULTY, "SELECT MAX(ID) + 1 FROM pvp_difficulty", CONNECTION_SYNCH); // PvpItem.db2 - PrepareStatement(HOTFIX_SEL_PVP_ITEM, "SELECT ID, ItemID, ItemLevelDelta FROM pvp_item ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_PVP_ITEM, "SELECT ID, ItemID, ItemLevelDelta FROM pvp_item", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_PVP_ITEM, "SELECT MAX(ID) + 1 FROM pvp_item", CONNECTION_SYNCH); // PvpTalent.db2 PrepareStatement(HOTFIX_SEL_PVP_TALENT, "SELECT Description, ID, SpecID, SpellID, OverridesSpellID, Flags, ActionBarSpellID, PvpTalentCategoryID, " - "LevelRequired FROM pvp_talent ORDER BY ID DESC", CONNECTION_SYNCH); + "LevelRequired FROM pvp_talent", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_PVP_TALENT, "SELECT MAX(ID) + 1 FROM pvp_talent", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_PVP_TALENT, "SELECT ID, Description_lang FROM pvp_talent_locale WHERE locale = ?", CONNECTION_SYNCH); // PvpTalentCategory.db2 - PrepareStatement(HOTFIX_SEL_PVP_TALENT_CATEGORY, "SELECT ID, TalentSlotMask FROM pvp_talent_category ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_PVP_TALENT_CATEGORY, "SELECT ID, TalentSlotMask FROM pvp_talent_category", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_PVP_TALENT_CATEGORY, "SELECT MAX(ID) + 1 FROM pvp_talent_category", CONNECTION_SYNCH); // PvpTalentSlotUnlock.db2 PrepareStatement(HOTFIX_SEL_PVP_TALENT_SLOT_UNLOCK, "SELECT ID, Slot, LevelRequired, DeathKnightLevelRequired, DemonHunterLevelRequired" - " FROM pvp_talent_slot_unlock ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM pvp_talent_slot_unlock", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_PVP_TALENT_SLOT_UNLOCK, "SELECT MAX(ID) + 1 FROM pvp_talent_slot_unlock", CONNECTION_SYNCH); // QuestFactionReward.db2 PrepareStatement(HOTFIX_SEL_QUEST_FACTION_REWARD, "SELECT ID, Difficulty1, Difficulty2, Difficulty3, Difficulty4, Difficulty5, Difficulty6, " - "Difficulty7, Difficulty8, Difficulty9, Difficulty10 FROM quest_faction_reward ORDER BY ID DESC", CONNECTION_SYNCH); + "Difficulty7, Difficulty8, Difficulty9, Difficulty10 FROM quest_faction_reward", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_QUEST_FACTION_REWARD, "SELECT MAX(ID) + 1 FROM quest_faction_reward", CONNECTION_SYNCH); // QuestMoneyReward.db2 PrepareStatement(HOTFIX_SEL_QUEST_MONEY_REWARD, "SELECT ID, Difficulty1, Difficulty2, Difficulty3, Difficulty4, Difficulty5, Difficulty6, " - "Difficulty7, Difficulty8, Difficulty9, Difficulty10 FROM quest_money_reward ORDER BY ID DESC", CONNECTION_SYNCH); + "Difficulty7, Difficulty8, Difficulty9, Difficulty10 FROM quest_money_reward", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_QUEST_MONEY_REWARD, "SELECT MAX(ID) + 1 FROM quest_money_reward", CONNECTION_SYNCH); // QuestPackageItem.db2 - PrepareStatement(HOTFIX_SEL_QUEST_PACKAGE_ITEM, "SELECT ID, PackageID, ItemID, ItemQuantity, DisplayType FROM quest_package_item ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_QUEST_PACKAGE_ITEM, "SELECT ID, PackageID, ItemID, ItemQuantity, DisplayType FROM quest_package_item", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_QUEST_PACKAGE_ITEM, "SELECT MAX(ID) + 1 FROM quest_package_item", CONNECTION_SYNCH); // QuestSort.db2 - PrepareStatement(HOTFIX_SEL_QUEST_SORT, "SELECT ID, SortName, UiOrderIndex FROM quest_sort ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_QUEST_SORT, "SELECT ID, SortName, UiOrderIndex FROM quest_sort", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_QUEST_SORT, "SELECT MAX(ID) + 1 FROM quest_sort", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_QUEST_SORT, "SELECT ID, SortName_lang FROM quest_sort_locale WHERE locale = ?", CONNECTION_SYNCH); // QuestV2.db2 - PrepareStatement(HOTFIX_SEL_QUEST_V2, "SELECT ID, UniqueBitFlag FROM quest_v2 ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_QUEST_V2, "SELECT ID, UniqueBitFlag FROM quest_v2", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_QUEST_V2, "SELECT MAX(ID) + 1 FROM quest_v2", CONNECTION_SYNCH); // QuestXp.db2 PrepareStatement(HOTFIX_SEL_QUEST_XP, "SELECT ID, Difficulty1, Difficulty2, Difficulty3, Difficulty4, Difficulty5, Difficulty6, Difficulty7, " - "Difficulty8, Difficulty9, Difficulty10 FROM quest_xp ORDER BY ID DESC", CONNECTION_SYNCH); + "Difficulty8, Difficulty9, Difficulty10 FROM quest_xp", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_QUEST_XP, "SELECT MAX(ID) + 1 FROM quest_xp", CONNECTION_SYNCH); // RandPropPoints.db2 PrepareStatement(HOTFIX_SEL_RAND_PROP_POINTS, "SELECT ID, DamageReplaceStat, DamageSecondary, Epic1, Epic2, Epic3, Epic4, Epic5, Superior1, " - "Superior2, Superior3, Superior4, Superior5, Good1, Good2, Good3, Good4, Good5 FROM rand_prop_points ORDER BY ID DESC", CONNECTION_SYNCH); + "Superior2, Superior3, Superior4, Superior5, Good1, Good2, Good3, Good4, Good5 FROM rand_prop_points", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_RAND_PROP_POINTS, "SELECT MAX(ID) + 1 FROM rand_prop_points", CONNECTION_SYNCH); // RewardPack.db2 PrepareStatement(HOTFIX_SEL_REWARD_PACK, "SELECT ID, CharTitleID, Money, ArtifactXPDifficulty, ArtifactXPMultiplier, ArtifactXPCategoryID, " - "TreasurePickerID FROM reward_pack ORDER BY ID DESC", CONNECTION_SYNCH); + "TreasurePickerID FROM reward_pack", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_REWARD_PACK, "SELECT MAX(ID) + 1 FROM reward_pack", CONNECTION_SYNCH); // RewardPackXCurrencyType.db2 - PrepareStatement(HOTFIX_SEL_REWARD_PACK_X_CURRENCY_TYPE, "SELECT ID, CurrencyTypeID, Quantity, RewardPackID FROM reward_pack_x_currency_type" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_REWARD_PACK_X_CURRENCY_TYPE, "SELECT ID, CurrencyTypeID, Quantity, RewardPackID FROM reward_pack_x_currency_type", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_REWARD_PACK_X_CURRENCY_TYPE, "SELECT MAX(ID) + 1 FROM reward_pack_x_currency_type", CONNECTION_SYNCH); // RewardPackXItem.db2 - PrepareStatement(HOTFIX_SEL_REWARD_PACK_X_ITEM, "SELECT ID, ItemID, ItemQuantity, RewardPackID FROM reward_pack_x_item ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_REWARD_PACK_X_ITEM, "SELECT ID, ItemID, ItemQuantity, RewardPackID FROM reward_pack_x_item", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_REWARD_PACK_X_ITEM, "SELECT MAX(ID) + 1 FROM reward_pack_x_item", CONNECTION_SYNCH); // ScalingStatDistribution.db2 PrepareStatement(HOTFIX_SEL_SCALING_STAT_DISTRIBUTION, "SELECT ID, PlayerLevelToItemLevelCurveID, MinLevel, MaxLevel" - " FROM scaling_stat_distribution ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM scaling_stat_distribution", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SCALING_STAT_DISTRIBUTION, "SELECT MAX(ID) + 1 FROM scaling_stat_distribution", CONNECTION_SYNCH); // Scenario.db2 - PrepareStatement(HOTFIX_SEL_SCENARIO, "SELECT ID, Name, AreaTableID, Type, Flags, UiTextureKitID FROM scenario ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SCENARIO, "SELECT ID, Name, AreaTableID, Type, Flags, UiTextureKitID FROM scenario", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SCENARIO, "SELECT MAX(ID) + 1 FROM scenario", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_SCENARIO, "SELECT ID, Name_lang FROM scenario_locale WHERE locale = ?", CONNECTION_SYNCH); // ScenarioStep.db2 PrepareStatement(HOTFIX_SEL_SCENARIO_STEP, "SELECT ID, Description, Title, ScenarioID, Criteriatreeid, RewardQuestID, RelatedStep, Supersedes, " - "OrderIndex, Flags, VisibilityPlayerConditionID, WidgetSetID FROM scenario_step ORDER BY ID DESC", CONNECTION_SYNCH); + "OrderIndex, Flags, VisibilityPlayerConditionID, WidgetSetID FROM scenario_step", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SCENARIO_STEP, "SELECT MAX(ID) + 1 FROM scenario_step", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_SCENARIO_STEP, "SELECT ID, Description_lang, Title_lang FROM scenario_step_locale WHERE locale = ?", CONNECTION_SYNCH); // SceneScript.db2 - PrepareStatement(HOTFIX_SEL_SCENE_SCRIPT, "SELECT ID, FirstSceneScriptID, NextSceneScriptID FROM scene_script ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SCENE_SCRIPT, "SELECT ID, FirstSceneScriptID, NextSceneScriptID FROM scene_script", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SCENE_SCRIPT, "SELECT MAX(ID) + 1 FROM scene_script", CONNECTION_SYNCH); // SceneScriptGlobalText.db2 - PrepareStatement(HOTFIX_SEL_SCENE_SCRIPT_GLOBAL_TEXT, "SELECT ID, Name, Script FROM scene_script_global_text ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SCENE_SCRIPT_GLOBAL_TEXT, "SELECT ID, Name, Script FROM scene_script_global_text", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SCENE_SCRIPT_GLOBAL_TEXT, "SELECT MAX(ID) + 1 FROM scene_script_global_text", CONNECTION_SYNCH); // SceneScriptPackage.db2 - PrepareStatement(HOTFIX_SEL_SCENE_SCRIPT_PACKAGE, "SELECT ID, Name FROM scene_script_package ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SCENE_SCRIPT_PACKAGE, "SELECT ID, Name FROM scene_script_package", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SCENE_SCRIPT_PACKAGE, "SELECT MAX(ID) + 1 FROM scene_script_package", CONNECTION_SYNCH); // SceneScriptText.db2 - PrepareStatement(HOTFIX_SEL_SCENE_SCRIPT_TEXT, "SELECT ID, Name, Script FROM scene_script_text ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SCENE_SCRIPT_TEXT, "SELECT ID, Name, Script FROM scene_script_text", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SCENE_SCRIPT_TEXT, "SELECT MAX(ID) + 1 FROM scene_script_text", CONNECTION_SYNCH); // SkillLine.db2 PrepareStatement(HOTFIX_SEL_SKILL_LINE, "SELECT DisplayName, AlternateVerb, Description, HordeDisplayName, OverrideSourceInfoDisplayName, ID, " - "CategoryID, SpellIconFileID, CanLink, ParentSkillLineID, ParentTierIndex, Flags, SpellBookSpellID FROM skill_line ORDER BY ID DESC", CONNECTION_SYNCH); + "CategoryID, SpellIconFileID, CanLink, ParentSkillLineID, ParentTierIndex, Flags, SpellBookSpellID FROM skill_line", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SKILL_LINE, "SELECT MAX(ID) + 1 FROM skill_line", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_SKILL_LINE, "SELECT ID, DisplayName_lang, AlternateVerb_lang, Description_lang, HordeDisplayName_lang" " FROM skill_line_locale WHERE locale = ?", CONNECTION_SYNCH); // SkillLineAbility.db2 PrepareStatement(HOTFIX_SEL_SKILL_LINE_ABILITY, "SELECT RaceMask, ID, SkillLine, Spell, MinSkillLineRank, ClassMask, SupercedesSpell, " "AcquireMethod, TrivialSkillLineRankHigh, TrivialSkillLineRankLow, Flags, NumSkillUps, UniqueBit, TradeSkillCategoryID, SkillupSkillLineID" - " FROM skill_line_ability ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM skill_line_ability", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SKILL_LINE_ABILITY, "SELECT MAX(ID) + 1 FROM skill_line_ability", CONNECTION_SYNCH); // SkillRaceClassInfo.db2 PrepareStatement(HOTFIX_SEL_SKILL_RACE_CLASS_INFO, "SELECT ID, RaceMask, SkillID, ClassMask, Flags, Availability, MinLevel, SkillTierID" - " FROM skill_race_class_info ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM skill_race_class_info", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SKILL_RACE_CLASS_INFO, "SELECT MAX(ID) + 1 FROM skill_race_class_info", CONNECTION_SYNCH); // SoundKit.db2 PrepareStatement(HOTFIX_SEL_SOUND_KIT, "SELECT ID, SoundType, VolumeFloat, Flags, MinDistance, DistanceCutoff, EAXDef, SoundKitAdvancedID, " "VolumeVariationPlus, VolumeVariationMinus, PitchVariationPlus, PitchVariationMinus, DialogType, PitchAdjust, BusOverwriteID, MaxInstances" - " FROM sound_kit ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM sound_kit", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SOUND_KIT, "SELECT MAX(ID) + 1 FROM sound_kit", CONNECTION_SYNCH); // SpecializationSpells.db2 PrepareStatement(HOTFIX_SEL_SPECIALIZATION_SPELLS, "SELECT Description, ID, SpecID, SpellID, OverridesSpellID, DisplayOrder" - " FROM specialization_spells ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM specialization_spells", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPECIALIZATION_SPELLS, "SELECT MAX(ID) + 1 FROM specialization_spells", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_SPECIALIZATION_SPELLS, "SELECT ID, Description_lang FROM specialization_spells_locale WHERE locale = ?", CONNECTION_SYNCH); // SpecSetMember.db2 - PrepareStatement(HOTFIX_SEL_SPEC_SET_MEMBER, "SELECT ID, ChrSpecializationID, SpecSetID FROM spec_set_member ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SPEC_SET_MEMBER, "SELECT ID, ChrSpecializationID, SpecSetID FROM spec_set_member", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPEC_SET_MEMBER, "SELECT MAX(ID) + 1 FROM spec_set_member", CONNECTION_SYNCH); // SpellAuraOptions.db2 PrepareStatement(HOTFIX_SEL_SPELL_AURA_OPTIONS, "SELECT ID, DifficultyID, CumulativeAura, ProcCategoryRecovery, ProcChance, ProcCharges, " - "SpellProcsPerMinuteID, ProcTypeMask1, ProcTypeMask2, SpellID FROM spell_aura_options ORDER BY ID DESC", CONNECTION_SYNCH); + "SpellProcsPerMinuteID, ProcTypeMask1, ProcTypeMask2, SpellID FROM spell_aura_options", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_AURA_OPTIONS, "SELECT MAX(ID) + 1 FROM spell_aura_options", CONNECTION_SYNCH); // SpellAuraRestrictions.db2 PrepareStatement(HOTFIX_SEL_SPELL_AURA_RESTRICTIONS, "SELECT ID, DifficultyID, CasterAuraState, TargetAuraState, ExcludeCasterAuraState, " "ExcludeTargetAuraState, CasterAuraSpell, TargetAuraSpell, ExcludeCasterAuraSpell, ExcludeTargetAuraSpell, SpellID" - " FROM spell_aura_restrictions ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM spell_aura_restrictions", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_AURA_RESTRICTIONS, "SELECT MAX(ID) + 1 FROM spell_aura_restrictions", CONNECTION_SYNCH); // SpellCastTimes.db2 - PrepareStatement(HOTFIX_SEL_SPELL_CAST_TIMES, "SELECT ID, Base, PerLevel, Minimum FROM spell_cast_times ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SPELL_CAST_TIMES, "SELECT ID, Base, PerLevel, Minimum FROM spell_cast_times", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_CAST_TIMES, "SELECT MAX(ID) + 1 FROM spell_cast_times", CONNECTION_SYNCH); // SpellCastingRequirements.db2 PrepareStatement(HOTFIX_SEL_SPELL_CASTING_REQUIREMENTS, "SELECT ID, SpellID, FacingCasterFlags, MinFactionID, MinReputation, RequiredAreasID, " - "RequiredAuraVision, RequiresSpellFocus FROM spell_casting_requirements ORDER BY ID DESC", CONNECTION_SYNCH); + "RequiredAuraVision, RequiresSpellFocus FROM spell_casting_requirements", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_CASTING_REQUIREMENTS, "SELECT MAX(ID) + 1 FROM spell_casting_requirements", CONNECTION_SYNCH); // SpellCategories.db2 PrepareStatement(HOTFIX_SEL_SPELL_CATEGORIES, "SELECT ID, DifficultyID, Category, DefenseType, DispelType, Mechanic, PreventionType, " - "StartRecoveryCategory, ChargeCategory, SpellID FROM spell_categories ORDER BY ID DESC", CONNECTION_SYNCH); + "StartRecoveryCategory, ChargeCategory, SpellID FROM spell_categories", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_CATEGORIES, "SELECT MAX(ID) + 1 FROM spell_categories", CONNECTION_SYNCH); // SpellCategory.db2 - PrepareStatement(HOTFIX_SEL_SPELL_CATEGORY, "SELECT ID, Name, Flags, UsesPerWeek, MaxCharges, ChargeRecoveryTime, TypeMask FROM spell_category" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SPELL_CATEGORY, "SELECT ID, Name, Flags, UsesPerWeek, MaxCharges, ChargeRecoveryTime, TypeMask FROM spell_category", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_CATEGORY, "SELECT MAX(ID) + 1 FROM spell_category", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_SPELL_CATEGORY, "SELECT ID, Name_lang FROM spell_category_locale WHERE locale = ?", CONNECTION_SYNCH); // SpellClassOptions.db2 PrepareStatement(HOTFIX_SEL_SPELL_CLASS_OPTIONS, "SELECT ID, SpellID, ModalNextSpell, SpellClassSet, SpellClassMask1, SpellClassMask2, " - "SpellClassMask3, SpellClassMask4 FROM spell_class_options ORDER BY ID DESC", CONNECTION_SYNCH); + "SpellClassMask3, SpellClassMask4 FROM spell_class_options", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_CLASS_OPTIONS, "SELECT MAX(ID) + 1 FROM spell_class_options", CONNECTION_SYNCH); // SpellCooldowns.db2 PrepareStatement(HOTFIX_SEL_SPELL_COOLDOWNS, "SELECT ID, DifficultyID, CategoryRecoveryTime, RecoveryTime, StartRecoveryTime, SpellID" - " FROM spell_cooldowns ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM spell_cooldowns", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_COOLDOWNS, "SELECT MAX(ID) + 1 FROM spell_cooldowns", CONNECTION_SYNCH); // SpellDuration.db2 - PrepareStatement(HOTFIX_SEL_SPELL_DURATION, "SELECT ID, Duration, DurationPerLevel, MaxDuration FROM spell_duration ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SPELL_DURATION, "SELECT ID, Duration, DurationPerLevel, MaxDuration FROM spell_duration", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_DURATION, "SELECT MAX(ID) + 1 FROM spell_duration", CONNECTION_SYNCH); // SpellEffect.db2 PrepareStatement(HOTFIX_SEL_SPELL_EFFECT, "SELECT ID, EffectAura, DifficultyID, EffectIndex, Effect, EffectAmplitude, EffectAttributes, " @@ -927,184 +1107,222 @@ void HotfixDatabaseConnection::DoPrepareStatements() "EffectPosFacing, EffectRealPointsPerLevel, EffectTriggerSpell, BonusCoefficientFromAP, PvpMultiplier, Coefficient, Variance, " "ResourceCoefficient, GroupSizeBasePointsCoefficient, EffectBasePoints, EffectMiscValue1, EffectMiscValue2, EffectRadiusIndex1, " "EffectRadiusIndex2, EffectSpellClassMask1, EffectSpellClassMask2, EffectSpellClassMask3, EffectSpellClassMask4, ImplicitTarget1, " - "ImplicitTarget2, SpellID FROM spell_effect ORDER BY ID DESC", CONNECTION_SYNCH); + "ImplicitTarget2, SpellID FROM spell_effect", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_EFFECT, "SELECT MAX(ID) + 1 FROM spell_effect", CONNECTION_SYNCH); // SpellEquippedItems.db2 PrepareStatement(HOTFIX_SEL_SPELL_EQUIPPED_ITEMS, "SELECT ID, SpellID, EquippedItemClass, EquippedItemInvTypes, EquippedItemSubclass" - " FROM spell_equipped_items ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM spell_equipped_items", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_EQUIPPED_ITEMS, "SELECT MAX(ID) + 1 FROM spell_equipped_items", CONNECTION_SYNCH); // SpellFocusObject.db2 - PrepareStatement(HOTFIX_SEL_SPELL_FOCUS_OBJECT, "SELECT ID, Name FROM spell_focus_object ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SPELL_FOCUS_OBJECT, "SELECT ID, Name FROM spell_focus_object", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_FOCUS_OBJECT, "SELECT MAX(ID) + 1 FROM spell_focus_object", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_SPELL_FOCUS_OBJECT, "SELECT ID, Name_lang FROM spell_focus_object_locale WHERE locale = ?", CONNECTION_SYNCH); // SpellInterrupts.db2 PrepareStatement(HOTFIX_SEL_SPELL_INTERRUPTS, "SELECT ID, DifficultyID, InterruptFlags, AuraInterruptFlags1, AuraInterruptFlags2, " - "ChannelInterruptFlags1, ChannelInterruptFlags2, SpellID FROM spell_interrupts ORDER BY ID DESC", CONNECTION_SYNCH); + "ChannelInterruptFlags1, ChannelInterruptFlags2, SpellID FROM spell_interrupts", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_INTERRUPTS, "SELECT MAX(ID) + 1 FROM spell_interrupts", CONNECTION_SYNCH); // SpellItemEnchantment.db2 PrepareStatement(HOTFIX_SEL_SPELL_ITEM_ENCHANTMENT, "SELECT ID, Name, HordeName, EffectArg1, EffectArg2, EffectArg3, EffectScalingPoints1, " "EffectScalingPoints2, EffectScalingPoints3, TransmogPlayerConditionID, TransmogCost, IconFileDataID, EffectPointsMin1, EffectPointsMin2, " "EffectPointsMin3, ItemVisual, Flags, RequiredSkillID, RequiredSkillRank, ItemLevel, Charges, Effect1, Effect2, Effect3, ScalingClass, " - "ScalingClassRestricted, ConditionID, MinLevel, MaxLevel FROM spell_item_enchantment ORDER BY ID DESC", CONNECTION_SYNCH); + "ScalingClassRestricted, ConditionID, MinLevel, MaxLevel FROM spell_item_enchantment", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_ITEM_ENCHANTMENT, "SELECT MAX(ID) + 1 FROM spell_item_enchantment", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_SPELL_ITEM_ENCHANTMENT, "SELECT ID, Name_lang, HordeName_lang FROM spell_item_enchantment_locale WHERE locale = ?", CONNECTION_SYNCH); // SpellItemEnchantmentCondition.db2 PrepareStatement(HOTFIX_SEL_SPELL_ITEM_ENCHANTMENT_CONDITION, "SELECT ID, LtOperandType1, LtOperandType2, LtOperandType3, LtOperandType4, " "LtOperandType5, LtOperand1, LtOperand2, LtOperand3, LtOperand4, LtOperand5, Operator1, Operator2, Operator3, Operator4, Operator5, " "RtOperandType1, RtOperandType2, RtOperandType3, RtOperandType4, RtOperandType5, RtOperand1, RtOperand2, RtOperand3, RtOperand4, RtOperand5, " - "Logic1, Logic2, Logic3, Logic4, Logic5 FROM spell_item_enchantment_condition ORDER BY ID DESC", CONNECTION_SYNCH); + "Logic1, Logic2, Logic3, Logic4, Logic5 FROM spell_item_enchantment_condition", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_ITEM_ENCHANTMENT_CONDITION, "SELECT MAX(ID) + 1 FROM spell_item_enchantment_condition", CONNECTION_SYNCH); // SpellLearnSpell.db2 - PrepareStatement(HOTFIX_SEL_SPELL_LEARN_SPELL, "SELECT ID, SpellID, LearnSpellID, OverridesSpellID FROM spell_learn_spell ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SPELL_LEARN_SPELL, "SELECT ID, SpellID, LearnSpellID, OverridesSpellID FROM spell_learn_spell", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_LEARN_SPELL, "SELECT MAX(ID) + 1 FROM spell_learn_spell", CONNECTION_SYNCH); // SpellLevels.db2 PrepareStatement(HOTFIX_SEL_SPELL_LEVELS, "SELECT ID, DifficultyID, BaseLevel, MaxLevel, SpellLevel, MaxPassiveAuraLevel, SpellID" - " FROM spell_levels ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM spell_levels", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_LEVELS, "SELECT MAX(ID) + 1 FROM spell_levels", CONNECTION_SYNCH); // SpellMisc.db2 PrepareStatement(HOTFIX_SEL_SPELL_MISC, "SELECT ID, Attributes1, Attributes2, Attributes3, Attributes4, Attributes5, Attributes6, Attributes7, " "Attributes8, Attributes9, Attributes10, Attributes11, Attributes12, Attributes13, Attributes14, DifficultyID, CastingTimeIndex, " "DurationIndex, RangeIndex, SchoolMask, Speed, LaunchDelay, MinDuration, SpellIconFileDataID, ActiveIconFileDataID, ContentTuningID, SpellID" - " FROM spell_misc ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM spell_misc", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_MISC, "SELECT MAX(ID) + 1 FROM spell_misc", CONNECTION_SYNCH); // SpellName.db2 - PrepareStatement(HOTFIX_SEL_SPELL_NAME, "SELECT ID, Name FROM spell_name ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SPELL_NAME, "SELECT ID, Name FROM spell_name", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_NAME, "SELECT MAX(ID) + 1 FROM spell_name", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_SPELL_NAME, "SELECT ID, Name_lang FROM spell_name_locale WHERE locale = ?", CONNECTION_SYNCH); // SpellPower.db2 PrepareStatement(HOTFIX_SEL_SPELL_POWER, "SELECT ID, OrderIndex, ManaCost, ManaCostPerLevel, ManaPerSecond, PowerDisplayID, AltPowerBarID, " - "PowerCostPct, PowerCostMaxPct, PowerPctPerSecond, PowerType, RequiredAuraSpellID, OptionalCost, SpellID FROM spell_power ORDER BY ID DESC", CONNECTION_SYNCH); + "PowerCostPct, PowerCostMaxPct, PowerPctPerSecond, PowerType, RequiredAuraSpellID, OptionalCost, SpellID FROM spell_power", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_POWER, "SELECT MAX(ID) + 1 FROM spell_power", CONNECTION_SYNCH); // SpellPowerDifficulty.db2 - PrepareStatement(HOTFIX_SEL_SPELL_POWER_DIFFICULTY, "SELECT ID, DifficultyID, OrderIndex FROM spell_power_difficulty ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SPELL_POWER_DIFFICULTY, "SELECT ID, DifficultyID, OrderIndex FROM spell_power_difficulty", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_POWER_DIFFICULTY, "SELECT MAX(ID) + 1 FROM spell_power_difficulty", CONNECTION_SYNCH); // SpellProcsPerMinute.db2 - PrepareStatement(HOTFIX_SEL_SPELL_PROCS_PER_MINUTE, "SELECT ID, BaseProcRate, Flags FROM spell_procs_per_minute ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SPELL_PROCS_PER_MINUTE, "SELECT ID, BaseProcRate, Flags FROM spell_procs_per_minute", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_PROCS_PER_MINUTE, "SELECT MAX(ID) + 1 FROM spell_procs_per_minute", CONNECTION_SYNCH); // SpellProcsPerMinuteMod.db2 - PrepareStatement(HOTFIX_SEL_SPELL_PROCS_PER_MINUTE_MOD, "SELECT ID, Type, Param, Coeff, SpellProcsPerMinuteID FROM spell_procs_per_minute_mod" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SPELL_PROCS_PER_MINUTE_MOD, "SELECT ID, Type, Param, Coeff, SpellProcsPerMinuteID FROM spell_procs_per_minute_mod", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_PROCS_PER_MINUTE_MOD, "SELECT MAX(ID) + 1 FROM spell_procs_per_minute_mod", CONNECTION_SYNCH); // SpellRadius.db2 - PrepareStatement(HOTFIX_SEL_SPELL_RADIUS, "SELECT ID, Radius, RadiusPerLevel, RadiusMin, RadiusMax FROM spell_radius ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SPELL_RADIUS, "SELECT ID, Radius, RadiusPerLevel, RadiusMin, RadiusMax FROM spell_radius", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_RADIUS, "SELECT MAX(ID) + 1 FROM spell_radius", CONNECTION_SYNCH); // SpellRange.db2 PrepareStatement(HOTFIX_SEL_SPELL_RANGE, "SELECT ID, DisplayName, DisplayNameShort, Flags, RangeMin1, RangeMin2, RangeMax1, RangeMax2" - " FROM spell_range ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM spell_range", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_RANGE, "SELECT MAX(ID) + 1 FROM spell_range", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_SPELL_RANGE, "SELECT ID, DisplayName_lang, DisplayNameShort_lang FROM spell_range_locale WHERE locale = ?", CONNECTION_SYNCH); // SpellReagents.db2 PrepareStatement(HOTFIX_SEL_SPELL_REAGENTS, "SELECT ID, SpellID, Reagent1, Reagent2, Reagent3, Reagent4, Reagent5, Reagent6, Reagent7, Reagent8, " - "ReagentCount1, ReagentCount2, ReagentCount3, ReagentCount4, ReagentCount5, ReagentCount6, ReagentCount7, ReagentCount8 FROM spell_reagents" - " ORDER BY ID DESC", CONNECTION_SYNCH); + "ReagentCount1, ReagentCount2, ReagentCount3, ReagentCount4, ReagentCount5, ReagentCount6, ReagentCount7, ReagentCount8 FROM spell_reagents", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_REAGENTS, "SELECT MAX(ID) + 1 FROM spell_reagents", CONNECTION_SYNCH); // SpellScaling.db2 - PrepareStatement(HOTFIX_SEL_SPELL_SCALING, "SELECT ID, SpellID, Class, MinScalingLevel, MaxScalingLevel, ScalesFromItemLevel FROM spell_scaling" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SPELL_SCALING, "SELECT ID, SpellID, Class, MinScalingLevel, MaxScalingLevel, ScalesFromItemLevel FROM spell_scaling", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_SCALING, "SELECT MAX(ID) + 1 FROM spell_scaling", CONNECTION_SYNCH); // SpellShapeshift.db2 PrepareStatement(HOTFIX_SEL_SPELL_SHAPESHIFT, "SELECT ID, SpellID, StanceBarOrder, ShapeshiftExclude1, ShapeshiftExclude2, ShapeshiftMask1, " - "ShapeshiftMask2 FROM spell_shapeshift ORDER BY ID DESC", CONNECTION_SYNCH); + "ShapeshiftMask2 FROM spell_shapeshift", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_SHAPESHIFT, "SELECT MAX(ID) + 1 FROM spell_shapeshift", CONNECTION_SYNCH); // SpellShapeshiftForm.db2 PrepareStatement(HOTFIX_SEL_SPELL_SHAPESHIFT_FORM, "SELECT ID, Name, CreatureType, Flags, AttackIconFileID, BonusActionBar, CombatRoundTime, " "DamageVariance, MountTypeID, CreatureDisplayID1, CreatureDisplayID2, CreatureDisplayID3, CreatureDisplayID4, PresetSpellID1, PresetSpellID2, " - "PresetSpellID3, PresetSpellID4, PresetSpellID5, PresetSpellID6, PresetSpellID7, PresetSpellID8 FROM spell_shapeshift_form ORDER BY ID DESC", CONNECTION_SYNCH); + "PresetSpellID3, PresetSpellID4, PresetSpellID5, PresetSpellID6, PresetSpellID7, PresetSpellID8 FROM spell_shapeshift_form", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_SHAPESHIFT_FORM, "SELECT MAX(ID) + 1 FROM spell_shapeshift_form", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_SPELL_SHAPESHIFT_FORM, "SELECT ID, Name_lang FROM spell_shapeshift_form_locale WHERE locale = ?", CONNECTION_SYNCH); // SpellTargetRestrictions.db2 PrepareStatement(HOTFIX_SEL_SPELL_TARGET_RESTRICTIONS, "SELECT ID, DifficultyID, ConeDegrees, MaxTargets, MaxTargetLevel, TargetCreatureType, " - "Targets, Width, SpellID FROM spell_target_restrictions ORDER BY ID DESC", CONNECTION_SYNCH); + "Targets, Width, SpellID FROM spell_target_restrictions", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_TARGET_RESTRICTIONS, "SELECT MAX(ID) + 1 FROM spell_target_restrictions", CONNECTION_SYNCH); // SpellTotems.db2 PrepareStatement(HOTFIX_SEL_SPELL_TOTEMS, "SELECT ID, SpellID, RequiredTotemCategoryID1, RequiredTotemCategoryID2, Totem1, Totem2" - " FROM spell_totems ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM spell_totems", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_TOTEMS, "SELECT MAX(ID) + 1 FROM spell_totems", CONNECTION_SYNCH); // SpellVisualKit.db2 PrepareStatement(HOTFIX_SEL_SPELL_VISUAL_KIT, "SELECT ID, FallbackPriority, FallbackSpellVisualKitId, DelayMin, DelayMax, Flags1, Flags2" - " FROM spell_visual_kit ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM spell_visual_kit", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_VISUAL_KIT, "SELECT MAX(ID) + 1 FROM spell_visual_kit", CONNECTION_SYNCH); // SpellXSpellVisual.db2 PrepareStatement(HOTFIX_SEL_SPELL_X_SPELL_VISUAL, "SELECT ID, DifficultyID, SpellVisualID, Probability, Flags, Priority, SpellIconFileID, " "ActiveIconFileID, ViewerUnitConditionID, ViewerPlayerConditionID, CasterUnitConditionID, CasterPlayerConditionID, SpellID" - " FROM spell_x_spell_visual ORDER BY ID DESC", CONNECTION_SYNCH); + " FROM spell_x_spell_visual", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_X_SPELL_VISUAL, "SELECT MAX(ID) + 1 FROM spell_x_spell_visual", CONNECTION_SYNCH); // SummonProperties.db2 - PrepareStatement(HOTFIX_SEL_SUMMON_PROPERTIES, "SELECT ID, Control, Faction, Title, Slot, Flags FROM summon_properties ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_SUMMON_PROPERTIES, "SELECT ID, Control, Faction, Title, Slot, Flags FROM summon_properties", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_SUMMON_PROPERTIES, "SELECT MAX(ID) + 1 FROM summon_properties", CONNECTION_SYNCH); // TactKey.db2 PrepareStatement(HOTFIX_SEL_TACT_KEY, "SELECT ID, Key1, Key2, Key3, Key4, Key5, Key6, Key7, Key8, Key9, Key10, Key11, Key12, Key13, Key14, Key15, " - "Key16 FROM tact_key ORDER BY ID DESC", CONNECTION_SYNCH); + "Key16 FROM tact_key", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_TACT_KEY, "SELECT MAX(ID) + 1 FROM tact_key", CONNECTION_SYNCH); // Talent.db2 PrepareStatement(HOTFIX_SEL_TALENT, "SELECT ID, Description, TierID, Flags, ColumnIndex, ClassID, SpecID, SpellID, OverridesSpellID, " - "CategoryMask1, CategoryMask2 FROM talent ORDER BY ID DESC", CONNECTION_SYNCH); + "CategoryMask1, CategoryMask2 FROM talent", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_TALENT, "SELECT MAX(ID) + 1 FROM talent", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_TALENT, "SELECT ID, Description_lang FROM talent_locale WHERE locale = ?", CONNECTION_SYNCH); // TaxiNodes.db2 PrepareStatement(HOTFIX_SEL_TAXI_NODES, "SELECT Name, PosX, PosY, PosZ, MapOffsetX, MapOffsetY, FlightMapOffsetX, FlightMapOffsetY, ID, " "ContinentID, ConditionID, CharacterBitNumber, Flags, UiTextureKitID, MinimapAtlasMemberID, Facing, SpecialIconConditionID, " - "VisibilityConditionID, MountCreatureID1, MountCreatureID2 FROM taxi_nodes ORDER BY ID DESC", CONNECTION_SYNCH); + "VisibilityConditionID, MountCreatureID1, MountCreatureID2 FROM taxi_nodes", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_TAXI_NODES, "SELECT MAX(ID) + 1 FROM taxi_nodes", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_TAXI_NODES, "SELECT ID, Name_lang FROM taxi_nodes_locale WHERE locale = ?", CONNECTION_SYNCH); // TaxiPath.db2 - PrepareStatement(HOTFIX_SEL_TAXI_PATH, "SELECT ID, FromTaxiNode, ToTaxiNode, Cost FROM taxi_path ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_TAXI_PATH, "SELECT ID, FromTaxiNode, ToTaxiNode, Cost FROM taxi_path", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_TAXI_PATH, "SELECT MAX(ID) + 1 FROM taxi_path", CONNECTION_SYNCH); // TaxiPathNode.db2 PrepareStatement(HOTFIX_SEL_TAXI_PATH_NODE, "SELECT LocX, LocY, LocZ, ID, PathID, NodeIndex, ContinentID, Flags, Delay, ArrivalEventID, " - "DepartureEventID FROM taxi_path_node ORDER BY ID DESC", CONNECTION_SYNCH); + "DepartureEventID FROM taxi_path_node", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_TAXI_PATH_NODE, "SELECT MAX(ID) + 1 FROM taxi_path_node", CONNECTION_SYNCH); // TotemCategory.db2 - PrepareStatement(HOTFIX_SEL_TOTEM_CATEGORY, "SELECT ID, Name, TotemCategoryType, TotemCategoryMask FROM totem_category ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_TOTEM_CATEGORY, "SELECT ID, Name, TotemCategoryType, TotemCategoryMask FROM totem_category", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_TOTEM_CATEGORY, "SELECT MAX(ID) + 1 FROM totem_category", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_TOTEM_CATEGORY, "SELECT ID, Name_lang FROM totem_category_locale WHERE locale = ?", CONNECTION_SYNCH); // Toy.db2 - PrepareStatement(HOTFIX_SEL_TOY, "SELECT SourceText, ID, ItemID, Flags, SourceTypeEnum FROM toy ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_TOY, "SELECT SourceText, ID, ItemID, Flags, SourceTypeEnum FROM toy", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_TOY, "SELECT MAX(ID) + 1 FROM toy", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_TOY, "SELECT ID, SourceText_lang FROM toy_locale WHERE locale = ?", CONNECTION_SYNCH); // TransmogHoliday.db2 - PrepareStatement(HOTFIX_SEL_TRANSMOG_HOLIDAY, "SELECT ID, RequiredTransmogHoliday FROM transmog_holiday ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_TRANSMOG_HOLIDAY, "SELECT ID, RequiredTransmogHoliday FROM transmog_holiday", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_TRANSMOG_HOLIDAY, "SELECT MAX(ID) + 1 FROM transmog_holiday", CONNECTION_SYNCH); // TransmogSet.db2 PrepareStatement(HOTFIX_SEL_TRANSMOG_SET, "SELECT Name, ID, ClassMask, TrackingQuestID, Flags, TransmogSetGroupID, ItemNameDescriptionID, " - "ParentTransmogSetID, Unknown810, ExpansionID, PatchID, UiOrder, PlayerConditionID FROM transmog_set ORDER BY ID DESC", CONNECTION_SYNCH); + "ParentTransmogSetID, Unknown810, ExpansionID, PatchID, UiOrder, PlayerConditionID FROM transmog_set", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_TRANSMOG_SET, "SELECT MAX(ID) + 1 FROM transmog_set", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_TRANSMOG_SET, "SELECT ID, Name_lang FROM transmog_set_locale WHERE locale = ?", CONNECTION_SYNCH); // TransmogSetGroup.db2 - PrepareStatement(HOTFIX_SEL_TRANSMOG_SET_GROUP, "SELECT Name, ID FROM transmog_set_group ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_TRANSMOG_SET_GROUP, "SELECT Name, ID FROM transmog_set_group", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_TRANSMOG_SET_GROUP, "SELECT MAX(ID) + 1 FROM transmog_set_group", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_TRANSMOG_SET_GROUP, "SELECT ID, Name_lang FROM transmog_set_group_locale WHERE locale = ?", CONNECTION_SYNCH); // TransmogSetItem.db2 - PrepareStatement(HOTFIX_SEL_TRANSMOG_SET_ITEM, "SELECT ID, TransmogSetID, ItemModifiedAppearanceID, Flags FROM transmog_set_item ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_TRANSMOG_SET_ITEM, "SELECT ID, TransmogSetID, ItemModifiedAppearanceID, Flags FROM transmog_set_item", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_TRANSMOG_SET_ITEM, "SELECT MAX(ID) + 1 FROM transmog_set_item", CONNECTION_SYNCH); // TransportAnimation.db2 - PrepareStatement(HOTFIX_SEL_TRANSPORT_ANIMATION, "SELECT ID, PosX, PosY, PosZ, SequenceID, TimeIndex, TransportID FROM transport_animation" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_TRANSPORT_ANIMATION, "SELECT ID, PosX, PosY, PosZ, SequenceID, TimeIndex, TransportID FROM transport_animation", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_TRANSPORT_ANIMATION, "SELECT MAX(ID) + 1 FROM transport_animation", CONNECTION_SYNCH); // TransportRotation.db2 - PrepareStatement(HOTFIX_SEL_TRANSPORT_ROTATION, "SELECT ID, Rot1, Rot2, Rot3, Rot4, TimeIndex, GameObjectsID FROM transport_rotation" - " ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_TRANSPORT_ROTATION, "SELECT ID, Rot1, Rot2, Rot3, Rot4, TimeIndex, GameObjectsID FROM transport_rotation", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_TRANSPORT_ROTATION, "SELECT MAX(ID) + 1 FROM transport_rotation", CONNECTION_SYNCH); // UiMap.db2 PrepareStatement(HOTFIX_SEL_UI_MAP, "SELECT Name, ID, ParentUiMapID, Flags, `System`, Type, LevelRangeMin, LevelRangeMax, BountySetID, " - "BountyDisplayLocation, VisibilityPlayerConditionID, HelpTextPosition, BkgAtlasID, AlternateUiMapGroup FROM ui_map ORDER BY ID DESC", CONNECTION_SYNCH); + "BountyDisplayLocation, VisibilityPlayerConditionID, HelpTextPosition, BkgAtlasID, AlternateUiMapGroup FROM ui_map", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_UI_MAP, "SELECT MAX(ID) + 1 FROM ui_map", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_UI_MAP, "SELECT ID, Name_lang FROM ui_map_locale WHERE locale = ?", CONNECTION_SYNCH); // UiMapAssignment.db2 PrepareStatement(HOTFIX_SEL_UI_MAP_ASSIGNMENT, "SELECT UiMinX, UiMinY, UiMaxX, UiMaxY, Region1X, Region1Y, Region1Z, Region2X, Region2Y, " - "Region2Z, ID, UiMapID, OrderIndex, MapID, AreaID, WmoDoodadPlacementID, WmoGroupID FROM ui_map_assignment ORDER BY ID DESC", CONNECTION_SYNCH); + "Region2Z, ID, UiMapID, OrderIndex, MapID, AreaID, WmoDoodadPlacementID, WmoGroupID FROM ui_map_assignment", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_UI_MAP_ASSIGNMENT, "SELECT MAX(ID) + 1 FROM ui_map_assignment", CONNECTION_SYNCH); // UiMapLink.db2 PrepareStatement(HOTFIX_SEL_UI_MAP_LINK, "SELECT UiMinX, UiMinY, UiMaxX, UiMaxY, ID, ParentUiMapID, OrderIndex, ChildUiMapID, " - "OverrideHighlightFileDataID, OverrideHighlightAtlasID FROM ui_map_link ORDER BY ID DESC", CONNECTION_SYNCH); + "OverrideHighlightFileDataID, OverrideHighlightAtlasID FROM ui_map_link", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_UI_MAP_LINK, "SELECT MAX(ID) + 1 FROM ui_map_link", CONNECTION_SYNCH); // UiMapXMapArt.db2 - PrepareStatement(HOTFIX_SEL_UI_MAP_X_MAP_ART, "SELECT ID, PhaseID, UiMapArtID, UiMapID FROM ui_map_x_map_art ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_UI_MAP_X_MAP_ART, "SELECT ID, PhaseID, UiMapArtID, UiMapID FROM ui_map_x_map_art", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_UI_MAP_X_MAP_ART, "SELECT MAX(ID) + 1 FROM ui_map_x_map_art", CONNECTION_SYNCH); // UnitPowerBar.db2 PrepareStatement(HOTFIX_SEL_UNIT_POWER_BAR, "SELECT ID, Name, Cost, OutOfError, ToolTip, MinPower, MaxPower, StartPower, CenterPower, " "RegenerationPeace, RegenerationCombat, BarType, Flags, StartInset, EndInset, FileDataID1, FileDataID2, FileDataID3, FileDataID4, " - "FileDataID5, FileDataID6, Color1, Color2, Color3, Color4, Color5, Color6 FROM unit_power_bar ORDER BY ID DESC", CONNECTION_SYNCH); + "FileDataID5, FileDataID6, Color1, Color2, Color3, Color4, Color5, Color6 FROM unit_power_bar", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_UNIT_POWER_BAR, "SELECT MAX(ID) + 1 FROM unit_power_bar", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_UNIT_POWER_BAR, "SELECT ID, Name_lang, Cost_lang, OutOfError_lang, ToolTip_lang FROM unit_power_bar_locale" " WHERE locale = ?", CONNECTION_SYNCH); @@ -1112,7 +1330,8 @@ void HotfixDatabaseConnection::DoPrepareStatements() PrepareStatement(HOTFIX_SEL_VEHICLE, "SELECT ID, Flags, FlagsB, TurnSpeed, PitchSpeed, PitchMin, PitchMax, MouseLookOffsetPitch, " "CameraFadeDistScalarMin, CameraFadeDistScalarMax, CameraPitchOffset, FacingLimitRight, FacingLimitLeft, CameraYawOffset, UiLocomotionType, " "VehicleUIIndicatorID, MissileTargetingID, SeatID1, SeatID2, SeatID3, SeatID4, SeatID5, SeatID6, SeatID7, SeatID8, PowerDisplayID1, " - "PowerDisplayID2, PowerDisplayID3 FROM vehicle ORDER BY ID DESC", CONNECTION_SYNCH); + "PowerDisplayID2, PowerDisplayID3 FROM vehicle", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_VEHICLE, "SELECT MAX(ID) + 1 FROM vehicle", CONNECTION_SYNCH); // VehicleSeat.db2 PrepareStatement(HOTFIX_SEL_VEHICLE_SEAT, "SELECT ID, AttachmentOffsetX, AttachmentOffsetY, AttachmentOffsetZ, CameraOffsetX, CameraOffsetY, " @@ -1123,23 +1342,28 @@ void HotfixDatabaseConnection::DoPrepareStatements() "PassengerAttachmentID, PassengerYaw, PassengerPitch, PassengerRoll, VehicleEnterAnimDelay, VehicleExitAnimDelay, VehicleAbilityDisplay, " "EnterUISoundID, ExitUISoundID, UiSkinFileDataID, CameraEnteringDelay, CameraEnteringDuration, CameraExitingDelay, CameraExitingDuration, " "CameraPosChaseRate, CameraFacingChaseRate, CameraEnteringZoom, CameraSeatZoomMin, CameraSeatZoomMax, EnterAnimKitID, RideAnimKitID, " - "ExitAnimKitID, VehicleEnterAnimKitID, VehicleRideAnimKitID, VehicleExitAnimKitID, CameraModeID FROM vehicle_seat ORDER BY ID DESC", CONNECTION_SYNCH); + "ExitAnimKitID, VehicleEnterAnimKitID, VehicleRideAnimKitID, VehicleExitAnimKitID, CameraModeID FROM vehicle_seat", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_VEHICLE_SEAT, "SELECT MAX(ID) + 1 FROM vehicle_seat", CONNECTION_SYNCH); // WmoAreaTable.db2 PrepareStatement(HOTFIX_SEL_WMO_AREA_TABLE, "SELECT AreaName, ID, WmoID, NameSetID, WmoGroupID, SoundProviderPref, SoundProviderPrefUnderwater, " - "AmbienceID, UwAmbience, ZoneMusic, UwZoneMusic, IntroSound, UwIntroSound, AreaTableID, Flags FROM wmo_area_table ORDER BY ID DESC", CONNECTION_SYNCH); + "AmbienceID, UwAmbience, ZoneMusic, UwZoneMusic, IntroSound, UwIntroSound, AreaTableID, Flags FROM wmo_area_table", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_WMO_AREA_TABLE, "SELECT MAX(ID) + 1 FROM wmo_area_table", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_WMO_AREA_TABLE, "SELECT ID, AreaName_lang FROM wmo_area_table_locale WHERE locale = ?", CONNECTION_SYNCH); // WorldEffect.db2 PrepareStatement(HOTFIX_SEL_WORLD_EFFECT, "SELECT ID, QuestFeedbackEffectID, WhenToDisplay, TargetType, TargetAsset, PlayerConditionID, " - "CombatConditionID FROM world_effect ORDER BY ID DESC", CONNECTION_SYNCH); + "CombatConditionID FROM world_effect", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_WORLD_EFFECT, "SELECT MAX(ID) + 1 FROM world_effect", CONNECTION_SYNCH); // WorldMapOverlay.db2 PrepareStatement(HOTFIX_SEL_WORLD_MAP_OVERLAY, "SELECT ID, UiMapArtID, TextureWidth, TextureHeight, OffsetX, OffsetY, HitRectTop, HitRectBottom, " - "HitRectLeft, HitRectRight, PlayerConditionID, Flags, AreaID1, AreaID2, AreaID3, AreaID4 FROM world_map_overlay ORDER BY ID DESC", CONNECTION_SYNCH); + "HitRectLeft, HitRectRight, PlayerConditionID, Flags, AreaID1, AreaID2, AreaID3, AreaID4 FROM world_map_overlay", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_WORLD_MAP_OVERLAY, "SELECT MAX(ID) + 1 FROM world_map_overlay", CONNECTION_SYNCH); // WorldStateExpression.db2 - PrepareStatement(HOTFIX_SEL_WORLD_STATE_EXPRESSION, "SELECT ID, Expression FROM world_state_expression ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_WORLD_STATE_EXPRESSION, "SELECT ID, Expression FROM world_state_expression", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_WORLD_STATE_EXPRESSION, "SELECT MAX(ID) + 1 FROM world_state_expression", CONNECTION_SYNCH); } HotfixDatabaseConnection::HotfixDatabaseConnection(MySQLConnectionInfo& connInfo) : MySQLConnection(connInfo) diff --git a/src/server/database/Database/Implementation/HotfixDatabase.h b/src/server/database/Database/Implementation/HotfixDatabase.h index de9a7b7f330..00828c3b89e 100644 --- a/src/server/database/Database/Implementation/HotfixDatabase.h +++ b/src/server/database/Database/Implementation/HotfixDatabase.h @@ -32,573 +32,825 @@ enum HotfixDatabaseStatements : uint32 */ HOTFIX_SEL_ACHIEVEMENT, + HOTFIX_SEL_ACHIEVEMENT_MAX_ID, HOTFIX_SEL_ACHIEVEMENT_LOCALE, HOTFIX_SEL_ANIMATION_DATA, + HOTFIX_SEL_ANIMATION_DATA_MAX_ID, HOTFIX_SEL_ANIM_KIT, + HOTFIX_SEL_ANIM_KIT_MAX_ID, HOTFIX_SEL_AREA_GROUP_MEMBER, + HOTFIX_SEL_AREA_GROUP_MEMBER_MAX_ID, HOTFIX_SEL_AREA_TABLE, + HOTFIX_SEL_AREA_TABLE_MAX_ID, HOTFIX_SEL_AREA_TABLE_LOCALE, HOTFIX_SEL_AREA_TRIGGER, + HOTFIX_SEL_AREA_TRIGGER_MAX_ID, HOTFIX_SEL_ARMOR_LOCATION, + HOTFIX_SEL_ARMOR_LOCATION_MAX_ID, HOTFIX_SEL_ARTIFACT, + HOTFIX_SEL_ARTIFACT_MAX_ID, HOTFIX_SEL_ARTIFACT_LOCALE, HOTFIX_SEL_ARTIFACT_APPEARANCE, + HOTFIX_SEL_ARTIFACT_APPEARANCE_MAX_ID, HOTFIX_SEL_ARTIFACT_APPEARANCE_LOCALE, HOTFIX_SEL_ARTIFACT_APPEARANCE_SET, + HOTFIX_SEL_ARTIFACT_APPEARANCE_SET_MAX_ID, HOTFIX_SEL_ARTIFACT_APPEARANCE_SET_LOCALE, HOTFIX_SEL_ARTIFACT_CATEGORY, + HOTFIX_SEL_ARTIFACT_CATEGORY_MAX_ID, HOTFIX_SEL_ARTIFACT_POWER, + HOTFIX_SEL_ARTIFACT_POWER_MAX_ID, HOTFIX_SEL_ARTIFACT_POWER_LINK, + HOTFIX_SEL_ARTIFACT_POWER_LINK_MAX_ID, HOTFIX_SEL_ARTIFACT_POWER_PICKER, + HOTFIX_SEL_ARTIFACT_POWER_PICKER_MAX_ID, HOTFIX_SEL_ARTIFACT_POWER_RANK, + HOTFIX_SEL_ARTIFACT_POWER_RANK_MAX_ID, HOTFIX_SEL_ARTIFACT_QUEST_XP, + HOTFIX_SEL_ARTIFACT_QUEST_XP_MAX_ID, HOTFIX_SEL_ARTIFACT_TIER, + HOTFIX_SEL_ARTIFACT_TIER_MAX_ID, HOTFIX_SEL_ARTIFACT_UNLOCK, + HOTFIX_SEL_ARTIFACT_UNLOCK_MAX_ID, HOTFIX_SEL_AUCTION_HOUSE, + HOTFIX_SEL_AUCTION_HOUSE_MAX_ID, HOTFIX_SEL_AUCTION_HOUSE_LOCALE, HOTFIX_SEL_AZERITE_EMPOWERED_ITEM, + HOTFIX_SEL_AZERITE_EMPOWERED_ITEM_MAX_ID, HOTFIX_SEL_AZERITE_ESSENCE, + HOTFIX_SEL_AZERITE_ESSENCE_MAX_ID, HOTFIX_SEL_AZERITE_ESSENCE_LOCALE, HOTFIX_SEL_AZERITE_ESSENCE_POWER, + HOTFIX_SEL_AZERITE_ESSENCE_POWER_MAX_ID, HOTFIX_SEL_AZERITE_ESSENCE_POWER_LOCALE, HOTFIX_SEL_AZERITE_ITEM, + HOTFIX_SEL_AZERITE_ITEM_MAX_ID, HOTFIX_SEL_AZERITE_ITEM_MILESTONE_POWER, + HOTFIX_SEL_AZERITE_ITEM_MILESTONE_POWER_MAX_ID, HOTFIX_SEL_AZERITE_KNOWLEDGE_MULTIPLIER, + HOTFIX_SEL_AZERITE_KNOWLEDGE_MULTIPLIER_MAX_ID, HOTFIX_SEL_AZERITE_LEVEL_INFO, + HOTFIX_SEL_AZERITE_LEVEL_INFO_MAX_ID, HOTFIX_SEL_AZERITE_POWER, + HOTFIX_SEL_AZERITE_POWER_MAX_ID, HOTFIX_SEL_AZERITE_POWER_SET_MEMBER, + HOTFIX_SEL_AZERITE_POWER_SET_MEMBER_MAX_ID, HOTFIX_SEL_AZERITE_TIER_UNLOCK, + HOTFIX_SEL_AZERITE_TIER_UNLOCK_MAX_ID, HOTFIX_SEL_AZERITE_TIER_UNLOCK_SET, + HOTFIX_SEL_AZERITE_TIER_UNLOCK_SET_MAX_ID, HOTFIX_SEL_AZERITE_UNLOCK_MAPPING, + HOTFIX_SEL_AZERITE_UNLOCK_MAPPING_MAX_ID, HOTFIX_SEL_BANK_BAG_SLOT_PRICES, + HOTFIX_SEL_BANK_BAG_SLOT_PRICES_MAX_ID, HOTFIX_SEL_BANNED_ADDONS, + HOTFIX_SEL_BANNED_ADDONS_MAX_ID, HOTFIX_SEL_BARBER_SHOP_STYLE, + HOTFIX_SEL_BARBER_SHOP_STYLE_MAX_ID, HOTFIX_SEL_BARBER_SHOP_STYLE_LOCALE, HOTFIX_SEL_BATTLE_PET_BREED_QUALITY, + HOTFIX_SEL_BATTLE_PET_BREED_QUALITY_MAX_ID, HOTFIX_SEL_BATTLE_PET_BREED_STATE, + HOTFIX_SEL_BATTLE_PET_BREED_STATE_MAX_ID, HOTFIX_SEL_BATTLE_PET_SPECIES, + HOTFIX_SEL_BATTLE_PET_SPECIES_MAX_ID, HOTFIX_SEL_BATTLE_PET_SPECIES_LOCALE, HOTFIX_SEL_BATTLE_PET_SPECIES_STATE, + HOTFIX_SEL_BATTLE_PET_SPECIES_STATE_MAX_ID, HOTFIX_SEL_BATTLEMASTER_LIST, + HOTFIX_SEL_BATTLEMASTER_LIST_MAX_ID, HOTFIX_SEL_BATTLEMASTER_LIST_LOCALE, HOTFIX_SEL_BROADCAST_TEXT, + HOTFIX_SEL_BROADCAST_TEXT_MAX_ID, HOTFIX_SEL_BROADCAST_TEXT_LOCALE, HOTFIX_SEL_CFG_REGIONS, + HOTFIX_SEL_CFG_REGIONS_MAX_ID, HOTFIX_SEL_CHARACTER_FACIAL_HAIR_STYLES, + HOTFIX_SEL_CHARACTER_FACIAL_HAIR_STYLES_MAX_ID, HOTFIX_SEL_CHAR_BASE_SECTION, + HOTFIX_SEL_CHAR_BASE_SECTION_MAX_ID, HOTFIX_SEL_CHAR_SECTIONS, + HOTFIX_SEL_CHAR_SECTIONS_MAX_ID, HOTFIX_SEL_CHAR_START_OUTFIT, + HOTFIX_SEL_CHAR_START_OUTFIT_MAX_ID, HOTFIX_SEL_CHAR_TITLES, + HOTFIX_SEL_CHAR_TITLES_MAX_ID, HOTFIX_SEL_CHAR_TITLES_LOCALE, HOTFIX_SEL_CHAT_CHANNELS, + HOTFIX_SEL_CHAT_CHANNELS_MAX_ID, HOTFIX_SEL_CHAT_CHANNELS_LOCALE, HOTFIX_SEL_CHR_CLASSES, + HOTFIX_SEL_CHR_CLASSES_MAX_ID, HOTFIX_SEL_CHR_CLASSES_LOCALE, HOTFIX_SEL_CHR_CLASSES_X_POWER_TYPES, + HOTFIX_SEL_CHR_CLASSES_X_POWER_TYPES_MAX_ID, HOTFIX_SEL_CHR_RACES, + HOTFIX_SEL_CHR_RACES_MAX_ID, HOTFIX_SEL_CHR_RACES_LOCALE, HOTFIX_SEL_CHR_SPECIALIZATION, + HOTFIX_SEL_CHR_SPECIALIZATION_MAX_ID, HOTFIX_SEL_CHR_SPECIALIZATION_LOCALE, HOTFIX_SEL_CINEMATIC_CAMERA, + HOTFIX_SEL_CINEMATIC_CAMERA_MAX_ID, HOTFIX_SEL_CINEMATIC_SEQUENCES, + HOTFIX_SEL_CINEMATIC_SEQUENCES_MAX_ID, HOTFIX_SEL_CONTENT_TUNING, + HOTFIX_SEL_CONTENT_TUNING_MAX_ID, HOTFIX_SEL_CONTENT_TUNING_X_EXPECTED, + HOTFIX_SEL_CONTENT_TUNING_X_EXPECTED_MAX_ID, HOTFIX_SEL_CONVERSATION_LINE, + HOTFIX_SEL_CONVERSATION_LINE_MAX_ID, HOTFIX_SEL_CREATURE_DISPLAY_INFO, + HOTFIX_SEL_CREATURE_DISPLAY_INFO_MAX_ID, HOTFIX_SEL_CREATURE_DISPLAY_INFO_EXTRA, + HOTFIX_SEL_CREATURE_DISPLAY_INFO_EXTRA_MAX_ID, HOTFIX_SEL_CREATURE_FAMILY, + HOTFIX_SEL_CREATURE_FAMILY_MAX_ID, HOTFIX_SEL_CREATURE_FAMILY_LOCALE, HOTFIX_SEL_CREATURE_MODEL_DATA, + HOTFIX_SEL_CREATURE_MODEL_DATA_MAX_ID, HOTFIX_SEL_CREATURE_TYPE, + HOTFIX_SEL_CREATURE_TYPE_MAX_ID, HOTFIX_SEL_CREATURE_TYPE_LOCALE, HOTFIX_SEL_CRITERIA, + HOTFIX_SEL_CRITERIA_MAX_ID, HOTFIX_SEL_CRITERIA_TREE, + HOTFIX_SEL_CRITERIA_TREE_MAX_ID, HOTFIX_SEL_CRITERIA_TREE_LOCALE, HOTFIX_SEL_CURRENCY_TYPES, + HOTFIX_SEL_CURRENCY_TYPES_MAX_ID, HOTFIX_SEL_CURRENCY_TYPES_LOCALE, HOTFIX_SEL_CURVE, + HOTFIX_SEL_CURVE_MAX_ID, HOTFIX_SEL_CURVE_POINT, + HOTFIX_SEL_CURVE_POINT_MAX_ID, HOTFIX_SEL_DESTRUCTIBLE_MODEL_DATA, + HOTFIX_SEL_DESTRUCTIBLE_MODEL_DATA_MAX_ID, HOTFIX_SEL_DIFFICULTY, + HOTFIX_SEL_DIFFICULTY_MAX_ID, HOTFIX_SEL_DIFFICULTY_LOCALE, HOTFIX_SEL_DUNGEON_ENCOUNTER, + HOTFIX_SEL_DUNGEON_ENCOUNTER_MAX_ID, HOTFIX_SEL_DUNGEON_ENCOUNTER_LOCALE, HOTFIX_SEL_DURABILITY_COSTS, + HOTFIX_SEL_DURABILITY_COSTS_MAX_ID, HOTFIX_SEL_DURABILITY_QUALITY, + HOTFIX_SEL_DURABILITY_QUALITY_MAX_ID, HOTFIX_SEL_EMOTES, + HOTFIX_SEL_EMOTES_MAX_ID, HOTFIX_SEL_EMOTES_TEXT, + HOTFIX_SEL_EMOTES_TEXT_MAX_ID, HOTFIX_SEL_EMOTES_TEXT_SOUND, + HOTFIX_SEL_EMOTES_TEXT_SOUND_MAX_ID, HOTFIX_SEL_EXPECTED_STAT, + HOTFIX_SEL_EXPECTED_STAT_MAX_ID, HOTFIX_SEL_EXPECTED_STAT_MOD, + HOTFIX_SEL_EXPECTED_STAT_MOD_MAX_ID, HOTFIX_SEL_FACTION, + HOTFIX_SEL_FACTION_MAX_ID, HOTFIX_SEL_FACTION_LOCALE, HOTFIX_SEL_FACTION_TEMPLATE, + HOTFIX_SEL_FACTION_TEMPLATE_MAX_ID, HOTFIX_SEL_GAMEOBJECT_DISPLAY_INFO, + HOTFIX_SEL_GAMEOBJECT_DISPLAY_INFO_MAX_ID, HOTFIX_SEL_GAMEOBJECTS, + HOTFIX_SEL_GAMEOBJECTS_MAX_ID, HOTFIX_SEL_GAMEOBJECTS_LOCALE, HOTFIX_SEL_GARR_ABILITY, + HOTFIX_SEL_GARR_ABILITY_MAX_ID, HOTFIX_SEL_GARR_ABILITY_LOCALE, HOTFIX_SEL_GARR_BUILDING, + HOTFIX_SEL_GARR_BUILDING_MAX_ID, HOTFIX_SEL_GARR_BUILDING_LOCALE, HOTFIX_SEL_GARR_BUILDING_PLOT_INST, + HOTFIX_SEL_GARR_BUILDING_PLOT_INST_MAX_ID, HOTFIX_SEL_GARR_CLASS_SPEC, + HOTFIX_SEL_GARR_CLASS_SPEC_MAX_ID, HOTFIX_SEL_GARR_CLASS_SPEC_LOCALE, HOTFIX_SEL_GARR_FOLLOWER, + HOTFIX_SEL_GARR_FOLLOWER_MAX_ID, HOTFIX_SEL_GARR_FOLLOWER_LOCALE, HOTFIX_SEL_GARR_FOLLOWER_X_ABILITY, + HOTFIX_SEL_GARR_FOLLOWER_X_ABILITY_MAX_ID, HOTFIX_SEL_GARR_PLOT, + HOTFIX_SEL_GARR_PLOT_MAX_ID, HOTFIX_SEL_GARR_PLOT_BUILDING, + HOTFIX_SEL_GARR_PLOT_BUILDING_MAX_ID, HOTFIX_SEL_GARR_PLOT_INSTANCE, + HOTFIX_SEL_GARR_PLOT_INSTANCE_MAX_ID, HOTFIX_SEL_GARR_SITE_LEVEL, + HOTFIX_SEL_GARR_SITE_LEVEL_MAX_ID, HOTFIX_SEL_GARR_SITE_LEVEL_PLOT_INST, + HOTFIX_SEL_GARR_SITE_LEVEL_PLOT_INST_MAX_ID, HOTFIX_SEL_GEM_PROPERTIES, + HOTFIX_SEL_GEM_PROPERTIES_MAX_ID, HOTFIX_SEL_GLYPH_BINDABLE_SPELL, + HOTFIX_SEL_GLYPH_BINDABLE_SPELL_MAX_ID, HOTFIX_SEL_GLYPH_PROPERTIES, + HOTFIX_SEL_GLYPH_PROPERTIES_MAX_ID, HOTFIX_SEL_GLYPH_REQUIRED_SPEC, + HOTFIX_SEL_GLYPH_REQUIRED_SPEC_MAX_ID, HOTFIX_SEL_GUILD_COLOR_BACKGROUND, + HOTFIX_SEL_GUILD_COLOR_BACKGROUND_MAX_ID, HOTFIX_SEL_GUILD_COLOR_BORDER, + HOTFIX_SEL_GUILD_COLOR_BORDER_MAX_ID, HOTFIX_SEL_GUILD_COLOR_EMBLEM, + HOTFIX_SEL_GUILD_COLOR_EMBLEM_MAX_ID, HOTFIX_SEL_GUILD_PERK_SPELLS, + HOTFIX_SEL_GUILD_PERK_SPELLS_MAX_ID, HOTFIX_SEL_HEIRLOOM, + HOTFIX_SEL_HEIRLOOM_MAX_ID, HOTFIX_SEL_HEIRLOOM_LOCALE, HOTFIX_SEL_HOLIDAYS, + HOTFIX_SEL_HOLIDAYS_MAX_ID, HOTFIX_SEL_IMPORT_PRICE_ARMOR, + HOTFIX_SEL_IMPORT_PRICE_ARMOR_MAX_ID, HOTFIX_SEL_IMPORT_PRICE_QUALITY, + HOTFIX_SEL_IMPORT_PRICE_QUALITY_MAX_ID, HOTFIX_SEL_IMPORT_PRICE_SHIELD, + HOTFIX_SEL_IMPORT_PRICE_SHIELD_MAX_ID, HOTFIX_SEL_IMPORT_PRICE_WEAPON, + HOTFIX_SEL_IMPORT_PRICE_WEAPON_MAX_ID, HOTFIX_SEL_ITEM, + HOTFIX_SEL_ITEM_MAX_ID, HOTFIX_SEL_ITEM_APPEARANCE, + HOTFIX_SEL_ITEM_APPEARANCE_MAX_ID, HOTFIX_SEL_ITEM_ARMOR_QUALITY, + HOTFIX_SEL_ITEM_ARMOR_QUALITY_MAX_ID, HOTFIX_SEL_ITEM_ARMOR_SHIELD, + HOTFIX_SEL_ITEM_ARMOR_SHIELD_MAX_ID, HOTFIX_SEL_ITEM_ARMOR_TOTAL, + HOTFIX_SEL_ITEM_ARMOR_TOTAL_MAX_ID, HOTFIX_SEL_ITEM_BAG_FAMILY, + HOTFIX_SEL_ITEM_BAG_FAMILY_MAX_ID, HOTFIX_SEL_ITEM_BAG_FAMILY_LOCALE, HOTFIX_SEL_ITEM_BONUS, + HOTFIX_SEL_ITEM_BONUS_MAX_ID, HOTFIX_SEL_ITEM_BONUS_LIST_LEVEL_DELTA, + HOTFIX_SEL_ITEM_BONUS_LIST_LEVEL_DELTA_MAX_ID, HOTFIX_SEL_ITEM_BONUS_TREE_NODE, + HOTFIX_SEL_ITEM_BONUS_TREE_NODE_MAX_ID, HOTFIX_SEL_ITEM_CHILD_EQUIPMENT, + HOTFIX_SEL_ITEM_CHILD_EQUIPMENT_MAX_ID, HOTFIX_SEL_ITEM_CLASS, + HOTFIX_SEL_ITEM_CLASS_MAX_ID, HOTFIX_SEL_ITEM_CLASS_LOCALE, HOTFIX_SEL_ITEM_CURRENCY_COST, + HOTFIX_SEL_ITEM_CURRENCY_COST_MAX_ID, HOTFIX_SEL_ITEM_DAMAGE_AMMO, + HOTFIX_SEL_ITEM_DAMAGE_AMMO_MAX_ID, HOTFIX_SEL_ITEM_DAMAGE_ONE_HAND, + HOTFIX_SEL_ITEM_DAMAGE_ONE_HAND_MAX_ID, HOTFIX_SEL_ITEM_DAMAGE_ONE_HAND_CASTER, + HOTFIX_SEL_ITEM_DAMAGE_ONE_HAND_CASTER_MAX_ID, HOTFIX_SEL_ITEM_DAMAGE_TWO_HAND, + HOTFIX_SEL_ITEM_DAMAGE_TWO_HAND_MAX_ID, HOTFIX_SEL_ITEM_DAMAGE_TWO_HAND_CASTER, + HOTFIX_SEL_ITEM_DAMAGE_TWO_HAND_CASTER_MAX_ID, HOTFIX_SEL_ITEM_DISENCHANT_LOOT, + HOTFIX_SEL_ITEM_DISENCHANT_LOOT_MAX_ID, HOTFIX_SEL_ITEM_EFFECT, + HOTFIX_SEL_ITEM_EFFECT_MAX_ID, HOTFIX_SEL_ITEM_EXTENDED_COST, + HOTFIX_SEL_ITEM_EXTENDED_COST_MAX_ID, HOTFIX_SEL_ITEM_LEVEL_SELECTOR, + HOTFIX_SEL_ITEM_LEVEL_SELECTOR_MAX_ID, HOTFIX_SEL_ITEM_LEVEL_SELECTOR_QUALITY, + HOTFIX_SEL_ITEM_LEVEL_SELECTOR_QUALITY_MAX_ID, HOTFIX_SEL_ITEM_LEVEL_SELECTOR_QUALITY_SET, + HOTFIX_SEL_ITEM_LEVEL_SELECTOR_QUALITY_SET_MAX_ID, HOTFIX_SEL_ITEM_LIMIT_CATEGORY, + HOTFIX_SEL_ITEM_LIMIT_CATEGORY_MAX_ID, HOTFIX_SEL_ITEM_LIMIT_CATEGORY_LOCALE, HOTFIX_SEL_ITEM_LIMIT_CATEGORY_CONDITION, + HOTFIX_SEL_ITEM_LIMIT_CATEGORY_CONDITION_MAX_ID, HOTFIX_SEL_ITEM_MODIFIED_APPEARANCE, + HOTFIX_SEL_ITEM_MODIFIED_APPEARANCE_MAX_ID, HOTFIX_SEL_ITEM_NAME_DESCRIPTION, + HOTFIX_SEL_ITEM_NAME_DESCRIPTION_MAX_ID, HOTFIX_SEL_ITEM_NAME_DESCRIPTION_LOCALE, HOTFIX_SEL_ITEM_PRICE_BASE, + HOTFIX_SEL_ITEM_PRICE_BASE_MAX_ID, HOTFIX_SEL_ITEM_SEARCH_NAME, + HOTFIX_SEL_ITEM_SEARCH_NAME_MAX_ID, HOTFIX_SEL_ITEM_SEARCH_NAME_LOCALE, HOTFIX_SEL_ITEM_SET, + HOTFIX_SEL_ITEM_SET_MAX_ID, HOTFIX_SEL_ITEM_SET_LOCALE, HOTFIX_SEL_ITEM_SET_SPELL, + HOTFIX_SEL_ITEM_SET_SPELL_MAX_ID, HOTFIX_SEL_ITEM_SPARSE, + HOTFIX_SEL_ITEM_SPARSE_MAX_ID, HOTFIX_SEL_ITEM_SPARSE_LOCALE, HOTFIX_SEL_ITEM_SPEC, + HOTFIX_SEL_ITEM_SPEC_MAX_ID, HOTFIX_SEL_ITEM_SPEC_OVERRIDE, + HOTFIX_SEL_ITEM_SPEC_OVERRIDE_MAX_ID, HOTFIX_SEL_ITEM_X_BONUS_TREE, + HOTFIX_SEL_ITEM_X_BONUS_TREE_MAX_ID, HOTFIX_SEL_KEYCHAIN, + HOTFIX_SEL_KEYCHAIN_MAX_ID, HOTFIX_SEL_LFG_DUNGEONS, + HOTFIX_SEL_LFG_DUNGEONS_MAX_ID, HOTFIX_SEL_LFG_DUNGEONS_LOCALE, HOTFIX_SEL_LIGHT, + HOTFIX_SEL_LIGHT_MAX_ID, HOTFIX_SEL_LIQUID_TYPE, + HOTFIX_SEL_LIQUID_TYPE_MAX_ID, HOTFIX_SEL_LOCK, + HOTFIX_SEL_LOCK_MAX_ID, HOTFIX_SEL_MAIL_TEMPLATE, + HOTFIX_SEL_MAIL_TEMPLATE_MAX_ID, HOTFIX_SEL_MAIL_TEMPLATE_LOCALE, HOTFIX_SEL_MAP, + HOTFIX_SEL_MAP_MAX_ID, HOTFIX_SEL_MAP_LOCALE, HOTFIX_SEL_MAP_DIFFICULTY, + HOTFIX_SEL_MAP_DIFFICULTY_MAX_ID, HOTFIX_SEL_MAP_DIFFICULTY_LOCALE, HOTFIX_SEL_MODIFIER_TREE, + HOTFIX_SEL_MODIFIER_TREE_MAX_ID, HOTFIX_SEL_MOUNT, + HOTFIX_SEL_MOUNT_MAX_ID, HOTFIX_SEL_MOUNT_LOCALE, HOTFIX_SEL_MOUNT_CAPABILITY, + HOTFIX_SEL_MOUNT_CAPABILITY_MAX_ID, HOTFIX_SEL_MOUNT_TYPE_X_CAPABILITY, + HOTFIX_SEL_MOUNT_TYPE_X_CAPABILITY_MAX_ID, HOTFIX_SEL_MOUNT_X_DISPLAY, + HOTFIX_SEL_MOUNT_X_DISPLAY_MAX_ID, HOTFIX_SEL_MOVIE, + HOTFIX_SEL_MOVIE_MAX_ID, HOTFIX_SEL_NAME_GEN, + HOTFIX_SEL_NAME_GEN_MAX_ID, HOTFIX_SEL_NAMES_PROFANITY, + HOTFIX_SEL_NAMES_PROFANITY_MAX_ID, HOTFIX_SEL_NAMES_RESERVED, + HOTFIX_SEL_NAMES_RESERVED_MAX_ID, HOTFIX_SEL_NAMES_RESERVED_LOCALE, + HOTFIX_SEL_NAMES_RESERVED_LOCALE_MAX_ID, HOTFIX_SEL_NUM_TALENTS_AT_LEVEL, + HOTFIX_SEL_NUM_TALENTS_AT_LEVEL_MAX_ID, HOTFIX_SEL_OVERRIDE_SPELL_DATA, + HOTFIX_SEL_OVERRIDE_SPELL_DATA_MAX_ID, HOTFIX_SEL_PHASE, + HOTFIX_SEL_PHASE_MAX_ID, HOTFIX_SEL_PHASE_X_PHASE_GROUP, + HOTFIX_SEL_PHASE_X_PHASE_GROUP_MAX_ID, HOTFIX_SEL_PLAYER_CONDITION, + HOTFIX_SEL_PLAYER_CONDITION_MAX_ID, HOTFIX_SEL_PLAYER_CONDITION_LOCALE, HOTFIX_SEL_POWER_DISPLAY, + HOTFIX_SEL_POWER_DISPLAY_MAX_ID, HOTFIX_SEL_POWER_TYPE, + HOTFIX_SEL_POWER_TYPE_MAX_ID, HOTFIX_SEL_PRESTIGE_LEVEL_INFO, + HOTFIX_SEL_PRESTIGE_LEVEL_INFO_MAX_ID, HOTFIX_SEL_PRESTIGE_LEVEL_INFO_LOCALE, HOTFIX_SEL_PVP_DIFFICULTY, + HOTFIX_SEL_PVP_DIFFICULTY_MAX_ID, HOTFIX_SEL_PVP_ITEM, + HOTFIX_SEL_PVP_ITEM_MAX_ID, HOTFIX_SEL_PVP_TALENT, + HOTFIX_SEL_PVP_TALENT_MAX_ID, HOTFIX_SEL_PVP_TALENT_LOCALE, HOTFIX_SEL_PVP_TALENT_CATEGORY, + HOTFIX_SEL_PVP_TALENT_CATEGORY_MAX_ID, HOTFIX_SEL_PVP_TALENT_SLOT_UNLOCK, + HOTFIX_SEL_PVP_TALENT_SLOT_UNLOCK_MAX_ID, HOTFIX_SEL_QUEST_FACTION_REWARD, + HOTFIX_SEL_QUEST_FACTION_REWARD_MAX_ID, HOTFIX_SEL_QUEST_MONEY_REWARD, + HOTFIX_SEL_QUEST_MONEY_REWARD_MAX_ID, HOTFIX_SEL_QUEST_PACKAGE_ITEM, + HOTFIX_SEL_QUEST_PACKAGE_ITEM_MAX_ID, HOTFIX_SEL_QUEST_SORT, + HOTFIX_SEL_QUEST_SORT_MAX_ID, HOTFIX_SEL_QUEST_SORT_LOCALE, HOTFIX_SEL_QUEST_V2, + HOTFIX_SEL_QUEST_V2_MAX_ID, HOTFIX_SEL_QUEST_XP, + HOTFIX_SEL_QUEST_XP_MAX_ID, HOTFIX_SEL_RAND_PROP_POINTS, + HOTFIX_SEL_RAND_PROP_POINTS_MAX_ID, HOTFIX_SEL_REWARD_PACK, + HOTFIX_SEL_REWARD_PACK_MAX_ID, HOTFIX_SEL_REWARD_PACK_X_CURRENCY_TYPE, + HOTFIX_SEL_REWARD_PACK_X_CURRENCY_TYPE_MAX_ID, HOTFIX_SEL_REWARD_PACK_X_ITEM, + HOTFIX_SEL_REWARD_PACK_X_ITEM_MAX_ID, HOTFIX_SEL_SCALING_STAT_DISTRIBUTION, + HOTFIX_SEL_SCALING_STAT_DISTRIBUTION_MAX_ID, HOTFIX_SEL_SCENARIO, + HOTFIX_SEL_SCENARIO_MAX_ID, HOTFIX_SEL_SCENARIO_LOCALE, HOTFIX_SEL_SCENARIO_STEP, + HOTFIX_SEL_SCENARIO_STEP_MAX_ID, HOTFIX_SEL_SCENARIO_STEP_LOCALE, HOTFIX_SEL_SCENE_SCRIPT, + HOTFIX_SEL_SCENE_SCRIPT_MAX_ID, HOTFIX_SEL_SCENE_SCRIPT_GLOBAL_TEXT, + HOTFIX_SEL_SCENE_SCRIPT_GLOBAL_TEXT_MAX_ID, HOTFIX_SEL_SCENE_SCRIPT_PACKAGE, + HOTFIX_SEL_SCENE_SCRIPT_PACKAGE_MAX_ID, HOTFIX_SEL_SCENE_SCRIPT_TEXT, + HOTFIX_SEL_SCENE_SCRIPT_TEXT_MAX_ID, HOTFIX_SEL_SKILL_LINE, + HOTFIX_SEL_SKILL_LINE_MAX_ID, HOTFIX_SEL_SKILL_LINE_LOCALE, HOTFIX_SEL_SKILL_LINE_ABILITY, + HOTFIX_SEL_SKILL_LINE_ABILITY_MAX_ID, HOTFIX_SEL_SKILL_RACE_CLASS_INFO, + HOTFIX_SEL_SKILL_RACE_CLASS_INFO_MAX_ID, HOTFIX_SEL_SOUND_KIT, + HOTFIX_SEL_SOUND_KIT_MAX_ID, HOTFIX_SEL_SPECIALIZATION_SPELLS, + HOTFIX_SEL_SPECIALIZATION_SPELLS_MAX_ID, HOTFIX_SEL_SPECIALIZATION_SPELLS_LOCALE, HOTFIX_SEL_SPEC_SET_MEMBER, + HOTFIX_SEL_SPEC_SET_MEMBER_MAX_ID, HOTFIX_SEL_SPELL_AURA_OPTIONS, + HOTFIX_SEL_SPELL_AURA_OPTIONS_MAX_ID, HOTFIX_SEL_SPELL_AURA_RESTRICTIONS, + HOTFIX_SEL_SPELL_AURA_RESTRICTIONS_MAX_ID, HOTFIX_SEL_SPELL_CAST_TIMES, + HOTFIX_SEL_SPELL_CAST_TIMES_MAX_ID, HOTFIX_SEL_SPELL_CASTING_REQUIREMENTS, + HOTFIX_SEL_SPELL_CASTING_REQUIREMENTS_MAX_ID, HOTFIX_SEL_SPELL_CATEGORIES, + HOTFIX_SEL_SPELL_CATEGORIES_MAX_ID, HOTFIX_SEL_SPELL_CATEGORY, + HOTFIX_SEL_SPELL_CATEGORY_MAX_ID, HOTFIX_SEL_SPELL_CATEGORY_LOCALE, HOTFIX_SEL_SPELL_CLASS_OPTIONS, + HOTFIX_SEL_SPELL_CLASS_OPTIONS_MAX_ID, HOTFIX_SEL_SPELL_COOLDOWNS, + HOTFIX_SEL_SPELL_COOLDOWNS_MAX_ID, HOTFIX_SEL_SPELL_DURATION, + HOTFIX_SEL_SPELL_DURATION_MAX_ID, HOTFIX_SEL_SPELL_EFFECT, + HOTFIX_SEL_SPELL_EFFECT_MAX_ID, HOTFIX_SEL_SPELL_EQUIPPED_ITEMS, + HOTFIX_SEL_SPELL_EQUIPPED_ITEMS_MAX_ID, HOTFIX_SEL_SPELL_FOCUS_OBJECT, + HOTFIX_SEL_SPELL_FOCUS_OBJECT_MAX_ID, HOTFIX_SEL_SPELL_FOCUS_OBJECT_LOCALE, HOTFIX_SEL_SPELL_INTERRUPTS, + HOTFIX_SEL_SPELL_INTERRUPTS_MAX_ID, HOTFIX_SEL_SPELL_ITEM_ENCHANTMENT, + HOTFIX_SEL_SPELL_ITEM_ENCHANTMENT_MAX_ID, HOTFIX_SEL_SPELL_ITEM_ENCHANTMENT_LOCALE, HOTFIX_SEL_SPELL_ITEM_ENCHANTMENT_CONDITION, + HOTFIX_SEL_SPELL_ITEM_ENCHANTMENT_CONDITION_MAX_ID, HOTFIX_SEL_SPELL_LEARN_SPELL, + HOTFIX_SEL_SPELL_LEARN_SPELL_MAX_ID, HOTFIX_SEL_SPELL_LEVELS, + HOTFIX_SEL_SPELL_LEVELS_MAX_ID, HOTFIX_SEL_SPELL_MISC, + HOTFIX_SEL_SPELL_MISC_MAX_ID, HOTFIX_SEL_SPELL_NAME, + HOTFIX_SEL_SPELL_NAME_MAX_ID, HOTFIX_SEL_SPELL_NAME_LOCALE, HOTFIX_SEL_SPELL_POWER, + HOTFIX_SEL_SPELL_POWER_MAX_ID, HOTFIX_SEL_SPELL_POWER_DIFFICULTY, + HOTFIX_SEL_SPELL_POWER_DIFFICULTY_MAX_ID, HOTFIX_SEL_SPELL_PROCS_PER_MINUTE, + HOTFIX_SEL_SPELL_PROCS_PER_MINUTE_MAX_ID, HOTFIX_SEL_SPELL_PROCS_PER_MINUTE_MOD, + HOTFIX_SEL_SPELL_PROCS_PER_MINUTE_MOD_MAX_ID, HOTFIX_SEL_SPELL_RADIUS, + HOTFIX_SEL_SPELL_RADIUS_MAX_ID, HOTFIX_SEL_SPELL_RANGE, + HOTFIX_SEL_SPELL_RANGE_MAX_ID, HOTFIX_SEL_SPELL_RANGE_LOCALE, HOTFIX_SEL_SPELL_REAGENTS, + HOTFIX_SEL_SPELL_REAGENTS_MAX_ID, HOTFIX_SEL_SPELL_SCALING, + HOTFIX_SEL_SPELL_SCALING_MAX_ID, HOTFIX_SEL_SPELL_SHAPESHIFT, + HOTFIX_SEL_SPELL_SHAPESHIFT_MAX_ID, HOTFIX_SEL_SPELL_SHAPESHIFT_FORM, + HOTFIX_SEL_SPELL_SHAPESHIFT_FORM_MAX_ID, HOTFIX_SEL_SPELL_SHAPESHIFT_FORM_LOCALE, HOTFIX_SEL_SPELL_TARGET_RESTRICTIONS, + HOTFIX_SEL_SPELL_TARGET_RESTRICTIONS_MAX_ID, HOTFIX_SEL_SPELL_TOTEMS, + HOTFIX_SEL_SPELL_TOTEMS_MAX_ID, HOTFIX_SEL_SPELL_VISUAL_KIT, + HOTFIX_SEL_SPELL_VISUAL_KIT_MAX_ID, HOTFIX_SEL_SPELL_X_SPELL_VISUAL, + HOTFIX_SEL_SPELL_X_SPELL_VISUAL_MAX_ID, HOTFIX_SEL_SUMMON_PROPERTIES, + HOTFIX_SEL_SUMMON_PROPERTIES_MAX_ID, HOTFIX_SEL_TACT_KEY, + HOTFIX_SEL_TACT_KEY_MAX_ID, HOTFIX_SEL_TALENT, + HOTFIX_SEL_TALENT_MAX_ID, HOTFIX_SEL_TALENT_LOCALE, HOTFIX_SEL_TAXI_NODES, + HOTFIX_SEL_TAXI_NODES_MAX_ID, HOTFIX_SEL_TAXI_NODES_LOCALE, HOTFIX_SEL_TAXI_PATH, + HOTFIX_SEL_TAXI_PATH_MAX_ID, HOTFIX_SEL_TAXI_PATH_NODE, + HOTFIX_SEL_TAXI_PATH_NODE_MAX_ID, HOTFIX_SEL_TOTEM_CATEGORY, + HOTFIX_SEL_TOTEM_CATEGORY_MAX_ID, HOTFIX_SEL_TOTEM_CATEGORY_LOCALE, HOTFIX_SEL_TOY, + HOTFIX_SEL_TOY_MAX_ID, HOTFIX_SEL_TOY_LOCALE, HOTFIX_SEL_TRANSMOG_HOLIDAY, + HOTFIX_SEL_TRANSMOG_HOLIDAY_MAX_ID, HOTFIX_SEL_TRANSMOG_SET, + HOTFIX_SEL_TRANSMOG_SET_MAX_ID, HOTFIX_SEL_TRANSMOG_SET_LOCALE, HOTFIX_SEL_TRANSMOG_SET_GROUP, + HOTFIX_SEL_TRANSMOG_SET_GROUP_MAX_ID, HOTFIX_SEL_TRANSMOG_SET_GROUP_LOCALE, HOTFIX_SEL_TRANSMOG_SET_ITEM, + HOTFIX_SEL_TRANSMOG_SET_ITEM_MAX_ID, HOTFIX_SEL_TRANSPORT_ANIMATION, + HOTFIX_SEL_TRANSPORT_ANIMATION_MAX_ID, HOTFIX_SEL_TRANSPORT_ROTATION, + HOTFIX_SEL_TRANSPORT_ROTATION_MAX_ID, HOTFIX_SEL_UI_MAP, + HOTFIX_SEL_UI_MAP_MAX_ID, HOTFIX_SEL_UI_MAP_LOCALE, HOTFIX_SEL_UI_MAP_ASSIGNMENT, + HOTFIX_SEL_UI_MAP_ASSIGNMENT_MAX_ID, HOTFIX_SEL_UI_MAP_LINK, + HOTFIX_SEL_UI_MAP_LINK_MAX_ID, HOTFIX_SEL_UI_MAP_X_MAP_ART, + HOTFIX_SEL_UI_MAP_X_MAP_ART_MAX_ID, HOTFIX_SEL_UNIT_POWER_BAR, + HOTFIX_SEL_UNIT_POWER_BAR_MAX_ID, HOTFIX_SEL_UNIT_POWER_BAR_LOCALE, HOTFIX_SEL_VEHICLE, + HOTFIX_SEL_VEHICLE_MAX_ID, HOTFIX_SEL_VEHICLE_SEAT, + HOTFIX_SEL_VEHICLE_SEAT_MAX_ID, HOTFIX_SEL_WMO_AREA_TABLE, + HOTFIX_SEL_WMO_AREA_TABLE_MAX_ID, HOTFIX_SEL_WMO_AREA_TABLE_LOCALE, HOTFIX_SEL_WORLD_EFFECT, + HOTFIX_SEL_WORLD_EFFECT_MAX_ID, HOTFIX_SEL_WORLD_MAP_OVERLAY, + HOTFIX_SEL_WORLD_MAP_OVERLAY_MAX_ID, HOTFIX_SEL_WORLD_STATE_EXPRESSION, + HOTFIX_SEL_WORLD_STATE_EXPRESSION_MAX_ID, MAX_HOTFIXDATABASE_STATEMENTS }; diff --git a/src/server/shared/DataStores/DB2DatabaseLoader.cpp b/src/server/shared/DataStores/DB2DatabaseLoader.cpp index 04b8e80313f..a147b12aae4 100644 --- a/src/server/shared/DataStores/DB2DatabaseLoader.cpp +++ b/src/server/shared/DataStores/DB2DatabaseLoader.cpp @@ -67,10 +67,10 @@ char* DB2DatabaseLoader::Load(uint32& records, char**& indexTable, char*& string stringHolders = nullptr; // Resize index table - // database query *MUST* contain ORDER BY `index_field` DESC clause - uint32 indexTableSize = (*result)[indexField].GetUInt32() + 1; - if (indexTableSize < records) - indexTableSize = records; + uint32 indexTableSize = records; + if (PreparedQueryResult maxIdResult = HotfixDatabase.Query(HotfixDatabase.GetPreparedStatement(HotfixDatabaseStatements(_loadInfo->Statement + 1)))) + if ((*maxIdResult)[0].GetUInt32() > records) + indexTableSize = (*maxIdResult)[0].GetUInt32(); if (indexTableSize > records) { @@ -202,7 +202,7 @@ char* DB2DatabaseLoader::Load(uint32& records, char**& indexTable, char*& string void DB2DatabaseLoader::LoadStrings(uint32 locale, uint32 records, char** indexTable, std::vector<char*>& stringPool) { - HotfixDatabasePreparedStatement* stmt = HotfixDatabase.GetPreparedStatement(HotfixDatabaseStatements(_loadInfo->Statement + 1)); + HotfixDatabasePreparedStatement* stmt = HotfixDatabase.GetPreparedStatement(HotfixDatabaseStatements(_loadInfo->Statement + 2)); stmt->setString(0, localeNames[locale]); PreparedQueryResult result = HotfixDatabase.Query(stmt); if (!result) |