update stuff
| 173 | |
| 174 | // update stuff |
| 175 | bool CScoreWorker::LoadPlayerData(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize) |
| 176 | { |
| 177 | const auto *pData = dynamic_cast<const CSqlPlayerRequest *>(pGameData); |
| 178 | auto *pResult = dynamic_cast<CScorePlayerResult *>(pGameData->m_pResult.get()); |
| 179 | pResult->SetVariant(CScorePlayerResult::PLAYER_INFO); |
| 180 | |
| 181 | char aBuf[1024]; |
| 182 | // get best race time |
| 183 | str_format(aBuf, sizeof(aBuf), |
| 184 | "SELECT" |
| 185 | " (SELECT Time FROM %s_race WHERE Map = ? AND Name = ? ORDER BY Time ASC LIMIT 1) AS minTime, " |
| 186 | " cp1, cp2, cp3, cp4, cp5, cp6, cp7, cp8, cp9, cp10, cp11, cp12, cp13, cp14, " |
| 187 | " cp15, cp16, cp17, cp18, cp19, cp20, cp21, cp22, cp23, cp24, cp25, " |
| 188 | " (cp1 + cp2 + cp3 + cp4 + cp5 + cp6 + cp7 + cp8 + cp9 + cp10 + cp11 + cp12 + cp13 + cp14 + " |
| 189 | " cp15 + cp16 + cp17 + cp18 + cp19 + cp20 + cp21 + cp22 + cp23 + cp24 + cp25 > 0) AS hasCP, Time " |
| 190 | "FROM %s_race " |
| 191 | "WHERE Map = ? AND Name = ? " |
| 192 | "ORDER BY hasCP DESC, Time ASC " |
| 193 | "LIMIT 1", |
| 194 | pSqlServer->GetPrefix(), pSqlServer->GetPrefix()); |
| 195 | if(!pSqlServer->PrepareStatement(aBuf, pError, ErrorSize)) |
| 196 | { |
| 197 | return false; |
| 198 | } |
| 199 | |
| 200 | const char *pPlayer = pData->m_aName[0] != '\0' ? pData->m_aName : pData->m_aRequestingPlayer; |
| 201 | pSqlServer->BindString(1, pData->m_aMap); |
| 202 | pSqlServer->BindString(2, pData->m_aRequestingPlayer); |
| 203 | pSqlServer->BindString(3, pData->m_aMap); |
| 204 | pSqlServer->BindString(4, pPlayer); |
| 205 | |
| 206 | bool End; |
| 207 | if(!pSqlServer->Step(&End, pError, ErrorSize)) |
| 208 | { |
| 209 | return false; |
| 210 | } |
| 211 | if(!End) |
| 212 | { |
| 213 | if(!pSqlServer->IsNull(1)) |
| 214 | { |
| 215 | // get the best time |
| 216 | float Time = pSqlServer->GetFloat(1); |
| 217 | pResult->m_Data.m_Info.m_Time = Time; |
| 218 | } |
| 219 | |
| 220 | for(int i = 0; i < NUM_CHECKPOINTS; i++) |
| 221 | { |
| 222 | pResult->m_Data.m_Info.m_aTimeCp[i] = pSqlServer->GetFloat(i + 2); |
| 223 | } |
| 224 | } |
| 225 | |
| 226 | // birthday check |
| 227 | str_format(aBuf, sizeof(aBuf), |
| 228 | "SELECT CURRENT_TIMESTAMP AS Current, MIN(Timestamp) AS Stamp " |
| 229 | "FROM %s_race " |
| 230 | "WHERE Name = ?", |
| 231 | pSqlServer->GetPrefix()); |
| 232 | if(!pSqlServer->PrepareStatement(aBuf, pError, ErrorSize)) |
nothing calls this directly
no test coverage detected