mirror of
https://github.com/EQEmu/Server.git
synced 2026-04-17 14:52:25 +00:00
Restructure and refactoring of database convert/upgrade check routine, breaking out to individual functions
This commit is contained in:
parent
e4f45d7b35
commit
3c2b8d13b9
@ -896,6 +896,27 @@ static inline void loadbar(unsigned int x, unsigned int n, unsigned int w = 50)
|
||||
}
|
||||
|
||||
bool Database::CheckDatabaseConversions() {
|
||||
CheckDatabaseConvertPPDeblob();
|
||||
CheckDatabaseConvertBotsPostPPDeblob();
|
||||
CheckDatabaseConvertCorpseDeblob();
|
||||
|
||||
/* Fetch Automatic Database Upgrade Script */
|
||||
if (!std::ifstream("db_update.pl")){
|
||||
std::cout << "Pulling down automatic database upgrade script...\n" << std::endl;
|
||||
#ifdef _WIN32
|
||||
system("perl -MLWP::UserAgent -e \"require LWP::UserAgent; my $ua = LWP::UserAgent->new; $ua->timeout(10); $ua->env_proxy; my $response = $ua->get('https://raw.githubusercontent.com/EQEmu/Server/master/utils/scripts/db_update.pl'); if ($response->is_success){ open(FILE, '> db_update.pl'); print FILE $response->decoded_content; close(FILE); }\"");
|
||||
#else
|
||||
system("wget -O db_update.pl https://raw.githubusercontent.com/EQEmu/Server/master/utils/scripts/db_update.pl");
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Run Automatic Database Upgrade Script */
|
||||
system("perl db_update.pl ran_from_world");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Database::CheckDatabaseConvertPPDeblob(){
|
||||
unsigned int lengths;
|
||||
unsigned int lengths_e;
|
||||
std::string squery;
|
||||
@ -1318,7 +1339,7 @@ bool Database::CheckDatabaseConversions() {
|
||||
|
||||
/* Done */
|
||||
printf("Starting conversion...\n\n");
|
||||
}
|
||||
|
||||
|
||||
int char_iter_count = 0;
|
||||
rquery = StringFormat("SELECT `id` FROM `character_`");
|
||||
@ -1726,7 +1747,8 @@ bool Database::CheckDatabaseConversions() {
|
||||
rquery = StringFormat("REPLACE INTO `character_alternate_abilities` (id, slot, aa_id, aa_value)"
|
||||
" VALUES (%u, %u, %u, %u)", character_id, i, pp->aa_array[i].AA, pp->aa_array[i].value);
|
||||
first_entry = 1;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
rquery = rquery + StringFormat(", (%u, %u, %u, %u)", character_id, i, pp->aa_array[i].AA, pp->aa_array[i].value);
|
||||
}
|
||||
}
|
||||
@ -1881,10 +1903,12 @@ bool Database::CheckDatabaseConversions() {
|
||||
printf("\n\nRenaming `character_` table to `character_old`, this is a LARGE table so when you don't need it anymore, I would suggest deleting it yourself...\n");
|
||||
printf("\n\nCharacter blob conversion complete, continuing world bootup...\n");
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool Database::CheckDatabaseConvertBotsPostPPDeblob(){
|
||||
#ifdef BOTS
|
||||
|
||||
int runbotsconvert = 0;
|
||||
|
||||
/* Check For Legacy Bot References */
|
||||
@ -2037,7 +2061,10 @@ bool Database::CheckDatabaseConversions() {
|
||||
}
|
||||
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Database::CheckDatabaseConvertCorpseDeblob(){
|
||||
DBPlayerCorpse_Struct_temp* dbpc;
|
||||
classic_db_temp::DBPlayerCorpse_Struct_temp* dbpc_c;
|
||||
uint32 in_datasize;
|
||||
@ -2046,13 +2073,13 @@ bool Database::CheckDatabaseConversions() {
|
||||
std::string scquery;
|
||||
int8 first_entry = 0;
|
||||
|
||||
rquery = StringFormat("SHOW COLUMNS FROM `character_corpses` LIKE 'data'");
|
||||
results = QueryDatabase(rquery);
|
||||
std::string rquery = StringFormat("SHOW COLUMNS FROM `character_corpses` LIKE 'data'");
|
||||
auto results = QueryDatabase(rquery);
|
||||
if (results.RowCount() != 0){
|
||||
rquery = StringFormat("SELECT DISTINCT charid FROM character_corpses");
|
||||
results = QueryDatabase(rquery);
|
||||
for (auto row = results.begin(); row != results.end(); ++row) {
|
||||
squery = StringFormat("SELECT id, charname, data, time_of_death, is_rezzed FROM character_corpses WHERE `charid` = %i", atoi(row[0]));
|
||||
std::string squery = StringFormat("SELECT id, charname, data, time_of_death, is_rezzed FROM character_corpses WHERE `charid` = %i", atoi(row[0]));
|
||||
auto results2 = QueryDatabase(squery);
|
||||
for (auto row2 = results2.begin(); row2 != results2.end(); ++row2) {
|
||||
in_datasize = results2.LengthOfColumn(2);
|
||||
@ -2305,21 +2332,6 @@ bool Database::CheckDatabaseConversions() {
|
||||
}
|
||||
QueryDatabase(StringFormat("ALTER TABLE `character_corpses` DROP COLUMN `data`"));
|
||||
}
|
||||
|
||||
|
||||
/* Fetch Automatic Database Upgrade Script */
|
||||
if (!std::ifstream("db_update.pl")){
|
||||
std::cout << "Pulling down automatic database upgrade script...\n" << std::endl;
|
||||
#ifdef _WIN32
|
||||
system("perl -MLWP::UserAgent -e \"require LWP::UserAgent; my $ua = LWP::UserAgent->new; $ua->timeout(10); $ua->env_proxy; my $response = $ua->get('https://raw.githubusercontent.com/EQEmu/Server/master/utils/scripts/db_update.pl'); if ($response->is_success){ open(FILE, '> db_update.pl'); print FILE $response->decoded_content; close(FILE); }\"");
|
||||
#else
|
||||
system("wget -O db_update.pl https://raw.githubusercontent.com/EQEmu/Server/master/utils/scripts/db_update.pl");
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Run Automatic Database Upgrade Script */
|
||||
system("perl db_update.pl ran_from_world");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -3864,9 +3876,7 @@ bool Database::RemoveClientsFromInstance(uint16 instance_id)
|
||||
return results.Success();
|
||||
}
|
||||
|
||||
bool Database::CheckInstanceExists(uint16 instance_id)
|
||||
{
|
||||
|
||||
bool Database::CheckInstanceExists(uint16 instance_id) {
|
||||
std::string query = StringFormat("SELECT * FROM instance_list where id=%u", instance_id);
|
||||
auto results = QueryDatabase(query);
|
||||
|
||||
@ -3879,15 +3889,12 @@ bool Database::CheckInstanceExists(uint16 instance_id)
|
||||
return true;
|
||||
}
|
||||
|
||||
void Database::BuryCorpsesInInstance(uint16 instance_id)
|
||||
{
|
||||
|
||||
std::string query = StringFormat("UPDATE character_corpses SET IsBurried=1, instanceid=0 WHERE instanceid=%u", instance_id);
|
||||
void Database::BuryCorpsesInInstance(uint16 instance_id) {
|
||||
std::string query = StringFormat("UPDATE `character_corpses` SET `is_buried` = 1, `instance_id` =0 WHERE `instance_id` = %u", instance_id);
|
||||
auto results = QueryDatabase(query);
|
||||
}
|
||||
|
||||
uint16 Database::GetInstanceVersion(uint16 instance_id)
|
||||
{
|
||||
uint16 Database::GetInstanceVersion(uint16 instance_id) {
|
||||
if(instance_id == 0)
|
||||
return 0;
|
||||
|
||||
@ -3904,8 +3911,7 @@ uint16 Database::GetInstanceVersion(uint16 instance_id)
|
||||
return atoi(row[0]);
|
||||
}
|
||||
|
||||
uint16 Database::GetInstanceID(const char* zone, uint32 charid, int16 version)
|
||||
{
|
||||
uint16 Database::GetInstanceID(const char* zone, uint32 charid, int16 version) {
|
||||
|
||||
std::string query = StringFormat("SELECT instance_list.id FROM instance_list, instance_list_player "
|
||||
"WHERE instance_list.zone=%u AND instance_list.version=%u AND instance_list.id=instance_list_player.id AND "
|
||||
|
||||
@ -301,7 +301,11 @@ public:
|
||||
void SetRaidGroupLeaderInfo(uint32 gid, uint32 rid);
|
||||
void ClearRaidLeader(uint32 gid = 0xFFFFFFFF, uint32 rid = 0);
|
||||
|
||||
/* Database Conversions*/
|
||||
bool CheckDatabaseConversions();
|
||||
bool CheckDatabaseConvertPPDeblob();
|
||||
bool CheckDatabaseConvertCorpseDeblob();
|
||||
bool CheckDatabaseConvertBotsPostPPDeblob();
|
||||
|
||||
/*
|
||||
* Database Variables
|
||||
|
||||
@ -1215,9 +1215,9 @@ ItemInst* SharedDatabase::CreateBaseItem(const Item_Struct* item, int16 charges)
|
||||
}
|
||||
|
||||
int32 SharedDatabase::DeleteStalePlayerCorpses() {
|
||||
if(RuleB(Zone, EnableShadowrest))
|
||||
{
|
||||
std::string query = StringFormat("UPDATE character_corpses SET IsBurried = 1 WHERE IsBurried = 0 AND "
|
||||
if(RuleB(Zone, EnableShadowrest)) {
|
||||
std::string query = StringFormat(
|
||||
"UPDATE `character_corpses` SET `is_buried` = 1 WHERE `is_buried` = 0 AND "
|
||||
"(UNIX_TIMESTAMP() - UNIX_TIMESTAMP(time_of_death)) > %d AND NOT time_of_death = 0",
|
||||
(RuleI(Character, CorpseDecayTimeMS) / 1000));
|
||||
auto results = QueryDatabase(query);
|
||||
@ -1227,7 +1227,8 @@ int32 SharedDatabase::DeleteStalePlayerCorpses() {
|
||||
return results.RowsAffected();
|
||||
}
|
||||
|
||||
std::string query = StringFormat("DELETE FROM character_corpses WHERE (UNIX_TIMESTAMP() - UNIX_TIMESTAMP(time_of_death)) > %d "
|
||||
std::string query = StringFormat(
|
||||
"DELETE FROM `character_corpses` WHERE (UNIX_TIMESTAMP() - UNIX_TIMESTAMP(time_of_death)) > %d "
|
||||
"AND NOT time_of_death = 0", (RuleI(Character, CorpseDecayTimeMS) / 1000));
|
||||
auto results = QueryDatabase(query);
|
||||
if (!results.Success())
|
||||
@ -1236,16 +1237,6 @@ int32 SharedDatabase::DeleteStalePlayerCorpses() {
|
||||
return results.RowsAffected();
|
||||
}
|
||||
|
||||
int32 SharedDatabase::DeleteStalePlayerBackups() {
|
||||
// 1209600 seconds = 2 weeks
|
||||
const std::string query = "DELETE FROM player_corpses_backup WHERE (UNIX_TIMESTAMP() - UNIX_TIMESTAMP(time_of_death)) > 1209600";
|
||||
auto results = QueryDatabase(query);
|
||||
if (!results.Success())
|
||||
return -1;
|
||||
|
||||
return results.RowsAffected();
|
||||
}
|
||||
|
||||
bool SharedDatabase::GetCommandSettings(std::map<std::string,uint8> &commands) {
|
||||
|
||||
const std::string query = "SELECT command, access FROM commands";
|
||||
|
||||
@ -41,7 +41,6 @@ public:
|
||||
uint8 GetGMSpeed(uint32 account_id);
|
||||
bool SetHideMe(uint32 account_id, uint8 hideme);
|
||||
int32 DeleteStalePlayerCorpses();
|
||||
int32 DeleteStalePlayerBackups();
|
||||
void LoadCharacterInspectMessage(uint32 character_id, InspectMessage_Struct* message);
|
||||
void SaveCharacterInspectMessage(uint32 character_id, const InspectMessage_Struct* message);
|
||||
void GetBotInspectMessage(uint32 botid, InspectMessage_Struct* message);
|
||||
|
||||
@ -336,9 +336,6 @@ int main(int argc, char** argv) {
|
||||
_log(WORLD__INIT, "Reboot zone modes %s",holdzones ? "ON" : "OFF");
|
||||
|
||||
_log(WORLD__INIT, "Deleted %i stale player corpses from database", database.DeleteStalePlayerCorpses());
|
||||
if (RuleB(World, DeleteStaleCorpeBackups) == true) {
|
||||
_log(WORLD__INIT, "Deleted %i stale player backups from database", database.DeleteStalePlayerBackups());
|
||||
}
|
||||
|
||||
_log(WORLD__INIT, "Loading adventures...");
|
||||
if(!adventure_manager.LoadAdventureTemplates())
|
||||
|
||||
@ -3699,7 +3699,6 @@ bool ZoneDatabase::LoadCharacterCorpseData(uint32 corpse_id, PlayerCorpse_Struct
|
||||
corpse_id
|
||||
);
|
||||
auto results = QueryDatabase(query);
|
||||
std::cout << query << std::endl;
|
||||
uint16 i = 0;
|
||||
for (auto row = results.begin(); row != results.end(); ++row) {
|
||||
pcs->locked = atoi(row[i++]); // is_locked,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user