]> git.sesse.net Git - ccbs/blobdiff - bigscreen/fetch_max_score_for_player.cpp
Add (a rather sizable chunk of) code for determining the possible best and worst...
[ccbs] / bigscreen / fetch_max_score_for_player.cpp
diff --git a/bigscreen/fetch_max_score_for_player.cpp b/bigscreen/fetch_max_score_for_player.cpp
new file mode 100644 (file)
index 0000000..70472b0
--- /dev/null
@@ -0,0 +1,14 @@
+#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);
+}