+#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;
+ }
+}