X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=bigscreen%2Ffetch_group.cpp;h=2c58762de64e9550156694f444c4dd62902bf79c;hb=2bd63a87ed5f7984721a86627269d21fc71a0139;hp=e1d0112160f2fa6f9e85d692e731f5f0e32fd9d1;hpb=f40fa6f12fb246c09e925e97bcd7c40f8d2fa59c;p=ccbs diff --git a/bigscreen/fetch_group.cpp b/bigscreen/fetch_group.cpp index e1d0112..2c58762 100644 --- a/bigscreen/fetch_group.cpp +++ b/bigscreen/fetch_group.cpp @@ -5,7 +5,8 @@ FetchGroup::FetchGroup(unsigned tournament, unsigned round, unsigned parallel, G void FetchGroup::operator() (pqxx::transaction<> &t) { - pqxx::result res( t.exec("SELECT round,parallel,position,playmode,difficulty,songnumber,player,nick,song,title,artist,chosen,score FROM roundparticipation NATURAL JOIN players NATURAL JOIN scores NATURAL LEFT JOIN songs WHERE " + // note: this _will_ break if any song has more than one short title! + pqxx::result res( t.exec("SELECT numqualifying,playmode,difficulty,position,songnumber,player,nick,song,title,COALESCE(shorttitle,title) AS shorttitle,artist,chosen,score FROM rounds NATURAL JOIN roundparticipation NATURAL JOIN players NATURAL JOIN scores NATURAL LEFT JOIN songs NATURAL LEFT JOIN songshorttitles WHERE " "tournament=" + pqxx::to_string(tournament) + " AND " + "round=" + pqxx::to_string(round) + " AND " + "parallel=" + pqxx::to_string(parallel) + " " + @@ -18,10 +19,13 @@ void FetchGroup::operator() (pqxx::transaction<> &t) // massage the data we get back into a Group object and children int curr_player = -1; for (pqxx::result::const_iterator i = res.begin(); i != res.end(); ++i) { + curr_group.num_qualifying = i["numqualifying"].as(curr_group.num_qualifying); + if (i["player"].as(curr_player) != curr_player) { Player p; p.id = i["player"].as(p.id); + p.position = i["position"].as(p.id); p.nick = i["nick"].as(p.nick); p.total = 0; p.rank = 1; @@ -35,19 +39,26 @@ void FetchGroup::operator() (pqxx::transaction<> &t) Score sc; Song so; - so.id = i["song"].as(so.id); - so.title = i["song"].as(so.title); - so.artist = i["song"].as(so.artist); + if (i["song"].is_null()) { + so.id = -1; + } else { + so.id = i["song"].as(so.id); + so.title = i["title"].as(so.title); + so.artist = i["artist"].as(so.artist); + so.short_title = i["shorttitle"].as(so.short_title); + } sc.song = so; sc.chosen = i["chosen"].as(sc.chosen); - sc.score = i["score"].as(sc.score); - + + if (i["score"].is_null()) { + sc.score = -1; + } else { + sc.score = i["score"].as(sc.score); + curr_group.players[curr_group.players.size() - 1].total += sc.score; + } + curr_group.players[curr_group.players.size() - 1].scores.push_back(sc); } -} - -void FetchGroup::OnCommit() -{ *dest_group = curr_group; }