bool ZoneDatabase::PopulateZoneSpawnList(uint32 zoneid, LinkedList<Spawn2*> &spawn2_list, int16 version, uint32 repopdelay) { char errbuf[MYSQL_ERRMSG_SIZE]; char* query = 0; MYSQL_RES *result; MYSQL_ROW row; const char *zone_name = database.GetZoneName(zoneid); MakeAnyLenString(&query, "SELECT id, spawngroupID, x, y, z, heading, respawntime, variance, pathgrid, _condition, cond_value, enabled, animation FROM spawn2 WHERE zone='%s' AND version=%u", zone_name, version); if (RunQuery(query, strlen(query), errbuf, &result)) { safe_delete_array(query); while((row = mysql_fetch_row(result))) { Spawn2* newSpawn = 0; bool perl_enabled = atoi(row[11]) == 1 ? true : false; uint32 spawnLeft = (GetSpawnTimeLeft(atoi(row[0]), zone->GetInstanceID()) * 1000); newSpawn = new Spawn2(atoi(row[0]), atoi(row[1]), atof(row[2]), atof(row[3]), atof(row[4]), atof(row[5]), atoi(row[6]), atoi(row[7]), spawnLeft, atoi(row[8]), atoi(row[9]), atoi(row[10]), perl_enabled, (EmuAppearance)atoi(row[12])); spawn2_list.Insert( newSpawn ); } mysql_free_result(result); } else { LogFile->write(EQEMuLog::Error, "Error in PopulateZoneLists query '%s': %s", query, errbuf); safe_delete_array(query); return false; } return true; }
Ground_Spawns* ZoneDatabase::LoadGroundSpawns(uint32 zone_id, int16 version, Ground_Spawns* gs){ char errbuf[MYSQL_ERRMSG_SIZE]; char *query = 0; MYSQL_RES *result; MYSQL_ROW row; if (RunQuery(query, MakeAnyLenString(&query, "SELECT max_x,max_y,max_z,min_x,min_y,heading,name,item,max_allowed,respawn_timer from ground_spawns where zoneid=%i and (version=%u OR version=-1) limit 50", zone_id, version), errbuf, &result)) { safe_delete_array(query); int i=0; while( (row=mysql_fetch_row(result) ) ) { gs->spawn[i].max_x=atof(row[0]); gs->spawn[i].max_y=atof(row[1]); gs->spawn[i].max_z=atof(row[2]); gs->spawn[i].min_x=atof(row[3]); gs->spawn[i].min_y=atof(row[4]); gs->spawn[i].heading=atof(row[5]); strcpy(gs->spawn[i].name,row[6]); gs->spawn[i].item=atoi(row[7]); gs->spawn[i].max_allowed=atoi(row[8]); gs->spawn[i].respawntimer=atoi(row[9]); i++; } mysql_free_result(result); } else { std::cerr << "Error in LoadGroundSpawns query '" << query << "' " << errbuf << std::endl; safe_delete_array(query); } return gs; }
bool WorldDatabase::GetCharacterLevel(const char *name, int &level) { char errbuf[MYSQL_ERRMSG_SIZE]; char* query = 0; MYSQL_RES *result; MYSQL_ROW row; if(RunQuery(query, MakeAnyLenString(&query, "SELECT level FROM character_ WHERE name='%s'", name), errbuf, &result)) { if(row = mysql_fetch_row(result)) { level = atoi(row[0]); mysql_free_result(result); safe_delete_array(query); return true; } mysql_free_result(result); } else { LogFile->write(EQEMuLog::Error, "WorldDatabase::GetCharacterLevel: %s", errbuf); } safe_delete_array(query); return false; }
bool WorldDatabase::LoadCharacterCreateCombos() { character_create_race_class_combos.clear(); char errbuf[MYSQL_ERRMSG_SIZE]; char* query = 0; MYSQL_RES *result; MYSQL_ROW row; if(RunQuery(query, MakeAnyLenString(&query, "select * from char_create_combinations order by race, class, deity, start_zone"), errbuf, &result)) { safe_delete_array(query); while(row = mysql_fetch_row(result)) { RaceClassCombos combo; int r = 0; combo.AllocationIndex = atoi(row[r++]); combo.Race = atoi(row[r++]); combo.Class = atoi(row[r++]); combo.Deity = atoi(row[r++]); combo.Zone = atoi(row[r++]); combo.ExpansionRequired = atoi(row[r++]); character_create_race_class_combos.push_back(combo); } mysql_free_result(result); } else { safe_delete_array(query); return false; } return true; }
bool Database::LoadChatChannels() { _log(UCS__INIT, "Loading chat channels from the database."); char errbuf[MYSQL_ERRMSG_SIZE]; char* query = 0; MYSQL_RES *result; MYSQL_ROW row; if (!RunQuery(query,MakeAnyLenString(&query, "select `name`,`owner`,`password`, `minstatus` from `chatchannels`"),errbuf,&result)){ _log(UCS__ERROR, "Failed to load channels. %s %s", query, errbuf); safe_delete_array(query); return false; } safe_delete_array(query); while((row = mysql_fetch_row(result))) { std::string ChannelName = row[0]; std::string ChannelOwner = row[1]; std::string ChannelPassword = row[2]; ChannelList->CreateChannel(ChannelName, ChannelOwner, ChannelPassword, true, atoi(row[3])); } mysql_free_result(result); return true; }
int32 ZoneDatabase::GetDoorsDBCountPlusOne(const char *zone_name, int16 version) { char errbuf[MYSQL_ERRMSG_SIZE]; char *query = 0; uint32 oMaxID = 0; MYSQL_RES *result; MYSQL_ROW row; query = new char[256]; sprintf(query, "SELECT MAX(doorid) FROM doors WHERE zone='%s' AND (version=%u OR version=-1)", zone_name, version); if (RunQuery(query, strlen(query), errbuf, &result)) { safe_delete_array(query); row = mysql_fetch_row(result); if (row != nullptr && row[1] != 0) { if (row[0]) oMaxID = atoi(row[0]) + 1; else oMaxID = 0; mysql_free_result(result); return oMaxID; } mysql_free_result(result); } else { std::cerr << "Error in GetDoorsCountPlusOne query '" << query << "' " << errbuf << std::endl; safe_delete_array(query); return -1; } return -1; }
void Database::SendBody(Client *c, int MessageNumber) { int CharacterID = FindCharacter(c->MailBoxName().c_str()); _log(UCS__TRACE, "SendBody: MsgID %i, to %s, CharID is %i", MessageNumber, c->MailBoxName().c_str(), CharacterID); if(CharacterID <= 0) return; char errbuf[MYSQL_ERRMSG_SIZE]; char* query = 0; MYSQL_RES *result; MYSQL_ROW row; if (!RunQuery(query,MakeAnyLenString(&query, "select `msgid`, `body`, `to` from `mail` " "where `charid`=%i and `msgid`=%i", CharacterID, MessageNumber), errbuf, &result)){ safe_delete_array(query); return ; } safe_delete_array(query); if (mysql_num_rows(result) != 1) { mysql_free_result(result); return; } row = mysql_fetch_row(result); _log(UCS__TRACE, "Message: %i body (%i bytes)", MessageNumber, strlen(row[1])); int PacketLength = 12 + strlen(row[0]) + strlen(row[1]) + strlen(row[2]); EQApplicationPacket *outapp = new EQApplicationPacket(OP_MailSendBody,PacketLength); char *PacketBuffer = (char *)outapp->pBuffer; VARSTRUCT_ENCODE_INTSTRING(PacketBuffer, c->GetMailBoxNumber()); VARSTRUCT_ENCODE_STRING(PacketBuffer,row[0]); VARSTRUCT_ENCODE_STRING(PacketBuffer,row[1]); VARSTRUCT_ENCODE_STRING(PacketBuffer,"1"); VARSTRUCT_ENCODE_TYPE(uint8, PacketBuffer, 0); VARSTRUCT_ENCODE_TYPE(uint8, PacketBuffer, 0x0a); VARSTRUCT_ENCODE_STRING(PacketBuffer, "TO:"); PacketBuffer--; VARSTRUCT_ENCODE_STRING(PacketBuffer, row[2]); PacketBuffer--; // Overwrite the null terminator VARSTRUCT_ENCODE_TYPE(uint8, PacketBuffer, 0x0a); mysql_free_result(result); _pkt(UCS__PACKETS, outapp); c->QueuePacket(outapp); safe_delete(outapp); }
bool ZoneDatabase::CreateSpawn2(Client *c, uint32 spawngroup, const char* zone, float heading, float x, float y, float z, uint32 respawn, uint32 variance, uint16 condition, int16 cond_value) { char errbuf[MYSQL_ERRMSG_SIZE]; char *query = 0; uint32 affected_rows = 0; // if(GetInverseXY()==1) { // float temp=x; // x=y; // y=temp; // } if (RunQuery(query, MakeAnyLenString(&query, "INSERT INTO spawn2 (spawngroupID,zone,x,y,z,heading,respawntime,variance,_condition,cond_value) Values (%i, '%s', %f, %f, %f, %f, %i, %i, %u, %i)", spawngroup, zone, x, y, z, heading, respawn, variance, condition, cond_value ), errbuf, 0, &affected_rows)) { safe_delete_array(query); if (affected_rows == 1) { if(c) c->LogSQL(query); return true; } else { return false; } } else { LogFile->write(EQEMuLog::Error, "Error in CreateSpawn2 query '%s': %s", query, errbuf); safe_delete_array(query); return false; } return false; }
bool Database::GetVariable(const char* varname, char* varvalue, uint16 varvalue_len) { char errbuf[MYSQL_ERRMSG_SIZE]; char* query = 0; MYSQL_RES *result; MYSQL_ROW row; if (!RunQuery(query,MakeAnyLenString(&query, "select `value` from `variables` where `varname`='%s'", varname), errbuf, &result)) { _log(UCS__ERROR, "Unable to get message count from database. %s %s", query, errbuf); safe_delete_array(query); return false; } safe_delete_array(query); if (mysql_num_rows(result) != 1) { mysql_free_result(result); return false; } row = mysql_fetch_row(result); snprintf(varvalue, varvalue_len, "%s", row[0]); mysql_free_result(result); return true; }
bool ZoneDatabase::CheckGuildDoor(uint8 doorid,uint16 guild_id,const char* zone) { MYSQL_ROW row; char errbuf[MYSQL_ERRMSG_SIZE]; char *query = 0; MYSQL_RES *result; if (!RunQuery(query, MakeAnyLenString(&query, "SELECT guild FROM doors where doorid=%i AND zone='%s'", doorid-128, zone), errbuf, &result)) { LogFile->write(EQEMuLog::Error, "Error in CheckGuildDoor query '%s': %s", query, errbuf); safe_delete_array(query); return false; } else { if (mysql_num_rows(result) == 1) { row = mysql_fetch_row(result); if (atoi(row[0]) == guild_id) { mysql_free_result(result); return true; } else { mysql_free_result(result); return false; } // code below will never be reached mysql_free_result(result); return false; } } return false; }
bool ZoneDatabase::LoadDoors(int32 iDoorCount, Door *into, const char *zone_name, int16 version) { LogFile->write(EQEMuLog::Status, "Loading Doors from database..."); char errbuf[MYSQL_ERRMSG_SIZE]; char *query = 0; MYSQL_RES *result; MYSQL_ROW row; // Door tmpDoor; MakeAnyLenString(&query, "SELECT id,doorid,zone,name,pos_x,pos_y,pos_z,heading," "opentype,guild,lockpick,keyitem,nokeyring,triggerdoor,triggertype,dest_zone,dest_instance,dest_x," "dest_y,dest_z,dest_heading,door_param,invert_state,incline,size,is_ldon_door,client_version_mask " "FROM doors WHERE zone='%s' AND (version=%u OR version=-1) ORDER BY doorid asc", zone_name, version); if (RunQuery(query, strlen(query), errbuf, &result)) { safe_delete_array(query); int32 r; for(r = 0; (row = mysql_fetch_row(result)); r++) { if(r >= iDoorCount) { std::cerr << "Error, Door Count of " << iDoorCount << " exceeded." << std::endl; break; } memset(&into[r], 0, sizeof(Door)); into[r].db_id = atoi(row[0]); into[r].door_id = atoi(row[1]); strn0cpy(into[r].zone_name,row[2],32); strn0cpy(into[r].door_name,row[3],32); into[r].pos_x = (float)atof(row[4]); into[r].pos_y = (float)atof(row[5]); into[r].pos_z = (float)atof(row[6]); into[r].heading = (float)atof(row[7]); into[r].opentype = atoi(row[8]); into[r].guild_id = atoi(row[9]); into[r].lockpick = atoi(row[10]); into[r].keyitem = atoi(row[11]); into[r].nokeyring = atoi(row[12]); into[r].trigger_door = atoi(row[13]); into[r].trigger_type = atoi(row[14]); strn0cpy(into[r].dest_zone, row[15], 32); into[r].dest_instance_id = atoi(row[16]); into[r].dest_x = (float) atof(row[17]); into[r].dest_y = (float) atof(row[18]); into[r].dest_z = (float) atof(row[19]); into[r].dest_heading = (float) atof(row[20]); into[r].door_param=atoi(row[21]); into[r].invert_state=atoi(row[22]); into[r].incline=atoi(row[23]); into[r].size=atoi(row[24]); into[r].is_ldon_door=atoi(row[25]); into[r].client_version_mask = (uint32)strtoul(row[26], nullptr, 10); } mysql_free_result(result); } else { std::cerr << "Error in DBLoadDoors query '" << query << "' " << errbuf << std::endl; safe_delete_array(query); return false; } return true; }
void Database::ItterateQuery(const char *runQuery, std::function<void(mysqlpp::StoreQueryResult::const_iterator)>& ittFunct) { auto queryResults = RunQuery(runQuery); mysqlpp::StoreQueryResult::const_iterator it; for (it = queryResults.begin(); it != queryResults.end(); ++it) { ittFunct(it); } }
void Database::SetMessageStatus(int MessageNumber, int Status) { _log(UCS__TRACE, "SetMessageStatus %i %i", MessageNumber, Status); char errbuf[MYSQL_ERRMSG_SIZE]; char *query = 0; if(Status == 0) RunQuery(query, MakeAnyLenString(&query, "delete from `mail` where `msgid`=%i", MessageNumber), errbuf); else if (!RunQuery(query, MakeAnyLenString(&query, "update `mail` set `status`=%i where `msgid`=%i", Status, MessageNumber), errbuf)) { _log(UCS__ERROR, "Error updating status %s, %s", query, errbuf); } safe_delete_array(query); }
void Database::LogPlayerNPCKill(QSPlayerLogNPCKill_Struct* QS, uint32 Members){ char errbuf[MYSQL_ERRMSG_SIZE]; char* query = 0; uint32 lastid = 0; if(!RunQuery(query, MakeAnyLenString(&query, "INSERT INTO `qs_player_npc_kill_record` SET `npc_id`='%i', `type`='%i', `zone_id`='%i', `time`=NOW()", QS->s1.NPCID, QS->s1.Type, QS->s1.ZoneID), errbuf, 0, 0, &lastid)) { _log(NET__WORLD, "Failed NPC Kill Log Record Insert: %s", errbuf); _log(NET__WORLD, "%s", query); } if(Members > 0){ for (int i = 0; i < Members; i++) { if(!RunQuery(query, MakeAnyLenString(&query, "INSERT INTO `qs_player_npc_kill_record_entries` SET `event_id`='%i', `char_id`='%i'", lastid, QS->Chars[i].char_id, errbuf, 0, 0))) { _log(NET__WORLD, "Failed NPC Kill Log Entry Insert: %s", errbuf); _log(NET__WORLD, "%s", query); } } } }
extern void CommandRelationalSelect(char *sz) { unsigned int i, j; RowSet *rs; if (!sz || !*sz) { outputl(_("You must specify a sql query to run.")); return; } rs = RunQuery(sz); if (!rs) return; if (rs->rows == 0) { outputl(_("No rows found.\n")); return; } #if USE_GTK if (fX) GtkShowQuery(rs); else #endif for (i = 0; i < rs->rows; i++) { if (i == 1) { /* Underline headings */ char *line, *p; unsigned int k; int totalwidth = 0; for (k = 0; k < rs->cols; k++) { totalwidth += rs->widths[k] + 1; if (k != 0) totalwidth += 2; } line = malloc(totalwidth + 1); memset(line, '-', totalwidth); p = line; for (k = 0; k < rs->cols - 1; k++) { p += rs->widths[k]; p[1] = '|'; p += 3; } line[totalwidth] = '\0'; outputl(line); free(line); } for (j = 0; j < rs->cols; j++) { if (j > 0) output(" | "); outputf("%*s", (int) rs->widths[j], rs->data[i][j]); } outputl(""); } FreeRowset(rs); }
// This allows EqEmu to have zone specific foraging - BoB uint32 ZoneDatabase::GetZoneForage(uint32 ZoneID, uint8 skill) { char errbuf[MYSQL_ERRMSG_SIZE]; char *query = 0; MYSQL_RES *result; MYSQL_ROW row; uint8 index = 0; uint32 item[FORAGE_ITEM_LIMIT]; uint32 chance[FORAGE_ITEM_LIMIT]; uint32 ret; for (int c=0; c < FORAGE_ITEM_LIMIT; c++) { item[c] = 0; } uint32 chancepool = 0; if (RunQuery(query, MakeAnyLenString(&query, "SELECT itemid,chance FROM forage WHERE zoneid= '%i' and level <= '%i' LIMIT %i", ZoneID, skill, FORAGE_ITEM_LIMIT), errbuf, &result)) { safe_delete_array(query); while ((row = mysql_fetch_row(result)) && (index < FORAGE_ITEM_LIMIT)) { item[index] = atoi(row[0]); chance[index] = atoi(row[1])+chancepool; LogFile->write(EQEMuLog::Error, "Possible Forage: %d with a %d chance", item[index], chance[index]); chancepool = chance[index]; index++; } mysql_free_result(result); } else { LogFile->write(EQEMuLog::Error, "Error in Forage query '%s': %s", query, errbuf); safe_delete_array(query); return 0; } if(chancepool == 0 || index < 1) return(0); if(index == 1) { return(item[0]); } ret = 0; uint32 rindex = MakeRandomInt(1, chancepool); for(int i = 0; i < index; i++) { if(rindex <= chance[i]) { ret = item[i]; break; } } return ret; }
//o-------------------------------------------------------------- //| Name: SetCharacterFactionLevel; rembrant, Dec. 20, 2001 //o-------------------------------------------------------------- //| Purpose: Update characters faction level with specified //| faction_id to specified value. //| Returns false on failure. //o-------------------------------------------------------------- bool Database::SetCharacterFactionLevel(int32 char_id, sint32 faction_id, sint32 value,LinkedList<FactionValue*>* val_list) { char errbuf[MYSQL_ERRMSG_SIZE]; char *query = 0; int32 affected_rows = 0; if (!RunQuery(query, MakeAnyLenString(&query, "DELETE FROM faction_values WHERE char_id=%i AND faction_id = %i", char_id, faction_id), errbuf)) { cerr << "Error in SetCharacterFactionLevel query '" << query << "' " << errbuf << endl; delete[] query; return false; } if (!RunQuery(query, MakeAnyLenString(&query, "INSERT INTO faction_values (char_id,faction_id,current_value) VALUES (%i,%i,%i)", char_id, faction_id,value), errbuf, 0, &affected_rows)) { cerr << "Error in SetCharacterFactionLevel query '" << query << "' " << errbuf << endl; delete[] query; return false; } delete[] query; if (affected_rows == 0) { return false; } LinkedListIterator<FactionValue*> iterator(*val_list); iterator.Reset(); while(iterator.MoreElements()) { if ((int32)(iterator.GetData()->factionID) == faction_id) { iterator.GetData()->value = value; return true; } iterator.Advance(); } FactionValue* facval = new FactionValue; facval->factionID = faction_id; facval->value = value; val_list->Insert(facval); return true; }
bool ODThumbInfo::InsertThumbForMedia(thumb_description_t& thumb) { try { std::string query = "BEGIN TRANSACTION"; RunQuery(query.c_str()); std::string insertQuery; insertQuery += "INSERT INTO thumb_info (\"media_id\", \"width\", \"height\", \"thumbnailPath\") "; insertQuery += "VALUES (?, ?, ?, ?);"; sqlite3_stmt* statement; if (sqlite3_prepare_v2(mDBHandle, insertQuery.c_str(), -1, &statement, 0) == SQLITE_OK){ sqlite3_bind_int64(statement, 1, thumb.media_id); sqlite3_bind_int(statement, 2, thumb.width); sqlite3_bind_int(statement, 3, thumb.height); sqlite3_bind_text(statement, 4, thumb.thumbnailPath.c_str(), -1, NULL); int result = 0; while (true) { result = sqlite3_step(statement); if (result != SQLITE_ROW) break; } sqlite3_finalize(statement); } std::string error = sqlite3_errmsg(mDBHandle); NSLog(@"%s", error.c_str()); query = "END TRANSACTION"; RunQuery(query.c_str()); } catch (...) { return false; } thumb.thumb_id = GetThumbId(thumb.media_id, thumb.width, thumb.height); return true; }
const LootDrop_Struct* Database::GetLootDrop(int32 lootdrop_id) { #ifdef SHAREMEM return EMuShareMemDLL.Loot.GetLootDrop(lootdrop_id); #else int32 i; if (lootdrop_array == 0) { lootdrop_array = new LootDrop_Struct*[lootdrop_max+1]; lootdrop_inmem = new bool[lootdrop_max+1]; for (i=0; i<=lootdrop_max; i++) { lootdrop_array[i] = 0; lootdrop_inmem[i] = false; } } if (lootdrop_id > lootdrop_max || lootdrop_id == 0) return 0; if (lootdrop_inmem[lootdrop_id]) { if (lootdrop_array[lootdrop_id]) return lootdrop_array[lootdrop_id]; else return 0; } char errbuf[MYSQL_ERRMSG_SIZE]; char *query = 0; MYSQL_RES *result; MYSQL_ROW row; if (RunQuery(query, MakeAnyLenString(&query, "SELECT lootdrop_id, item_id, item_charges, equip_item, chance FROM lootdrop_entries WHERE lootdrop_id=%i order by chance desc", lootdrop_id), errbuf, &result)) { safe_delete(query); lootdrop_array[lootdrop_id] = (LootDrop_Struct*) new uchar[sizeof(LootDrop_Struct) + (sizeof(LootDropEntries_Struct) * mysql_num_rows(result))]; memset(lootdrop_array[lootdrop_id], 0, sizeof(LootDrop_Struct) + (sizeof(LootDropEntries_Struct) * mysql_num_rows(result))); lootdrop_inmem[lootdrop_id] = true; lootdrop_array[lootdrop_id]->NumEntries = mysql_num_rows(result); i=0; while ((row = mysql_fetch_row(result))) { if (i >= lootdrop_array[lootdrop_id]->NumEntries) { mysql_free_result(result); cerr << "Error in Database::GetLootDrop, i >= NumEntries" << endl; return 0; } lootdrop_array[lootdrop_id]->Entries[i].item_id = atoi(row[1]); lootdrop_array[lootdrop_id]->Entries[i].item_charges = atoi(row[2]); lootdrop_array[lootdrop_id]->Entries[i].equip_item = atoi(row[3]); lootdrop_array[lootdrop_id]->Entries[i].chance = atoi(row[4]); i++; } mysql_free_result(result); } else { cerr << "Error in AddLootTableToNPC get items query '" << query << "' " << errbuf << endl; safe_delete(query); return 0; } return lootdrop_array[lootdrop_id]; #endif }
int WorldDatabase::MoveCharacterToBind(int CharID, uint8 bindnum) { // if an invalid bind point is specified, use the primary bind if (bindnum > 4) bindnum = 0; char errbuf[MYSQL_ERRMSG_SIZE]; char *query = 0; MYSQL_RES *result; MYSQL_ROW row; uint32 affected_rows = 0; PlayerProfile_Struct pp; bool PPValid = false; if (RunQuery(query, MakeAnyLenString(&query, "SELECT profile from character_ where id='%i'", CharID), errbuf, &result)) { row = mysql_fetch_row(result); unsigned long* lengths = mysql_fetch_lengths(result); if (lengths[0] == sizeof(PlayerProfile_Struct)) { memcpy(&pp, row[0], sizeof(PlayerProfile_Struct)); PPValid = true; } mysql_free_result(result); } safe_delete_array(query); if(!PPValid) return 0; const char *BindZoneName = StaticGetZoneName(pp.binds[bindnum].zoneId); if(!strcmp(BindZoneName, "UNKNWN")) return pp.zone_id; if (!RunQuery(query, MakeAnyLenString(&query, "UPDATE character_ SET zonename = '%s',zoneid=%i,x=%f, y=%f, z=%f, instanceid=0 WHERE id='%i'", BindZoneName, pp.binds[bindnum].zoneId, pp.binds[bindnum].x, pp.binds[bindnum].y, pp.binds[bindnum].z, CharID), errbuf, 0,&affected_rows)) { return pp.zone_id; } safe_delete_array(query); return pp.binds[bindnum].zoneId; }
void Frame::RunQueries(const wxString& text) { if (text.empty()) { return; } if (m_Results->IsShown()) { m_Results->ClearGrid(); } // Skip sql comments. wxString output = text; wxRegEx("--.*$", wxRE_NEWLINE).ReplaceAll(&output, ""); // Queries are seperated by ; character. wxStringTokenizer tkz(output, ";"); int no_queries = 0; wxStopWatch sw; m_Running = true; // Run all queries. while (tkz.HasMoreTokens() && !m_Stopped) { wxString query = tkz.GetNextToken(); query.Trim(true); query.Trim(false); if (!query.empty()) { try { RunQuery(query, no_queries == 0); no_queries++; } catch (otl_exception& p) { m_Statistics.Inc(_("Number of query errors")); m_Shell->AppendText( _("\nerror: ") + wxExQuoted(p.msg) + _(" in: ") + wxExQuoted(query)); } } } m_Shell->Prompt(wxString::Format(_("\n%d queries (%.3f seconds)"), no_queries, (float)sw.Time() / (float)1000)); m_Running = false; }
/*--------------------------------------------------------------------------------*/ bool PostgresDatabase::TableExists(const AString& name) { SQLQuery *query = NULL; if ((query = RunQuery(AString("select count(*) from %").Arg(name))) != NULL) { bool success = query->GetResult(); delete query; return success; } return false; }
bool ODThumbInfo::UpdateThumbForMedia(thumb_description_t& thumb) { bool success = true; try { std::string query = "BEGIN TRANSACTION"; RunQuery(query.c_str()); std::string updateQuery; updateQuery += "UPDATE thumb_info SET thumbnailPath = ?"; updateQuery += "WHERE thumb_id = ?;"; sqlite3_stmt* statement; if (sqlite3_prepare_v2(mDBHandle, updateQuery.c_str(), -1, &statement, 0) == SQLITE_OK){ sqlite3_bind_text(statement, 1, thumb.thumbnailPath.c_str(),-1,NULL); sqlite3_bind_int64(statement, 2, thumb.thumb_id); int result = 0; while (true) { result = sqlite3_step(statement); if (result != SQLITE_ROW) break; } sqlite3_finalize(statement); } std::string error = sqlite3_errmsg(mDBHandle); NSLog(@"%s", error.c_str()); query = "END TRANSACTION"; RunQuery(query.c_str()); } catch (...) { success = false; } return success; }
void ZoneDatabase::UpdateRecipeMadecount(uint32 recipe_id, uint32 char_id, uint32 madecount) { char *query = 0; uint32 qlen; char errbuf[MYSQL_ERRMSG_SIZE]; qlen = MakeAnyLenString(&query, "INSERT INTO char_recipe_list " " SET recipe_id = %u, char_id = %u, madecount = %u " " ON DUPLICATE KEY UPDATE madecount = %u;" , recipe_id, char_id, madecount, madecount); if (!RunQuery(query, qlen, errbuf)) { LogFile->write(EQEMuLog::Error, "Error in UpdateRecipeMadecount query '%s': %s", query, errbuf); } safe_delete_array(query); }
void Database::SetChannelOwner(std::string ChannelName, std::string Owner) { _log(UCS__TRACE, "Database::SetChannelOwner(%s, %s)", ChannelName.c_str(), Owner.c_str()); char errbuf[MYSQL_ERRMSG_SIZE]; char *query = 0; if(!RunQuery(query, MakeAnyLenString(&query, "UPDATE `chatchannels` set `owner`='%s' where `name`='%s'", Owner.c_str(), ChannelName.c_str()), errbuf)) { _log(UCS__ERROR, "Error updating Owner in database: %s, %s", query, errbuf); } safe_delete_array(query); }
void Database::RemoveFriendOrIgnore(int CharID, int Type, std::string Name) { const char *FriendsQuery="DELETE FROM `friends` WHERE `charid`=%i AND `type`=%i and `name`='%s'"; char errbuf[MYSQL_ERRMSG_SIZE]; char* query = 0; if(!RunQuery(query, MakeAnyLenString(&query, FriendsQuery, CharID, Type, CapitaliseName(Name).c_str()), errbuf, 0, 0)) _log(UCS__ERROR, "Error removing friend/ignore, query was %s", query); else _log(UCS__TRACE, "Removed Friend/Ignore entry for charid %i, type %i, name %s from database.", CharID, Type, Name.c_str()); safe_delete_array(query); }
bool Database::LoadFactionValues(int32 char_id, LinkedList<FactionValue*>* val_list) { char errbuf[MYSQL_ERRMSG_SIZE]; char *query = 0; MYSQL_RES *result; if (RunQuery(query, MakeAnyLenString(&query, "SELECT faction_id,current_value FROM faction_values WHERE char_id = %i",char_id), errbuf, &result)) { delete[] query; bool ret = LoadFactionValues_result(result, val_list); mysql_free_result(result); return ret; } else { cerr << "Error in LoadFactionValues query '" << query << "' " << errbuf << endl; delete[] query; } return false; }
void Database::AddFriendOrIgnore(int CharID, int Type, std::string Name) { const char *FriendsQuery="INSERT INTO `friends` (`charid`, `type`, `name`) VALUES ('%i', %i, '%s')"; char errbuf[MYSQL_ERRMSG_SIZE]; char* query = 0; if(!RunQuery(query, MakeAnyLenString(&query, FriendsQuery, CharID, Type, CapitaliseName(Name).c_str()), errbuf, 0, 0)) _log(UCS__ERROR, "Error adding friend/ignore, query was %s : %s", query, errbuf); else _log(UCS__TRACE, "Wrote Friend/Ignore entry for charid %i, type %i, name %s to database.", CharID, Type, Name.c_str()); safe_delete_array(query); }
void Database::GeneralQueryReceive(ServerPacket *pack) { /* These are general queries passed from anywhere in zone instead of packing structures and breaking them down again and again */ char *Query = nullptr; Query = new char[pack->ReadUInt32() + 1]; pack->ReadString(Query); char errbuf[MYSQL_ERRMSG_SIZE]; char* query = 0; uint32 lastid = 0; if (!RunQuery(query, MakeAnyLenString(&query, Query), errbuf, 0, 0, &lastid)) { _log(QUERYSERV__ERROR, "Failed Delete Log Record Insert: %s", errbuf); _log(QUERYSERV__ERROR, "%s", query); } safe_delete_array(query); safe_delete(pack); safe_delete(Query); }
//todo: rewrite this to not need direct access to trap members. bool ZoneDatabase::LoadTraps(const char* zonename, int16 version) { char errbuf[MYSQL_ERRMSG_SIZE]; char *query = 0; MYSQL_RES *result; MYSQL_ROW row; // int char_num = 0; unsigned long* lengths; if (RunQuery(query, MakeAnyLenString(&query, "SELECT id,x,y,z,effect,effectvalue,effectvalue2,skill,maxzdiff,radius,chance,message,respawn_time,respawn_var,level FROM traps WHERE zone='%s' AND version=%u", zonename, version), errbuf, &result)) { safe_delete_array(query); while ((row = mysql_fetch_row(result))) { lengths = mysql_fetch_lengths(result); Trap* trap = new Trap(); trap->trap_id = atoi(row[0]); trap->x = atof(row[1]); trap->y = atof(row[2]); trap->z = atof(row[3]); trap->effect = atoi(row[4]); trap->effectvalue = atoi(row[5]); trap->effectvalue2 = atoi(row[6]); trap->skill = atoi(row[7]); trap->maxzdiff = atof(row[8]); trap->radius = atof(row[9]); trap->chance = atoi(row[10]); trap->message = row[11]; trap->respawn_time = atoi(row[12]); trap->respawn_var = atoi(row[13]); trap->level = atoi(row[14]); entity_list.AddTrap(trap); trap->CreateHiddenTrigger(); } mysql_free_result(result); } else { LogFile->write(EQEMuLog::Error, "Error in LoadTraps query '%s': %s", query, errbuf); safe_delete_array(query); return false; } return true; }