//this is a crap load of work... there HAS to be a better way to do this.. PyRep *MarketDB::GetMarketGroups() { DBQueryResult res; DBResultRow row; if(!sDatabase.RunQuery(res, "SELECT * " " FROM invMarketGroups")) { codelog(MARKET__ERROR, "Error in query: %s", res.error.c_str()); return NULL; } DBRowDescriptor *header = new DBRowDescriptor(res); CFilterRowSet *filterRowset = new CFilterRowSet(&header); PyDict *keywords = filterRowset->GetKeywords(); keywords->SetItemString("giveMeSets", new PyBool(false)); //+ keywords->SetItemString("allowDuplicateCompoundKeys", new PyBool(false)); //+ keywords->SetItemString("indexName", new PyNone); //+ keywords->SetItemString("columnName", new PyString("parentGroupID")); //+ std::map< int, PyRep* > tt; while( res.GetRow(row) ) { int parentGroupID = ( row.IsNull( 0 ) ? -1 : row.GetUInt( 0 ) ); PyRep *pid; CRowSet *rowset; if(tt.count(parentGroupID) == 0) { pid = parentGroupID!=-1 ? (PyRep*)new PyInt(parentGroupID) : (PyRep*)new PyNone(); tt.insert( std::pair<int, PyRep*>(parentGroupID, pid) ); rowset = filterRowset->NewRowset(pid); } else { pid = tt[parentGroupID]; rowset = filterRowset->GetRowset(pid); } PyPackedRow* pyrow = rowset->NewRow(); pyrow->SetField((uint32)0, pid); //prentGroupID pyrow->SetField(1, new PyInt(row.GetUInt( 1 ) ) ); //marketGroupID pyrow->SetField(2, new PyString(row.GetText( 2 ) ) ); //marketGroupName pyrow->SetField(3, new PyString(row.GetText( 3 ) ) ); //description pyrow->SetField(4, row.IsNull( 4 ) ? (PyRep*)(new PyNone()) : new PyInt(row.GetUInt( 4 )) ); //graphicID pyrow->SetField(5, new PyBool(row.GetBool( 5 ) ) ); //hasTypes pyrow->SetField(6, row.IsNull( 6 ) ? (PyRep*)(new PyNone()) : new PyInt(row.GetUInt( 6 )) ); // iconID pyrow->SetField(7, new PyInt( row.GetUInt(7) ) ); //dataID pyrow->SetField(8, new PyInt( row.GetUInt(8) ) ); //marketGroupNameID pyrow->SetField(9, new PyInt( row.GetUInt(9) ) ); //descriptionID } return filterRowset; }
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; }
bool EVEStatic::loadStaStationTypes() { DBQueryResult result; DBResultRow row; std::string columns = "stationTypeID, dockEntryX, dockEntryY, dockEntryZ," " dockOrientationX, dockOrientationY, dockOrientationZ," " operationID, officeSlots, reprocessingEfficiency, conquerable," " dockingBayGraphicID, hangarGraphicID"; std::string qry = "SELECT " + columns + " FROM staStationTypes LEFT JOIN extStaStationTypes Using(stationTypeID)"; if (!DBcore::RunQuery(result, qry.c_str())) { SysLog::Error("Static DB", "Error in query: %s", result.error.c_str()); return false; } while (result.GetRow(row)) { uint32 stationTypeID = row.GetInt(0); double dockEntryX = row.GetDouble(1); double dockEntryY = row.GetDouble(2); double dockEntryZ = row.GetDouble(3); double dockOrientationX = row.GetDouble(4); double dockOrientationY = row.GetDouble(5); double dockOrientationZ = row.GetDouble(6); uint32 operationID = row.getIntNC(7); uint32 officeSlots = row.getIntNC(8); double reprocessingEfficiency = row.getDoubleNC(9); bool conquerable = row.GetBool(10); // From extStaStationTypes uint32 dockingBayGraphicID = row.getIntNC(11); uint32 hangarGraphicID = row.getIntNC(12); new StaStationType( stationTypeID, dockEntryX, dockEntryY, dockEntryZ, dockOrientationX, dockOrientationY, dockOrientationZ, operationID, officeSlots, reprocessingEfficiency, conquerable, dockingBayGraphicID, hangarGraphicID ); } return true; }
bool APICharacterDB::GetCharacterSkillsTrained(uint32 characterID, std::vector<std::string> & skillTypeIDList, std::vector<std::string> & skillPointsList, std::vector<std::string> & skillLevelList, std::vector<std::string> & skillPublishedList) { DBQueryResult res; // Get list of characters and their corporation info from the accountID: if( !sDatabase.RunQuery(res, " SELECT " " entity.itemID, " " entity.typeID, " " entity_attributes.attributeID, " " entity_attributes.valueInt, " " entity_attributes.valueFloat, " " invTypes.groupID, " " invTypes.published, " " invGroups.categoryID " " FROM `entity` " " LEFT JOIN entity_attributes ON entity_attributes.itemID = entity.itemID " " LEFT JOIN invTypes ON invTypes.typeID = entity.typeID " " LEFT JOIN invGroups ON invGroups.groupID = invTypes.groupID " " WHERE `ownerID` = %u AND invGroups.categoryID = 16 ", characterID )) { sLog.Error( "APIAccountDB::GetCharacterSkillsTrained()", "Cannot find characterID %u", characterID ); return false; } uint32 prevTypeID = 0; bool gotSkillPoints = false; bool gotSkillLevel = false; DBResultRow row; std::map<std::string, std::string> charInfo; while( res.GetRow( row ) ) { if( prevTypeID != row.GetUInt(1) ) { if( (!gotSkillPoints) && (prevTypeID != 0) ) skillPointsList.push_back( std::string("0") ); if( (!gotSkillLevel) && (prevTypeID != 0) ) skillLevelList.push_back( std::string("0") ); gotSkillPoints = false; gotSkillLevel = false; skillTypeIDList.push_back( std::string(row.GetText(1)) ); skillPublishedList.push_back( std::string(itoa(row.GetBool(6) ? 1 : 0)) ); } prevTypeID = row.GetUInt(1); if( row.GetUInt(2) == AttrSkillPoints ) { gotSkillPoints = true; if( row.GetText(3) == NULL ) // Get value from 'entity_attributes' table 'valueFloat' column since 'valueInt' contains 'NULL' skillPointsList.push_back( std::string((row.GetText(4) == NULL ? "0.0" : itoa((uint32)(row.GetFloat(4))))) ); else // Get value from 'entity_attributes' table 'valueInt' column since it does not contain 'NULL' skillPointsList.push_back( std::string((row.GetText(3) == NULL ? "0" : row.GetText(3))) ); } if( row.GetUInt(2) == AttrSkillLevel ) { gotSkillLevel = true; if( row.GetText(3) == NULL ) // Get value from 'entity_attributes' table 'valueFloat' column since 'valueInt' contains 'NULL' skillLevelList.push_back( std::string((row.GetText(4) == NULL ? "0.0" : itoa((uint32)(row.GetFloat(4))))) ); else // Get value from 'entity_attributes' table 'valueInt' column since it does not contain 'NULL' skillLevelList.push_back( std::string((row.GetText(3) == NULL ? "0" : row.GetText(3))) ); } } return true; }