--- /dev/null
+#include "fetch_max_score_for_player.h"
+
+FetchMaxScoreForPlayer::FetchMaxScoreForPlayer(unsigned tournament, unsigned player, unsigned round, unsigned *score)
+ : tournament(tournament), player(player), round(round), score(score) {}
+
+void FetchMaxScoreForPlayer::operator() (pqxx::transaction<> &t)
+{
+ pqxx::result res( t.exec("SELECT MAX(feetrating)*1000 AS max_score FROM songratings WHERE "
+ "machine=( SELECT machine FROM tournaments WHERE tournament=" + pqxx::to_string(tournament) + ") AND "
+ "(song NOT IN ( SELECT song FROM scores WHERE tournament=" + pqxx::to_string(tournament) + " AND song IS NOT NULL AND ( "
+ "round=" + pqxx::to_string(round) + " OR parallel=0 OR ( player=" + pqxx::to_string(player) + " AND chosen='t' ) ) ) )") );
+
+ *score = res.at(0)["max_score"].as(*score);
+}