]> git.sesse.net Git - ccbs/blobdiff - bigscreen/fetch_highscore.cpp
Fetch the actual high score from the database when showing high score on the group...
[ccbs] / bigscreen / fetch_highscore.cpp
diff --git a/bigscreen/fetch_highscore.cpp b/bigscreen/fetch_highscore.cpp
new file mode 100644 (file)
index 0000000..04353cc
--- /dev/null
@@ -0,0 +1,21 @@
+#include "fetch_highscore.h"
+
+FetchHighscore::FetchHighscore(unsigned song, Highscore *hs)
+       : song(song), hs(hs) {}
+       
+void FetchHighscore::operator() (pqxx::transaction<> &t)
+{
+       pqxx::result res( t.exec("SELECT score,nick,tournamentname FROM scores NATURAL JOIN players NATURAL JOIN tournaments WHERE song=" + pqxx::to_string(song) + " AND score IS NOT NULL ORDER BY score DESC LIMIT 1") );
+
+       hs->song = song;
+       
+       try {
+               pqxx::result::tuple highscore = res.at(0);
+               
+               hs->score = highscore["score"].as(hs->score);
+               hs->nick = highscore["nick"].as(hs->nick);
+               hs->tournament_name = highscore["tournamentname"].as(hs->tournament_name);
+        } catch (PGSTD::out_of_range &e) {
+               hs->score = -1;
+       }
+}