+#include "fetch_list_of_finished_groups.h"
+
+FetchListOfFinishedGroups::FetchListOfFinishedGroups(unsigned tournament, std::vector<SkeletonGroup> *active) :
+ tournament(tournament), active(active) {}
+
+void FetchListOfFinishedGroups::operator() (pqxx::transaction<> &t)
+{
+ // make sure we start with an empty list
+ active->erase(active->begin(), active->end());
+
+ // find all groups with no empty scores that are not already shown on the bigscreen
+ pqxx::result res( t.exec("SELECT tournament,round,parallel FROM scores WHERE tournament=" +
+ pqxx::to_string(tournament) + " GROUP BY tournament,round,parallel HAVING COUNT(*)=COUNT(score) AND (tournament,round) NOT IN ( SELECT tournament,round FROM bigscreen.active_groups ) ORDER BY tournament,round,parallel") );
+
+ for (pqxx::result::const_iterator i = res.begin(); i != res.end(); ++i) {
+ SkeletonGroup g;
+
+ g.tournament = i["tournament"].as(g.tournament);
+ g.round = i["round"].as(g.round);
+ g.parallel = i["parallel"].as(g.parallel);
+ g.num_machines = 1;
+
+ active->push_back(g);
+ }
+}