]> git.sesse.net Git - ccbs/blobdiff - bigscreen/fetch_max_score_for_players.cpp
Moved FetchMaxScoreForPlayers into a stored procedure.
[ccbs] / bigscreen / fetch_max_score_for_players.cpp
index 3aa66b7837364ec9e12d6c5d441ffc5a6e9da3ee..0b41055cb0f51b064e7b1ed3969156e10fc063bb 100644 (file)
@@ -7,28 +7,9 @@ void FetchMaxScoreForPlayers::operator() (pqxx::transaction<> &t)
 {
        scores->erase(scores->begin(), scores->end());
        
-       pqxx::result res( t.exec(
-               "SELECT player,"
-               "  ("
-               "     SELECT feetrating"
-               "     FROM songratings"
-               "     WHERE machine=( SELECT machine FROM tournaments WHERE tournament=" + pqxx::to_string(tournament) + " ) " // only find songs on the machine we use
-               "     AND song NOT IN ("                      // not a song that has been in elimination or seeding
-               "       SELECT song FROM scores "
-               "         WHERE tournament=" + pqxx::to_string(tournament) +
-               "         AND song IS NOT NULL"
-               "         AND parallel=0"
-               "         AND chosen='f'"
-               "     )"
-               "     AND (player,song) NOT IN ("             // not a song the player has chosen before, or is a random song in this round
-               "       SELECT player,song FROM scores"
-               "          WHERE tournament=" + pqxx::to_string(tournament) +
-               "          AND song IS NOT NULL" +
-               "          AND ( chosen='t' OR round=" + pqxx::to_string(round) + " )"
-               "       )"
-               "     AND playmode='single'"
-               "     ORDER BY feetrating DESC LIMIT 1"      
-               "  ) * 1000 AS max_score FROM tournamentparticipation") );
+       pqxx::result res( t.exec("SELECT * FROM get_max_score_for_players("
+               + pqxx::to_string(tournament) + ", " + pqxx::to_string(round) +
+               ", 'single')") );
        
        for (pqxx::result::const_iterator i = res.begin(); i != res.end(); ++i) {
                unsigned player, max_score;