bool CorporationDB::GetCurrentApplicationInfo(uint32 charID, uint32 corpID, ApplicationInfo & aInfo) { DBQueryResult res; if (!sDatabase.RunQuery(res, " SELECT " " status, applicationText, applicationDateTime, roles, grantableRoles, lastCorpUpdaterID, deleted " " FROM chrApplications " " WHERE characterID = %u AND corporationID = %u ", charID, corpID)) { codelog(SERVICE__ERROR, "Error in query: %s", res.error.c_str()); aInfo.valid = false; return false; } DBResultRow row; if (!res.GetRow(row)) { _log(DATABASE__ERROR, "There's no previous application."); aInfo.valid = false; return false; } aInfo.charID = charID; aInfo.corpID = corpID; aInfo.status = row.GetUInt(0); aInfo.appText = row.GetText(1); aInfo.appTime = row.GetUInt64(2); aInfo.role = row.GetUInt64(3); aInfo.grantRole = row.GetUInt64(4); aInfo.lastCID = row.GetUInt(5); aInfo.deleted = row.GetUInt(6); aInfo.valid = true; return true; }
bool RamProxyDB::GetJobVerifyProperties(const uint32 jobID, uint32 &ownerID, uint64 &endProductionTime, EVERamRestrictionMask &restrictionMask, EVERamCompletedStatus &status) { DBQueryResult res; if(!DBcore::RunQuery(res, "SELECT job.ownerID, job.endProductionTime, job.completedStatusID, line.restrictionMask" " FROM srvRamJobs AS job" " LEFT JOIN ramAssemblyLines AS line ON line.assemblyLineID = job.assemblyLineID" " WHERE job.jobID = %u", jobID)) { _log(DATABASE__ERROR, "Unable to query completion properties for job %u: %s", jobID, res.error.c_str()); return false; } DBResultRow row; if(!res.GetRow(row)) { _log(DATABASE__ERROR, "No completion properties found for job %u.", jobID); return false; } ownerID = row.GetUInt(0); endProductionTime = row.GetUInt64(1); status = (EVERamCompletedStatus)row.GetUInt(2); restrictionMask = (EVERamRestrictionMask)row.GetUInt(3); return true; }
bool CorporationDB::CreateMemberAttributeUpdate(MemberAttributeUpdate & attrib, uint32 newCorpID, uint32 charID) { // What are we doing here exactly? // Corporation gets a new member // it's new to it DBQueryResult res; DBResultRow row; if (!sDatabase.RunQuery(res, " SELECT " " title, corporationDateTime, corporationID, " " corpRole, rolesAtAll, rolesAtBase, " " rolesAtHQ, rolesAtOther " " FROM character_ " " WHERE character_.characterID = %u ", charID)) { codelog(SERVICE__ERROR, "Error in query: %s", res.error.c_str()); return false; } if (!res.GetRow(row)) { codelog(SERVICE__ERROR, "Cannot find character in database"); return false; } // this could be stored in the db #define PRN new PyNone() #define PRI(i) new PyInt(i) #define PRL(i) new PyLong(i) #define PRS(s) new PyString(s) #define PRNI(i) (row.IsNull(i) ? PRI(0) : PRI(row.GetUInt64(i))) #define F(name, o, n) \ attrib.name##Old = o; \ attrib.name##New = n //element Old Value New Value F(accountKey, PRN, PRN); // i don't even know what this could refer to F(baseID, PRN, PRN); F(characterID, PRN, PRI(charID)); F(corporationID, PRI(row.GetUInt(2)), PRI(newCorpID)); // these also have to be queried from the db F(divisionID, PRN, PRN); F(roles, PRNI(3), PRI(0)); F(grantableRoles, PRNI(4), PRI(0)); F(grantableRolesAtBase, PRNI(5), PRI(0)); F(grantableRolesAtHQ, PRNI(6), PRI(0)); F(grantableRolesAtOther, PRNI(7), PRI(0)); F(squadronID, PRN, PRN); F(startDateTime, PRL(row.GetUInt64(1)), PRL(Win32TimeNow())); // another one i have no idea F(titleMask, PRN, PRI(0)); F(baseID, PRS(row.GetText(0)), PRS("")); #undef F #undef PRN #undef PRI #undef PRS #undef PRNI return true; }
bool CharacterDB::GetRespecInfo(uint32 characterId, uint32& out_freeRespecs, uint64& out_nextRespec) { DBQueryResult res; if (!sDatabase.RunQuery(res, "SELECT freeRespecs, nextRespec FROM character_ WHERE characterID = %u", characterId)) return false; if (res.GetRowCount() < 1) return false; DBResultRow row; res.GetRow(row); out_freeRespecs = row.GetUInt(0); out_nextRespec = row.GetUInt64(1); // can't have more than two if (out_freeRespecs == 2) out_nextRespec = 0; else if (out_freeRespecs < 2 && out_nextRespec < Win32TimeNow()) { // you may get another out_freeRespecs++; if (out_freeRespecs == 1) out_nextRespec = Win32TimeNow() + Win32Time_Year; else out_nextRespec = 0; // reflect this in the database, too DBerror err; sDatabase.RunQuery(err, "UPDATE character_ SET freeRespecs = %u, nextRespec = %" PRIu64 " WHERE characterId = %u", out_freeRespecs, out_nextRespec, characterId); } return true; }
bool AttributeMap::ResetAttribute(uint32 attrID, bool notify) { //this isn't particularly efficient, but until I write a better solution, this will do DBQueryResult res; if(!sDatabase.RunQuery(res, "SELECT * FROM dgmTypeAttributes WHERE typeID='%u'", mItem.typeID())) { sLog.Error("AttributeMap", "Error in db load query: %s", res.error.c_str()); return false; } DBResultRow row; EvilNumber attrVal; uint32 attributeID; int amount = res.GetRowCount(); for (int i = 0; i < amount; i++) { res.GetRow(row); attributeID = row.GetUInt(1); if( attributeID == attrID ) { if(!row.IsNull(2)) attrVal = row.GetUInt64(2); else attrVal = row.GetDouble(3); SetAttribute(attributeID, attrVal, notify); } } return true; }
bool ServiceDB::GetConstant(const char *name, uint32 &into) { DBQueryResult res; std::string escaped; sDatabase.DoEscapeString(escaped, name); if(!sDatabase.RunQuery(res, "SELECT" " constantValue" " FROM eveConstants" " WHERE constantID='%s'", escaped.c_str() )) { codelog(SERVICE__ERROR, "Error in query: %s", res.error.c_str()); return false; } DBResultRow row; if(!res.GetRow(row)) { codelog(SERVICE__ERROR, "Unable to find constant %s", name); return false; } into = row.GetUInt64(0); return true; }
bool BookmarkDB::GetBookmarkInformation(uint32 bookmarkID, uint32 &ownerID, uint32 &itemID, uint32 &typeID, uint32 &flag, std::string &memo, uint64 &created, double &x, double &y, double &z, uint32 &locationID, std::string ¬e, uint32 &creatorID, uint32 folderID) { DBQueryResult res; DBResultRow row; // Query database 'srvBookmarks' table for the supplied bookmarkID and retrieve entire row: if (!DBcore::RunQuery(res, " SELECT " " bookmarkID, " " ownerID, " " itemID, " " typeID, " " flag, " " memo, " " created, " " x, " " y, " " z, " " locationID, " " note," " creatorID," " folderID" " FROM srvBookmarks " " WHERE bookmarkID = %u ", bookmarkID)) { SysLog::Error( "BookmarkDB::GetBookmarkInformation()", "Error in query: %s", res.error.c_str() ); return false; } // Query went through, but check to see if there were zero rows, ie bookmarkID was invalid: if ( !(res.GetRow(row)) ) return false; // Bookmark 'bookmarkID' was found, Send back bookmark information: ownerID = row.GetUInt(1); itemID = row.GetUInt(2); typeID = row.GetUInt(3); flag = row.GetUInt(4); memo = row.GetText(5); created = row.GetUInt64(6); x = row.GetDouble(7); y = row.GetDouble(8); z = row.GetDouble(9); locationID = row.GetUInt(10); note = row.GetUInt(11); creatorID = row.GetUInt(12); folderID = row.GetUInt(13); return true; }
bool ServiceDB::GetAccountInformation( const char* username, const char* password, AccountInfo & account_info ) { std::string _username = username; std::string _escaped_username; DBcore::DoEscapeString(_escaped_username, _username); DBQueryResult res; if (!DBcore::RunQuery(res, "SELECT accountID, password, hash, role, online, banned, logonCount, lastLogin FROM srvAccount WHERE accountName = '%s'", _escaped_username.c_str())) { SysLog::Error( "ServiceDB", "Error in query: %s.", res.error.c_str() ); return false; } DBResultRow row; if (!res.GetRow( row )) { // account not found, create new one if autoAccountRole is not zero (0) if(EVEServerConfig::account.autoAccountRole > 0) { uint32 accountID = CreateNewAccount( _username.c_str(), password, EVEServerConfig::account.autoAccountRole); if( accountID > 0 ) { // add new account successful, get account info again bool ret = GetAccountInformation(username, password, account_info); return ret; } else return false; } else return false; } /* when any of the text gets are NULL it will fail... I think.. */ account_info.id = row.GetUInt(0); if (!row.IsNull(1)) account_info.password = row.GetText(1); if (!row.IsNull(2)) account_info.hash = row.GetText(2); account_info.name = _escaped_username; account_info.role = row.GetUInt64(3); account_info.online = row.GetBool(4); account_info.banned = row.GetBool(5); account_info.visits = row.GetUInt(6); if (!row.IsNull(7)) account_info.last_login = row.GetText(7); return true; }
PyRep *LSCDB::GetMailDetails(uint32 messageID, uint32 readerID) { DBQueryResult result; DBResultRow row; //we need to query out the primary message here... not sure how to properly //grab the "main message" though... the text/plain clause is pretty hackish. if (!sDatabase.RunQuery(result, " SELECT eveMail.messageID, eveMail.senderID, eveMail.subject, " // need messageID as char* " eveMailDetails.attachment, eveMailDetails.mimeTypeID, " " eveMailMimeType.mimeType, eveMailMimeType.`binary`, " " eveMail.created, eveMail.channelID " " FROM eveMail " " LEFT JOIN eveMailDetails" " ON eveMailDetails.messageID = eveMail.messageID " " LEFT JOIN eveMailMimeType" " ON eveMailMimeType.mimeTypeID = eveMailDetails.mimeTypeID " " WHERE eveMail.messageID=%u" " AND channelID=%u", messageID, readerID )) { codelog(SERVICE__ERROR, "Error in query: %s", result.error.c_str()); return (NULL); } if (!result.GetRow(row)) { codelog(SERVICE__MESSAGE, "No message with messageID %u", messageID); return (NULL); } Rsp_GetEVEMailDetails details; details.messageID = row.GetUInt(0); details.senderID = row.GetUInt(1); details.subject = row.GetText(2); details.body = row.GetText(3); details.created = row.GetUInt64(7); details.channelID = row.GetUInt(8); details.deleted = 0; // If a message's details are sent, then it isn't deleted. If it's deleted, details cannot be sent details.mimeTypeID = row.GetInt(4); details.mimeType = row.GetText(5); details.binary = row.GetInt(6); return(details.Encode()); }
uint64 RamProxyDB::GetNextFreeTime(const uint32 assemblyLineID) { DBQueryResult res; if(!DBcore::RunQuery(res, "SELECT" " nextFreeTime" " FROM ramAssemblyLines" " WHERE assemblyLineID = %u", assemblyLineID)) { _log(DATABASE__ERROR, "Failed to query next free time for assembly line %u: %s.", assemblyLineID, res.error.c_str()); return 0; } DBResultRow row; if(!res.GetRow(row)) { _log(DATABASE__ERROR, "Assembly line %u not found.", assemblyLineID); return 0; } else return(row.GetUInt64(0)); }
bool CorporationDB::CreateCorporationCreatePacket(Notify_OnCorporaionChanged & cc, uint32 oldCorpID, uint32 newCorpID) { DBQueryResult res; DBResultRow row; if (!sDatabase.RunQuery(res, " SELECT " " corporationID,corporationName,description,tickerName,url," " taxRate,minimumJoinStanding,corporationType,hasPlayerPersonnelManager," " sendCharTerminationMessage,creatorID,ceoID,stationID,raceID," " allianceID,shares,memberCount,memberLimit,allowedMemberRaceIDs," " graphicID,shape1,shape2,shape3,color1,color2,color3,typeface," " division1,division2,division3,division4,division5,division6," " division7,deleted" " FROM corporation " " WHERE corporationID = %u ", newCorpID )) { codelog(SERVICE__ERROR, "Error in retrieving new corporation's data (%u)", newCorpID); return false; } if(!res.GetRow(row)) { codelog(SERVICE__ERROR, "Unable to find corporation's data (%u)", newCorpID); return false; } cc.allianceIDOld = new PyNone(); cc.allowedMemberRaceIDsOld = new PyNone(); cc.ceoIDOld = new PyNone(); cc.color1Old = new PyNone(); cc.color2Old = new PyNone(); cc.color3Old = new PyNone(); cc.corporationIDOld = new PyNone(); cc.corporationNameOld = new PyNone(); cc.corporationTypeOld = new PyNone(); cc.creatorIDOld = new PyNone(); cc.deletedOld = new PyNone(); cc.descriptionOld = new PyNone(); cc.division1Old = new PyNone(); cc.division2Old = new PyNone(); cc.division3Old = new PyNone(); cc.division4Old = new PyNone(); cc.division5Old = new PyNone(); cc.division6Old = new PyNone(); cc.division7Old = new PyNone(); cc.graphicIDOld = new PyNone(); cc.hasPlayerPersonnelManagerOld = new PyNone(); cc.memberCountOld = new PyNone(); cc.memberLimitOld = new PyNone(); cc.minimumJoinStandingOld = new PyNone(); cc.raceIDOld = new PyNone(); cc.sendCharTerminationMessageOld = new PyNone(); cc.shape1Old = new PyNone(); cc.shape2Old = new PyNone(); cc.shape3Old = new PyNone(); cc.sharesOld = new PyNone(); cc.stationIDOld = new PyNone(); cc.taxRateOld = new PyNone(); cc.tickerNameOld = new PyNone(); cc.typefaceOld = new PyNone(); cc.urlOld = new PyNone(); cc.corporationIDNew = row.GetUInt(0); cc.corporationNameNew = row.GetText(1); cc.descriptionNew = row.GetText(2); cc.tickerNameNew = row.GetText(3); cc.urlNew = row.GetText(4); cc.taxRateNew = row.GetDouble(5); cc.minimumJoinStandingNew = row.GetDouble(6); cc.corporationTypeNew = row.GetUInt(7); cc.hasPlayerPersonnelManagerNew = row.GetUInt(8); cc.sendCharTerminationMessageNew = row.GetUInt(9); cc.creatorIDNew = row.GetUInt(10); cc.ceoIDNew = row.GetUInt(11); cc.stationIDNew = row.GetUInt(12); _NI(raceIDNew, 13); _NI(allianceIDNew, 14); cc.sharesNew = row.GetUInt64(15); cc.memberCountNew = row.GetUInt(16); cc.memberLimitNew = row.GetUInt(17); cc.allowedMemberRaceIDsNew = row.GetUInt(18); cc.graphicIDNew = row.GetUInt(19); _NI(shape1New, 20); _NI(shape2New, 21); _NI(shape3New, 22); _NI(color1New, 23); _NI(color2New, 24); _NI(color3New, 25); _NI(typefaceNew, 26); _NI(division1New, 27); _NI(division2New, 28); _NI(division3New, 29); _NI(division4New, 30); _NI(division5New, 31); _NI(division6New, 32); _NI(division7New, 33); cc.deletedNew = row.GetUInt(34); return true; }